From: Charlene Liu <[email protected]>

[why]
Default low pwr mem state get chagned.
SW needs to wake mem up first
also need to put back to LS again after use: will do in Part II.

Reviewed-by: Leo Chen <[email protected]>
Signed-off-by: Charlene Liu <[email protected]>
Signed-off-by: Chenyu Chen <[email protected]>
---
 .../drm/amd/display/dc/dpp/dcn10/dcn10_dpp.h  |   1 +
 .../amd/display/dc/dpp/dcn401/dcn401_dpp.h    |   9 ++
 .../display/dc/dpp/dcn401/dcn401_dpp_dscl.c   | 102 +++++++++---------
 .../dc/resource/dcn401/dcn401_resource.h      |   1 +
 4 files changed, 60 insertions(+), 53 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dpp/dcn10/dcn10_dpp.h 
b/drivers/gpu/drm/amd/display/dc/dpp/dcn10/dcn10_dpp.h
index b12f34345a58..890d04b1ddaf 100644
--- a/drivers/gpu/drm/amd/display/dc/dpp/dcn10/dcn10_dpp.h
+++ b/drivers/gpu/drm/amd/display/dc/dpp/dcn10/dcn10_dpp.h
@@ -545,6 +545,7 @@
        type SCL_COEF_RAM_SELECT_CURRENT; \
        type LUT_MEM_PWR_FORCE; \
        type LUT_MEM_PWR_STATE; \
+       type LUT_MEM_PWR_DIS; \
        type CM_GAMUT_REMAP_MODE; \
        type CM_GAMUT_REMAP_C11; \
        type CM_GAMUT_REMAP_C12; \
diff --git a/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp.h 
b/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp.h
index 5f6b431ec398..58b9f1cd0825 100644
--- a/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp.h
+++ b/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp.h
@@ -41,6 +41,7 @@
        TF_SF(CM0_CM_BIAS_Y_G_CB_B, CM_BIAS_CB_B, mask_sh),\
        TF_SF(CM0_CM_MEM_PWR_CTRL, GAMCOR_MEM_PWR_DIS, mask_sh),\
        TF_SF(CM0_CM_MEM_PWR_CTRL, GAMCOR_MEM_PWR_FORCE, mask_sh),\
+       TF_SF(CM0_CM_MEM_PWR_CTRL, GAMCOR_MEM_PWR_DIS, mask_sh),\
        TF_SF(CNVC_CFG0_PRE_DEGAM, PRE_DEGAM_MODE, mask_sh),\
        TF_SF(CNVC_CFG0_PRE_DEGAM, PRE_DEGAM_SELECT, mask_sh),\
        TF_SF(CM0_CM_GAMCOR_CONTROL, CM_GAMCOR_MODE, mask_sh),\
@@ -208,6 +209,7 @@
        TF_SF(CM_CUR0_CURSOR0_CONTROL, CUR0_ROM_EN, mask_sh),\
        TF_SF(DSCL0_OBUF_MEM_PWR_CTRL, OBUF_MEM_PWR_FORCE, mask_sh),\
        TF_SF(DSCL0_DSCL_MEM_PWR_CTRL, LUT_MEM_PWR_FORCE, mask_sh),\
+       TF_SF(DSCL0_DSCL_MEM_PWR_CTRL, LUT_MEM_PWR_DIS, mask_sh),\
        TF_SF(DSCL0_DSCL_MEM_PWR_STATUS, LUT_MEM_PWR_STATE, mask_sh),\
        TF_SF(DSCL0_DSCL_SC_MODE, SCL_SC_MATRIX_MODE, mask_sh),\
        TF_SF(DSCL0_DSCL_SC_MODE, SCL_SC_LTONL_EN, mask_sh),\
@@ -336,6 +338,9 @@
        TF_SF(DSCL0_DSCL_SC_MATRIX_C2C3, SCL_SC_MATRIX_C2, mask_sh),\
        TF_SF(DSCL0_DSCL_SC_MATRIX_C2C3, SCL_SC_MATRIX_C3, mask_sh),\
        TF_SF(DSCL0_ISHARP_DELTA_CTRL, ISHARP_DELTA_LUT_HOST_SELECT, mask_sh),\
+       TF_SF(DSCL0_ISHARP_DELTA_LUT_MEM_PWR_CTRL, 
ISHARP_DELTA_LUT_MEM_PWR_DIS, mask_sh),\
+       TF_SF(DSCL0_ISHARP_DELTA_LUT_MEM_PWR_CTRL, 
ISHARP_DELTA_LUT_MEM_PWR_FORCE, mask_sh),\
+       TF_SF(DSCL0_ISHARP_DELTA_LUT_MEM_PWR_CTRL, 
ISHARP_DELTA_LUT_MEM_PWR_STATE, mask_sh),\
        TF_SF(DSCL0_ISHARP_DELTA_DATA, ISHARP_DELTA_DATA, mask_sh),\
        TF_SF(DSCL0_ISHARP_DELTA_INDEX, ISHARP_DELTA_INDEX, mask_sh),\
        TF_SF(DSCL0_ISHARP_MODE, ISHARP_EN, mask_sh),\
