drm/amd/display: reset the scaler boundary mode
authorZhikai Zhai <zhikai.zhai@amd.com>
Mon, 27 Feb 2023 11:39:35 +0000 (19:39 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 14 Mar 2023 19:34:57 +0000 (15:34 -0400)
[WHY]
The VBIOS select the black boundary mode when using auto
scale mode. But it doesn't recover if there is no reset.

[HOW]
Clean the scaler boundary mode to default edge in the manual
scale mode.

Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: Zhikai Zhai <zhikai.zhai@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.h

index 71b3a694900131ab2019736c2e4653c9483aa01d..c9e045666dcc89854a17492c6df79fe1afc2524c 100644 (file)
@@ -59,6 +59,7 @@
        SRI(LB_DATA_FORMAT, DSCL, id), \
        SRI(LB_MEMORY_CTRL, DSCL, id), \
        SRI(DSCL_AUTOCAL, DSCL, id), \
+       SRI(DSCL_CONTROL, DSCL, id), \
        SRI(SCL_BLACK_OFFSET, DSCL, id), \
        SRI(SCL_TAP_CONTROL, DSCL, id), \
        SRI(SCL_COEF_RAM_TAP_SELECT, DSCL, id), \
        TF_SF(DSCL0_DSCL_AUTOCAL, AUTOCAL_MODE, mask_sh),\
        TF_SF(DSCL0_DSCL_AUTOCAL, AUTOCAL_NUM_PIPE, mask_sh),\
        TF_SF(DSCL0_DSCL_AUTOCAL, AUTOCAL_PIPE_ID, mask_sh),\
+       TF_SF(DSCL0_DSCL_CONTROL, SCL_BOUNDARY_MODE, mask_sh),\
        TF_SF(DSCL0_SCL_BLACK_OFFSET, SCL_BLACK_OFFSET_RGB_Y, mask_sh),\
        TF_SF(DSCL0_SCL_BLACK_OFFSET, SCL_BLACK_OFFSET_CBCR, mask_sh),\
        TF_SF(DSCL0_SCL_TAP_CONTROL, SCL_V_NUM_TAPS, mask_sh),\
        type AUTOCAL_MODE; \
        type AUTOCAL_NUM_PIPE; \
        type AUTOCAL_PIPE_ID; \
+       type SCL_BOUNDARY_MODE; \
        type SCL_BLACK_OFFSET_RGB_Y; \
        type SCL_BLACK_OFFSET_CBCR; \
        type SCL_V_NUM_TAPS; \
@@ -1108,6 +1111,7 @@ struct dcn_dpp_mask {
        uint32_t LB_DATA_FORMAT; \
        uint32_t LB_MEMORY_CTRL; \
        uint32_t DSCL_AUTOCAL; \
+       uint32_t DSCL_CONTROL; \
        uint32_t SCL_BLACK_OFFSET; \
        uint32_t SCL_TAP_CONTROL; \
        uint32_t SCL_COEF_RAM_TAP_SELECT; \
index f62368da875dc57c8847f4ce0f4442d9a335fdd0..b33955928bd0b8e0158219b3ca2f837533622af3 100644 (file)
@@ -655,6 +655,10 @@ void dpp1_dscl_set_scaler_manual_scale(struct dpp *dpp_base,
                AUTOCAL_NUM_PIPE, 0,
                AUTOCAL_PIPE_ID, 0);
 
+       /*clean scaler boundary mode when Autocal off*/
+       REG_SET(DSCL_CONTROL, 0,
+               SCL_BOUNDARY_MODE, 0);
+
        /* Recout */
        dpp1_dscl_set_recout(dpp, &scl_data->recout);
 
index 6263408d71fca518e722cc173e3dde65e7db6366..2082372d69eef876f59478da5b9a087926ac9fc8 100644 (file)
        SRI(LB_DATA_FORMAT, DSCL, id), \
        SRI(LB_MEMORY_CTRL, DSCL, id), \
        SRI(DSCL_AUTOCAL, DSCL, id), \
+       SRI(DSCL_CONTROL, DSCL, id), \
        SRI(SCL_TAP_CONTROL, DSCL, id), \
        SRI(SCL_COEF_RAM_TAP_SELECT, DSCL, id), \
        SRI(SCL_COEF_RAM_TAP_DATA, DSCL, id), \
        TF_SF(DSCL0_LB_MEMORY_CTRL, LB_MAX_PARTITIONS, mask_sh),\
        TF_SF(DSCL0_DSCL_AUTOCAL, AUTOCAL_MODE, mask_sh),\
        TF_SF(DSCL0_DSCL_AUTOCAL, AUTOCAL_NUM_PIPE, mask_sh),\
+       TF_SF(DSCL0_DSCL_CONTROL, SCL_BOUNDARY_MODE, mask_sh),\
        TF_SF(DSCL0_DSCL_AUTOCAL, AUTOCAL_PIPE_ID, mask_sh),\
        TF_SF(DSCL0_SCL_TAP_CONTROL, SCL_V_NUM_TAPS, mask_sh),\
        TF_SF(DSCL0_SCL_TAP_CONTROL, SCL_H_NUM_TAPS, mask_sh),\