aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2786-drm-amd-display-DMCU-and-ABM-maintenance-and-refacto.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2786-drm-amd-display-DMCU-and-ABM-maintenance-and-refacto.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2786-drm-amd-display-DMCU-and-ABM-maintenance-and-refacto.patch215
1 files changed, 215 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2786-drm-amd-display-DMCU-and-ABM-maintenance-and-refacto.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2786-drm-amd-display-DMCU-and-ABM-maintenance-and-refacto.patch
new file mode 100644
index 00000000..671d05b2
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2786-drm-amd-display-DMCU-and-ABM-maintenance-and-refacto.patch
@@ -0,0 +1,215 @@
+From 1ee2e6e6856000e003c523bbc6fe5dea27fba9bd Mon Sep 17 00:00:00 2001
+From: Anthony Koo <Anthony.Koo@amd.com>
+Date: Mon, 13 Nov 2017 10:54:59 -0500
+Subject: [PATCH 2786/4131] drm/amd/display: DMCU and ABM maintenance and
+ refactor
+
+Remove some globals that should really be per block state.
+
+Signed-off-by: Anthony Koo <Anthony.Koo@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dce/dce_abm.c | 32 +++++++++++----------------
+ drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c | 18 ++++++++-------
+ drivers/gpu/drm/amd/display/dc/inc/hw/abm.h | 10 +++++++++
+ drivers/gpu/drm/amd/display/dc/inc/hw/dmcu.h | 4 +++-
+ 4 files changed, 36 insertions(+), 28 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
+index 0e0336c..3fe8e69 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
+@@ -51,16 +51,6 @@
+
+ #define MCP_DISABLE_ABM_IMMEDIATELY 255
+
+-struct abm_backlight_registers {
+- unsigned int BL_PWM_CNTL;
+- unsigned int BL_PWM_CNTL2;
+- unsigned int BL_PWM_PERIOD_CNTL;
+- unsigned int LVTMA_PWRSEQ_REF_DIV_BL_PWM_REF_DIV;
+-};
+-
+-/* registers setting needs to be save and restored used at InitBacklight */
+-static struct abm_backlight_registers stored_backlight_registers = {0};
+-
+
+ static unsigned int get_current_backlight_16_bit(struct dce_abm *abm_dce)
+ {
+@@ -347,16 +337,16 @@ static bool dce_abm_init_backlight(struct abm *abm)
+ */
+ REG_GET(BL_PWM_CNTL, BL_ACTIVE_INT_FRAC_CNT, &value);
+ if (value == 0 || value == 1) {
+- if (stored_backlight_registers.BL_PWM_CNTL != 0) {
++ if (abm->stored_backlight_registers.BL_PWM_CNTL != 0) {
+ REG_WRITE(BL_PWM_CNTL,
+- stored_backlight_registers.BL_PWM_CNTL);
++ abm->stored_backlight_registers.BL_PWM_CNTL);
+ REG_WRITE(BL_PWM_CNTL2,
+- stored_backlight_registers.BL_PWM_CNTL2);
++ abm->stored_backlight_registers.BL_PWM_CNTL2);
+ REG_WRITE(BL_PWM_PERIOD_CNTL,
+- stored_backlight_registers.BL_PWM_PERIOD_CNTL);
++ abm->stored_backlight_registers.BL_PWM_PERIOD_CNTL);
+ REG_UPDATE(LVTMA_PWRSEQ_REF_DIV,
+ BL_PWM_REF_DIV,
+- stored_backlight_registers.
++ abm->stored_backlight_registers.
+ LVTMA_PWRSEQ_REF_DIV_BL_PWM_REF_DIV);
+ } else {
+ /* TODO: Note: This should not really happen since VBIOS
+@@ -366,15 +356,15 @@ static bool dce_abm_init_backlight(struct abm *abm)
+ REG_WRITE(BL_PWM_PERIOD_CNTL, 0x000C0FA0);
+ }
+ } else {
+- stored_backlight_registers.BL_PWM_CNTL =
++ abm->stored_backlight_registers.BL_PWM_CNTL =
+ REG_READ(BL_PWM_CNTL);
+- stored_backlight_registers.BL_PWM_CNTL2 =
++ abm->stored_backlight_registers.BL_PWM_CNTL2 =
+ REG_READ(BL_PWM_CNTL2);
+- stored_backlight_registers.BL_PWM_PERIOD_CNTL =
++ abm->stored_backlight_registers.BL_PWM_PERIOD_CNTL =
+ REG_READ(BL_PWM_PERIOD_CNTL);
+
+ REG_GET(LVTMA_PWRSEQ_REF_DIV, BL_PWM_REF_DIV,
+- &stored_backlight_registers.
++ &abm->stored_backlight_registers.
+ LVTMA_PWRSEQ_REF_DIV_BL_PWM_REF_DIV);
+ }
+
+@@ -450,6 +440,10 @@ static void dce_abm_construct(
+
+ base->ctx = ctx;
+ base->funcs = &dce_funcs;
++ base->stored_backlight_registers.BL_PWM_CNTL = 0;
++ base->stored_backlight_registers.BL_PWM_CNTL2 = 0;
++ base->stored_backlight_registers.BL_PWM_PERIOD_CNTL = 0;
++ base->stored_backlight_registers.LVTMA_PWRSEQ_REF_DIV_BL_PWM_REF_DIV = 0;
+
+ abm_dce->regs = regs;
+ abm_dce->abm_shift = abm_shift;
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
+index 508c1aa..a6de99d 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
+@@ -53,7 +53,6 @@
+ #define MCP_INIT_IRAM 0x89
+ #define MCP_DMCU_VERSION 0x90
+ #define MASTER_COMM_CNTL_REG__MASTER_COMM_INTERRUPT_MASK 0x00000001L
+-unsigned int cached_wait_loop_number = 0;
+
+ static bool dce_dmcu_init(struct dmcu *dmcu)
+ {
+@@ -270,7 +269,7 @@ static void dce_psr_wait_loop(
+ {
+ struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
+ union dce_dmcu_psr_config_data_wait_loop_reg1 masterCmdData1;
+- if (cached_wait_loop_number == wait_loop_number)
++ if (dmcu->cached_wait_loop_number == wait_loop_number)
+ return;
+
+ /* waitDMCUReadyForCmd */
+@@ -278,7 +277,7 @@ static void dce_psr_wait_loop(
+
+ masterCmdData1.u32 = 0;
+ masterCmdData1.bits.wait_loop = wait_loop_number;
+- cached_wait_loop_number = wait_loop_number;
++ dmcu->cached_wait_loop_number = wait_loop_number;
+ dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG1), masterCmdData1.u32);
+
+ /* setDMCUParam_Cmd */
+@@ -288,9 +287,10 @@ static void dce_psr_wait_loop(
+ REG_UPDATE(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 1);
+ }
+
+-static void dce_get_psr_wait_loop(unsigned int *psr_wait_loop_number)
++static void dce_get_psr_wait_loop(
++ struct dmcu *dmcu, unsigned int *psr_wait_loop_number)
+ {
+- *psr_wait_loop_number = cached_wait_loop_number;
++ *psr_wait_loop_number = dmcu->cached_wait_loop_number;
+ return;
+ }
+
+@@ -673,7 +673,7 @@ static void dcn10_psr_wait_loop(
+
+ masterCmdData1.u32 = 0;
+ masterCmdData1.bits.wait_loop = wait_loop_number;
+- cached_wait_loop_number = wait_loop_number;
++ dmcu->cached_wait_loop_number = wait_loop_number;
+ dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG1), masterCmdData1.u32);
+
+ /* setDMCUParam_Cmd */
+@@ -684,9 +684,10 @@ static void dcn10_psr_wait_loop(
+ }
+ }
+
+-static void dcn10_get_psr_wait_loop(unsigned int *psr_wait_loop_number)
++static void dcn10_get_psr_wait_loop(
++ struct dmcu *dmcu, unsigned int *psr_wait_loop_number)
+ {
+- *psr_wait_loop_number = cached_wait_loop_number;
++ *psr_wait_loop_number = dmcu->cached_wait_loop_number;
+ return;
+ }
+
+@@ -725,6 +726,7 @@ static void dce_dmcu_construct(
+
+ base->ctx = ctx;
+ base->funcs = &dce_funcs;
++ base->cached_wait_loop_number = 0;
+
+ dmcu_dce->regs = regs;
+ dmcu_dce->dmcu_shift = dmcu_shift;
+diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/abm.h b/drivers/gpu/drm/amd/display/dc/inc/hw/abm.h
+index c93b9b9..48217ec 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/hw/abm.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/hw/abm.h
+@@ -27,9 +27,19 @@
+
+ #include "dm_services_types.h"
+
++struct abm_backlight_registers {
++ unsigned int BL_PWM_CNTL;
++ unsigned int BL_PWM_CNTL2;
++ unsigned int BL_PWM_PERIOD_CNTL;
++ unsigned int LVTMA_PWRSEQ_REF_DIV_BL_PWM_REF_DIV;
++};
++
+ struct abm {
+ struct dc_context *ctx;
+ const struct abm_funcs *funcs;
++
++ /* registers setting needs to be saved and restored at InitBacklight */
++ struct abm_backlight_registers stored_backlight_registers;
+ };
+
+ struct abm_funcs {
+diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/dmcu.h b/drivers/gpu/drm/amd/display/dc/inc/hw/dmcu.h
+index 67996c6..b59712b 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/hw/dmcu.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/hw/dmcu.h
+@@ -45,6 +45,7 @@ struct dmcu {
+
+ enum dmcu_state dmcu_state;
+ struct dmcu_version dmcu_version;
++ unsigned int cached_wait_loop_number;
+ };
+
+ struct dmcu_funcs {
+@@ -60,7 +61,8 @@ struct dmcu_funcs {
+ void (*get_psr_state)(struct dmcu *dmcu, uint32_t *psr_state);
+ void (*set_psr_wait_loop)(struct dmcu *dmcu,
+ unsigned int wait_loop_number);
+- void (*get_psr_wait_loop)(unsigned int *psr_wait_loop_number);
++ void (*get_psr_wait_loop)(struct dmcu *dmcu,
++ unsigned int *psr_wait_loop_number);
+ };
+
+ #endif
+--
+2.7.4
+