@@ -558,6 +563,9 @@
        type ISHARP_DELTA_LUT_SELECT;   \
        type ISHARP_DELTA_LUT_SELECT_CURRENT;   \
        type ISHARP_DELTA_LUT_HOST_SELECT;      \
+       type ISHARP_DELTA_LUT_MEM_PWR_DIS;      \
+       type ISHARP_DELTA_LUT_MEM_PWR_FORCE;\
+       type ISHARP_DELTA_LUT_MEM_PWR_STATE;\
        type ISHARP_DELTA_DATA; \
        type ISHARP_DELTA_INDEX; \
        type ISHARP_NLDELTA_SCLIP_EN_P; \
@@ -629,6 +637,7 @@
        uint32_t DSCL_SC_MATRIX_C0C1; \
        uint32_t DSCL_SC_MATRIX_C2C3; \
        uint32_t ISHARP_MODE; \
+       uint32_t ISHARP_DELTA_LUT_MEM_PWR_CTRL; \
        uint32_t ISHARP_NOISEDET_THRESHOLD; \
        uint32_t ISHARP_NOISE_GAIN_PWL; \
        uint32_t ISHARP_LBA_PWL_SEG0; \
diff --git a/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp_dscl.c 
b/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp_dscl.c
index 6df3419f825f..a62c4733ed3b 100644
--- a/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp_dscl.c
+++ b/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp_dscl.c
@@ -966,62 +966,57 @@ static void dpp401_dscl_program_isharp(struct dpp 
*dpp_base,
                ISHARP_FMT_NORM, scl_data->dscl_prog_data.isharp_fmt.norm);
 
        /* Skip remaining register programming if ISHARP is disabled */
