diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1203-drm-amd-display-fix-issue-with-DC-brightness-low-wit.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1203-drm-amd-display-fix-issue-with-DC-brightness-low-wit.patch | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1203-drm-amd-display-fix-issue-with-DC-brightness-low-wit.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1203-drm-amd-display-fix-issue-with-DC-brightness-low-wit.patch new file mode 100644 index 00000000..e744e936 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1203-drm-amd-display-fix-issue-with-DC-brightness-low-wit.patch @@ -0,0 +1,104 @@ +From 9d46a84dface61f66b4a6ea11e2ce43dc8326b81 Mon Sep 17 00:00:00 2001 +From: Anthony Koo <Anthony.Koo@amd.com> +Date: Thu, 17 Jan 2019 10:57:23 -0500 +Subject: [PATCH 1203/2940] drm/amd/display: fix issue with DC brightness low + with VB + +[Why] +The problem is that we accidentally stopped loading some of the IRAM bytes +used for the backlight ramping mechanism. This happened when we +started reserving some region of IRAM as DMCU FW write only. + +[How] +This change will define a start+end region for the IRAM read only region. +So the parameters needed for the backlight operation will be loaded +since it will be defined outside of the read only region. + +Change-Id: I6ecd665ee3502f191a0162e30f669c63c1c77630 +Signed-off-by: Anthony Koo <Anthony.Koo@amd.com> +Reviewed-by: Aric Cyr <Aric.Cyr@amd.com> +Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> +--- + .../amd/display/modules/power/power_helpers.c | 34 +++++++++++++------ + 1 file changed, 24 insertions(+), 10 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/modules/power/power_helpers.c b/drivers/gpu/drm/amd/display/modules/power/power_helpers.c +index baab6c4ae191..27b8cf5460b5 100644 +--- a/drivers/gpu/drm/amd/display/modules/power/power_helpers.c ++++ b/drivers/gpu/drm/amd/display/modules/power/power_helpers.c +@@ -67,9 +67,14 @@ static const unsigned char abm_config[abm_defines_max_config][abm_defines_max_le + #define NUM_AGGR_LEVEL 4 + #define NUM_POWER_FN_SEGS 8 + #define NUM_BL_CURVE_SEGS 16 +-#define IRAM_RESERVE_AREA_START 0xF0 // reserve 0xF0~0xFF are write by DMCU only + #define IRAM_SIZE 256 + ++#define IRAM_RESERVE_AREA_START_V2 0xF0 // reserve 0xF0~0xF6 are write by DMCU only ++#define IRAM_RESERVE_AREA_END_V2 0xF6 // reserve 0xF0~0xF6 are write by DMCU only ++ ++#define IRAM_RESERVE_AREA_START_V2_2 0xF0 // reserve 0xF0~0xFF are write by DMCU only ++#define IRAM_RESERVE_AREA_END_V2_2 0xFF // reserve 0xF0~0xFF are write by DMCU only ++ + #pragma pack(push, 1) + /* NOTE: iRAM is 256B in size */ + struct iram_table_v_2 { +@@ -148,8 +153,10 @@ struct iram_table_v_2_2 { + uint16_t dmcu_version; /* 0xf4 */ + uint8_t dmcu_state; /* 0xf6 */ + +- uint16_t blRampReduction; /* 0xf7 */ +- uint16_t blRampStart; /* 0xf9 */ ++ uint8_t dummy1; /* 0xf7 */ ++ uint8_t dummy2; /* 0xf8 */ ++ uint8_t dummy3; /* 0xf9 */ ++ uint8_t dummy4; /* 0xfa */ + uint8_t dummy5; /* 0xfb */ + uint8_t dummy6; /* 0xfc */ + uint8_t dummy7; /* 0xfd */ +@@ -420,11 +427,6 @@ void fill_iram_v_2_2(struct iram_table_v_2_2 *ram_table, struct dmcu_iram_parame + ram_table->deviation_gain[2] = 0xb3; + ram_table->deviation_gain[3] = 0xb3; + +- ram_table->blRampReduction = +- cpu_to_be16(params.backlight_ramping_reduction); +- ram_table->blRampStart = +- cpu_to_be16(params.backlight_ramping_start); +- + ram_table->min_reduction[0][0] = min_reduction_table_v_2_2[abm_config[set][0]]; + ram_table->min_reduction[1][0] = min_reduction_table_v_2_2[abm_config[set][0]]; + ram_table->min_reduction[2][0] = min_reduction_table_v_2_2[abm_config[set][0]]; +@@ -561,6 +563,7 @@ bool dmcu_load_iram(struct dmcu *dmcu, + struct dmcu_iram_parameters params) + { + unsigned char ram_table[IRAM_SIZE]; ++ bool result = false; + + if (dmcu == NULL) + return false; +@@ -572,10 +575,21 @@ bool dmcu_load_iram(struct dmcu *dmcu, + + if (dmcu->dmcu_version.abm_version == 0x22) { + fill_iram_v_2_2((struct iram_table_v_2_2 *)ram_table, params); ++ ++ result = dmcu->funcs->load_iram( ++ dmcu, 0, (char *)(&ram_table), IRAM_RESERVE_AREA_START_V2_2); + } else { + fill_iram_v_2((struct iram_table_v_2 *)ram_table, params); ++ ++ result = dmcu->funcs->load_iram( ++ dmcu, 0, (char *)(&ram_table), IRAM_RESERVE_AREA_START_V2); ++ ++ if (result) ++ result = dmcu->funcs->load_iram( ++ dmcu, IRAM_RESERVE_AREA_END_V2 + 1, ++ (char *)(&ram_table) + IRAM_RESERVE_AREA_END_V2 + 1, ++ sizeof(ram_table) - IRAM_RESERVE_AREA_END_V2 - 1); + } + +- return dmcu->funcs->load_iram( +- dmcu, 0, (char *)(&ram_table), IRAM_RESERVE_AREA_START); ++ return result; + } +-- +2.17.1 + |