drm/amd/display: Use optc32 instead of optc30 in DC
authorOvidiu Bunea <ovidiu.bunea@amd.com>
Wed, 6 Sep 2023 22:03:19 +0000 (18:03 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 26 Sep 2023 20:54:18 +0000 (16:54 -0400)
Change DC to use optc32, which uses REG_UPDATE instead of REG_SET.
REG_SET clears OTG_H_TIMING_DIV_MODE_MANUAL which must be set to 1 in
some specific HDMI configurations.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: Charlene Liu <charlene.liu@amd.com>
Acked-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
Signed-off-by: Ovidiu Bunea <ovidiu.bunea@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_optc.c
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.h
drivers/gpu/drm/amd/display/dc/dcn35/dcn35_optc.c

index 5bf4d0aa62305e5a5e68a36f172aac0ef7705c84..b97bdb868a0e7f91b5eab21d5a9758921dfac080 100644 (file)
@@ -207,7 +207,7 @@ void optc3_set_odm_bypass(struct timing_generator *optc,
                        );
 
        h_div = optc1_is_two_pixels_per_containter(dc_crtc_timing);
-       REG_SET(OTG_H_TIMING_CNTL, 0,
+       REG_UPDATE(OTG_H_TIMING_CNTL,
                        OTG_H_TIMING_DIV_MODE, h_div);
 
        REG_SET(OPTC_MEMORY_CONFIG, 0,
index e7e25c58c69285e4745300bc6e433bfb17269d93..a2c4db2cebdd6c742a91e20d77869c5cd94b7ee1 100644 (file)
@@ -201,7 +201,7 @@ static void optc32_disable_phantom_otg(struct timing_generator *optc)
        REG_UPDATE(OTG_CONTROL, OTG_MASTER_EN, 0);
 }
 
-static void optc32_set_odm_bypass(struct timing_generator *optc,
+void optc32_set_odm_bypass(struct timing_generator *optc,
                const struct dc_crtc_timing *dc_crtc_timing)
 {
        struct optc *optc1 = DCN10TG_FROM_TG(optc);
index 93cc7fc8472c54920167ba3148917e85ec82b345..8ce3b178cab06513fffc93bf3ef9b84d288f505b 100644 (file)
 void dcn32_timing_generator_init(struct optc *optc1);
 void optc32_set_h_timing_div_manual_mode(struct timing_generator *optc, bool manual_mode);
 void optc32_get_odm_combine_segments(struct timing_generator *tg, int *odm_combine_segments);
+void optc32_set_odm_bypass(struct timing_generator *optc,
+               const struct dc_crtc_timing *dc_crtc_timing);
 
 #endif /* __DC_OPTC_DCN32_H__ */
index 2bea1e475096857f78c1f995be1f6109f63c4990..b0c068240a949cd8d83828056ec3d7b108e75cc9 100644 (file)
@@ -249,7 +249,7 @@ static struct timing_generator_funcs dcn35_tg_funcs = {
                .set_dsc_config = optc3_set_dsc_config,
                .get_dsc_status = optc2_get_dsc_status,
                .set_dwb_source = NULL,
-               .set_odm_bypass = optc3_set_odm_bypass,
+               .set_odm_bypass = optc32_set_odm_bypass,
                .set_odm_combine = optc35_set_odm_combine,
                .get_optc_source = optc2_get_optc_source,
                .set_h_timing_div_manual_mode = optc32_set_h_timing_div_manual_mode,