drm/amd/display: Remove interface for periodic interrupt 1
authorAric Cyr <aric.cyr@amd.com>
Fri, 9 Sep 2022 22:07:59 +0000 (18:07 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 26 Oct 2022 10:35:42 +0000 (12:35 +0200)
[ Upstream commit 97d8d6f075bd8f988589be02b91f6fa644d0b0b8 ]

[why]
Only a single VLINE interrupt is available so interface should not
expose the second one which is used by DMU firmware.

[how]
Remove references to periodic_interrupt1 and VLINE1 from DC interfaces.

Reviewed-by: Jaehyun Chung <jaehyun.chung@amd.com>
Acked-by: Jasdeep Dhillon <jdhillon@amd.com>
Signed-off-by: Aric Cyr <aric.cyr@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/dc/core/dc.c
drivers/gpu/drm/amd/display/dc/dc_stream.h
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.h
drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h

index 1bde9d4e82d4bbdffffeabcce315df18938acfcd..6c9378208127d7277644e49380bac22f375d935b 100644 (file)
@@ -2462,11 +2462,8 @@ static void copy_stream_update_to_stream(struct dc *dc,
        if (update->abm_level)
                stream->abm_level = *update->abm_level;
 
-       if (update->periodic_interrupt0)
-               stream->periodic_interrupt0 = *update->periodic_interrupt0;
-
-       if (update->periodic_interrupt1)
-               stream->periodic_interrupt1 = *update->periodic_interrupt1;
+       if (update->periodic_interrupt)
+               stream->periodic_interrupt = *update->periodic_interrupt;
 
        if (update->gamut_remap)
                stream->gamut_remap_matrix = *update->gamut_remap;
@@ -2550,13 +2547,8 @@ static void commit_planes_do_stream_update(struct dc *dc,
 
                if (!pipe_ctx->top_pipe &&  !pipe_ctx->prev_odm_pipe && pipe_ctx->stream == stream) {
 
-                       if (stream_update->periodic_interrupt0 &&
-                                       dc->hwss.setup_periodic_interrupt)
-                               dc->hwss.setup_periodic_interrupt(dc, pipe_ctx, VLINE0);
-
-                       if (stream_update->periodic_interrupt1 &&
-                                       dc->hwss.setup_periodic_interrupt)
-                               dc->hwss.setup_periodic_interrupt(dc, pipe_ctx, VLINE1);
+                       if (stream_update->periodic_interrupt && dc->hwss.setup_periodic_interrupt)
+                               dc->hwss.setup_periodic_interrupt(dc, pipe_ctx);
 
                        if ((stream_update->hdr_static_metadata && !stream->use_dynamic_meta) ||
                                        stream_update->vrr_infopacket ||
index b8ebc1f09538995e61e794da70149451a6ff0648..7644f0e747d3f41207de80d4410dd36e420d3ace 100644 (file)
@@ -193,8 +193,7 @@ struct dc_stream_state {
        /* DMCU info */
        unsigned int abm_level;
 
-       struct periodic_interrupt_config periodic_interrupt0;
-       struct periodic_interrupt_config periodic_interrupt1;
+       struct periodic_interrupt_config periodic_interrupt;
 
        /* from core_stream struct */
        struct dc_context *ctx;
@@ -260,8 +259,7 @@ struct dc_stream_update {
        struct dc_info_packet *hdr_static_metadata;
        unsigned int *abm_level;
 
-       struct periodic_interrupt_config *periodic_interrupt0;
-       struct periodic_interrupt_config *periodic_interrupt1;
+       struct periodic_interrupt_config *periodic_interrupt;
 
        struct dc_info_packet *vrr_infopacket;
        struct dc_info_packet *vsc_infopacket;
index 93f31e4aeecb30758c5ab276c4cec51916d138a3..91ab4dbbe1a6d52d8ab561fdc7880757abfb4f3a 100644 (file)
@@ -3517,7 +3517,7 @@ void dcn10_calc_vupdate_position(
 {
        const struct dc_crtc_timing *dc_crtc_timing = &pipe_ctx->stream->timing;
        int vline_int_offset_from_vupdate =
-                       pipe_ctx->stream->periodic_interrupt0.lines_offset;
+                       pipe_ctx->stream->periodic_interrupt.lines_offset;
        int vupdate_offset_from_vsync = dc->hwss.get_vupdate_offset_from_vsync(pipe_ctx);
        int start_position;
 
@@ -3542,18 +3542,10 @@ void dcn10_calc_vupdate_position(
 static void dcn10_cal_vline_position(
                struct dc *dc,
                struct pipe_ctx *pipe_ctx,
-               enum vline_select vline,
                uint32_t *start_line,
                uint32_t *end_line)
 {
-       enum vertical_interrupt_ref_point ref_point = INVALID_POINT;
-
-       if (vline == VLINE0)
-               ref_point = pipe_ctx->stream->periodic_interrupt0.ref_point;
-       else if (vline == VLINE1)
-               ref_point = pipe_ctx->stream->periodic_interrupt1.ref_point;
-
-       switch (ref_point) {
+       switch (pipe_ctx->stream->periodic_interrupt.ref_point) {
        case START_V_UPDATE:
                dcn10_calc_vupdate_position(
                                dc,
@@ -3562,7 +3554,9 @@ static void dcn10_cal_vline_position(
                                end_line);
                break;
        case START_V_SYNC:
-               // Suppose to do nothing because vsync is 0;
+               // vsync is line 0 so start_line is just the requested line offset
+               *start_line = pipe_ctx->stream->periodic_interrupt.lines_offset;
+               *end_line = *start_line + 2;
                break;
        default:
                ASSERT(0);
@@ -3572,24 +3566,15 @@ static void dcn10_cal_vline_position(
 
 void dcn10_setup_periodic_interrupt(
                struct dc *dc,
-               struct pipe_ctx *pipe_ctx,
-               enum vline_select vline)
+               struct pipe_ctx *pipe_ctx)
 {
        struct timing_generator *tg = pipe_ctx->stream_res.tg;
+       uint32_t start_line = 0;
+       uint32_t end_line = 0;
 
-       if (vline == VLINE0) {
-               uint32_t start_line = 0;
-               uint32_t end_line = 0;
+       dcn10_cal_vline_position(dc, pipe_ctx, &start_line, &end_line);
 
-               dcn10_cal_vline_position(dc, pipe_ctx, vline, &start_line, &end_line);
-
-               tg->funcs->setup_vertical_interrupt0(tg, start_line, end_line);
-
-       } else if (vline == VLINE1) {
-               pipe_ctx->stream_res.tg->funcs->setup_vertical_interrupt1(
-                               tg,
-                               pipe_ctx->stream->periodic_interrupt1.lines_offset);
-       }
+       tg->funcs->setup_vertical_interrupt0(tg, start_line, end_line);
 }
 
 void dcn10_setup_vupdate_interrupt(struct dc *dc, struct pipe_ctx *pipe_ctx)
index 9ae07c77fdc01d5f008194c286e3a29a16a7b0f4..0ef7bf7ddb75e918472f92577837de7907bdebfb 100644 (file)
@@ -175,8 +175,7 @@ void dcn10_set_cursor_attribute(struct pipe_ctx *pipe_ctx);
 void dcn10_set_cursor_sdr_white_level(struct pipe_ctx *pipe_ctx);
 void dcn10_setup_periodic_interrupt(
                struct dc *dc,
-               struct pipe_ctx *pipe_ctx,
-               enum vline_select vline);
+               struct pipe_ctx *pipe_ctx);
 enum dc_status dcn10_set_clock(struct dc *dc,
                enum dc_clock_type clock_type,
                uint32_t clk_khz,
index ad5f2adcc40d5d1f00ad76513c27610414c726a4..c8427d738c87ea5c2520c701fc6ed88ed7d44faa 100644 (file)
 #include "inc/hw/link_encoder.h"
 #include "core_status.h"
 
-enum vline_select {
-       VLINE0,
-       VLINE1
-};
-
 struct pipe_ctx;
 struct dc_state;
 struct dc_stream_status;
@@ -115,8 +110,7 @@ struct hw_sequencer_funcs {
                        int group_index, int group_size,
                        struct pipe_ctx *grouped_pipes[]);
        void (*setup_periodic_interrupt)(struct dc *dc,
-                       struct pipe_ctx *pipe_ctx,
-                       enum vline_select vline);
+                       struct pipe_ctx *pipe_ctx);
        void (*set_drr)(struct pipe_ctx **pipe_ctx, int num_pipes,
                        struct dc_crtc_timing_adjust adjust);
        void (*set_static_screen_control)(struct pipe_ctx **pipe_ctx,