aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1203-drm-amd-display-fix-issue-with-DC-brightness-low-wit.patch
diff options
context:
space:
mode:
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.patch104
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
+