-       if (!scl_data->dscl_prog_data.isharp_en) {
-               PERF_TRACE();
-               return;
-       }
-
-       /* ISHARP_NOISEDET_THRESHOLD */
-       REG_SET_2(ISHARP_NOISEDET_THRESHOLD, 0,
-               ISHARP_NOISEDET_UTHRE, 
scl_data->dscl_prog_data.isharp_noise_det.uthreshold,
-               ISHARP_NOISEDET_DTHRE, 
scl_data->dscl_prog_data.isharp_noise_det.dthreshold);
-
-       /* ISHARP_NOISE_GAIN_PWL */
-       REG_SET_3(ISHARP_NOISE_GAIN_PWL, 0,
-               ISHARP_NOISEDET_PWL_START_IN, 
scl_data->dscl_prog_data.isharp_noise_det.pwl_start_in,
-               ISHARP_NOISEDET_PWL_END_IN, 
scl_data->dscl_prog_data.isharp_noise_det.pwl_end_in,
-               ISHARP_NOISEDET_PWL_SLOPE, 
scl_data->dscl_prog_data.isharp_noise_det.pwl_slope);
-
-       /* ISHARP_LBA: IN_SEG, BASE_SEG, SLOPE_SEG */
-       REG_SET_3(ISHARP_LBA_PWL_SEG0, 0,
-               ISHARP_LBA_PWL_IN_SEG0, 
scl_data->dscl_prog_data.isharp_lba.in_seg[0],
-               ISHARP_LBA_PWL_BASE_SEG0, 
scl_data->dscl_prog_data.isharp_lba.base_seg[0],
-               ISHARP_LBA_PWL_SLOPE_SEG0, 
scl_data->dscl_prog_data.isharp_lba.slope_seg[0]);
-       REG_SET_3(ISHARP_LBA_PWL_SEG1, 0,
-               ISHARP_LBA_PWL_IN_SEG1, 
scl_data->dscl_prog_data.isharp_lba.in_seg[1],
-               ISHARP_LBA_PWL_BASE_SEG1, 
scl_data->dscl_prog_data.isharp_lba.base_seg[1],
-               ISHARP_LBA_PWL_SLOPE_SEG1, 
scl_data->dscl_prog_data.isharp_lba.slope_seg[1]);
-       REG_SET_3(ISHARP_LBA_PWL_SEG2, 0,
-               ISHARP_LBA_PWL_IN_SEG2, 
scl_data->dscl_prog_data.isharp_lba.in_seg[2],
-               ISHARP_LBA_PWL_BASE_SEG2, 
scl_data->dscl_prog_data.isharp_lba.base_seg[2],
-               ISHARP_LBA_PWL_SLOPE_SEG2, 
scl_data->dscl_prog_data.isharp_lba.slope_seg[2]);
-       REG_SET_3(ISHARP_LBA_PWL_SEG3, 0,
-               ISHARP_LBA_PWL_IN_SEG3, 
scl_data->dscl_prog_data.isharp_lba.in_seg[3],
-               ISHARP_LBA_PWL_BASE_SEG3, 
scl_data->dscl_prog_data.isharp_lba.base_seg[3],
-               ISHARP_LBA_PWL_SLOPE_SEG3, 
scl_data->dscl_prog_data.isharp_lba.slope_seg[3]);
-       REG_SET_3(ISHARP_LBA_PWL_SEG4, 0,
-               ISHARP_LBA_PWL_IN_SEG4, 
scl_data->dscl_prog_data.isharp_lba.in_seg[4],
-               ISHARP_LBA_PWL_BASE_SEG4, 
scl_data->dscl_prog_data.isharp_lba.base_seg[4],
-               ISHARP_LBA_PWL_SLOPE_SEG4, 
scl_data->dscl_prog_data.isharp_lba.slope_seg[4]);
-       REG_SET_2(ISHARP_LBA_PWL_SEG5, 0,
-               ISHARP_LBA_PWL_IN_SEG5, 
scl_data->dscl_prog_data.isharp_lba.in_seg[5],
-               ISHARP_LBA_PWL_BASE_SEG5, 
scl_data->dscl_prog_data.isharp_lba.base_seg[5]);
-
-       /* ISHARP_DELTA_LUT */
-       if (!program_isharp_1dlut)
-               dpp401_dscl_set_isharp_filter(dpp, 
scl_data->dscl_prog_data.isharp_delta);
+       if (scl_data->dscl_prog_data.isharp_en) {
+               /* ISHARP_NOISEDET_THRESHOLD */
+               REG_SET_2(ISHARP_NOISEDET_THRESHOLD, 0,
+                       ISHARP_NOISEDET_UTHRE, 
scl_data->dscl_prog_data.isharp_noise_det.uthreshold,
+                       ISHARP_NOISEDET_DTHRE, 
scl_data->dscl_prog_data.isharp_noise_det.dthreshold);
+
+               /* ISHARP_NOISE_GAIN_PWL */
+               REG_SET_3(ISHARP_NOISE_GAIN_PWL, 0,
+                       ISHARP_NOISEDET_PWL_START_IN, 
scl_data->dscl_prog_data.isharp_noise_det.pwl_start_in,
+                       ISHARP_NOISEDET_PWL_END_IN, 
scl_data->dscl_prog_data.isharp_noise_det.pwl_end_in,
+                       ISHARP_NOISEDET_PWL_SLOPE, 
scl_data->dscl_prog_data.isharp_noise_det.pwl_slope);
+
+               /* ISHARP_LBA: IN_SEG, BASE_SEG, SLOPE_SEG */
+               REG_SET_3(ISHARP_LBA_PWL_SEG0, 0,
+                       ISHARP_LBA_PWL_IN_SEG0, 
scl_data->dscl_prog_data.isharp_lba.in_seg[0],
+                       ISHARP_LBA_PWL_BASE_SEG0, 
scl_data->dscl_prog_data.isharp_lba.base_seg[0],
+                       ISHARP_LBA_PWL_SLOPE_SEG0, 
scl_data->dscl_prog_data.isharp_lba.slope_seg[0]);
+               REG_SET_3(ISHARP_LBA_PWL_SEG1, 0,
+                       ISHARP_LBA_PWL_IN_SEG1, 
scl_data->dscl_prog_data.isharp_lba.in_seg[1],
+                       ISHARP_LBA_PWL_BASE_SEG1, 
scl_data->dscl_prog_data.isharp_lba.base_seg[1],
+                       ISHARP_LBA_PWL_SLOPE_SEG1, 
scl_data->dscl_prog_data.isharp_lba.slope_seg[1]);
+               REG_SET_3(ISHARP_LBA_PWL_SEG2, 0,
+                       ISHARP_LBA_PWL_IN_SEG2, 
scl_data->dscl_prog_data.isharp_lba.in_seg[2],
+                       ISHARP_LBA_PWL_BASE_SEG2, 
scl_data->dscl_prog_data.isharp_lba.base_seg[2],
+                       ISHARP_LBA_PWL_SLOPE_SEG2, 
scl_data->dscl_prog_data.isharp_lba.slope_seg[2]);
+               REG_SET_3(ISHARP_LBA_PWL_SEG3, 0,
+                       ISHARP_LBA_PWL_IN_SEG3, 
scl_data->dscl_prog_data.isharp_lba.in_seg[3],
+                       ISHARP_LBA_PWL_BASE_SEG3, 
scl_data->dscl_prog_data.isharp_lba.base_seg[3],
+                       ISHARP_LBA_PWL_SLOPE_SEG3, 
scl_data->dscl_prog_data.isharp_lba.slope_seg[3]);
+               REG_SET_3(ISHARP_LBA_PWL_SEG4, 0,
+                       ISHARP_LBA_PWL_IN_SEG4, 
scl_data->dscl_prog_data.isharp_lba.in_seg[4],
+                       ISHARP_LBA_PWL_BASE_SEG4, 
scl_data->dscl_prog_data.isharp_lba.base_seg[4],
+                       ISHARP_LBA_PWL_SLOPE_SEG4, 
scl_data->dscl_prog_data.isharp_lba.slope_seg[4]);
+               REG_SET_2(ISHARP_LBA_PWL_SEG5, 0,
+                       ISHARP_LBA_PWL_IN_SEG5, 
scl_data->dscl_prog_data.isharp_lba.in_seg[5],
+                       ISHARP_LBA_PWL_BASE_SEG5, 
scl_data->dscl_prog_data.isharp_lba.base_seg[5]);
 
-       /* ISHARP_NLDELTA_SOFT_CLIP */
-       REG_SET_6(ISHARP_NLDELTA_SOFT_CLIP, 0,
-               ISHARP_NLDELTA_SCLIP_EN_P, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.enable_p,
-               ISHARP_NLDELTA_SCLIP_PIVOT_P, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.pivot_p,
-               ISHARP_NLDELTA_SCLIP_SLOPE_P, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.slope_p,
-               ISHARP_NLDELTA_SCLIP_EN_N, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.enable_n,
-               ISHARP_NLDELTA_SCLIP_PIVOT_N, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.pivot_n,
-               ISHARP_NLDELTA_SCLIP_SLOPE_N, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.slope_n);
+               /* ISHARP_DELTA_LUT */
+               if (!program_isharp_1dlut)
+                       dpp401_dscl_set_isharp_filter(dpp, 
scl_data->dscl_prog_data.isharp_delta);
+
+               /* ISHARP_NLDELTA_SOFT_CLIP */
+               REG_SET_6(ISHARP_NLDELTA_SOFT_CLIP, 0,
+                       ISHARP_NLDELTA_SCLIP_EN_P, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.enable_p,
+                       ISHARP_NLDELTA_SCLIP_PIVOT_P, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.pivot_p,
+                       ISHARP_NLDELTA_SCLIP_SLOPE_P, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.slope_p,
+                       ISHARP_NLDELTA_SCLIP_EN_N, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.enable_n,
+                       ISHARP_NLDELTA_SCLIP_PIVOT_N, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.pivot_n,
+                       ISHARP_NLDELTA_SCLIP_SLOPE_N, 
scl_data->dscl_prog_data.isharp_nldelta_sclip.slope_n);
 
        /* Blur and Scale Coefficients - SCL_COEF_RAM_TAP_SELECT */
-       if (scl_data->dscl_prog_data.isharp_en) {
                if (scl_data->dscl_prog_data.filter_blur_scale_v) {
                        dpp401_dscl_set_scaler_filter(
                                dpp, scl_data->taps.v_taps,
@@ -1037,6 +1032,7 @@ static void dpp401_dscl_program_isharp(struct dpp 
*dpp_base,
                        *bs_coeffs_updated = true;
                }
        }
+
        PERF_TRACE();
 } // dpp401_dscl_program_isharp
 /**
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.h 
b/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.h
index e1fa2e80a15a..406246a9867e 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.h
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.h
@@ -394,6 +394,7 @@ void dcn401_prepare_mcache_programming(struct dc *dc, 
struct dc_state *context);
        SRI_ARR(DSCL_SC_MATRIX_C0C1, DSCL, id),                                 
 \
        SRI_ARR(DSCL_SC_MATRIX_C2C3, DSCL, id),                                 
 \
        SRI_ARR(ISHARP_MODE, DSCL, id),                                         
 \
+       SRI_ARR(ISHARP_DELTA_LUT_MEM_PWR_CTRL, DSCL, id),                       
                   \
        SRI_ARR(ISHARP_NOISEDET_THRESHOLD, DSCL, id),                           
 \
        SRI_ARR(ISHARP_NOISE_GAIN_PWL, DSCL, id),                               
 \
        SRI_ARR(ISHARP_LBA_PWL_SEG0, DSCL, id),                                 
 \
-- 
2.43.0

Reply via email to