[PATCH] drm/amd/display: Force full frame updates on DP 38-ec-11
Mario Limonciello
mario.limonciello at amd.com
Sat Feb 3 01:26:57 UTC 2024
The 38-ec-11 TCON contained in some AUO panels will hang when used
with PSR-SU and changing the brightness.
Forcing a full frame update works around the issue, so add a quirk
for this panel to do just that.
Reported-by: aaron.ma at canonical.com
Signed-off-by: Mario Limonciello <mario.limonciello at amd.com>
---
Cc: Hamza.Mahfooz at amd.com
Cc: mpearson-lenovo at squebb.ca
drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c | 30 ++++++++++++++-----
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c b/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c
index 3e243e407bb8..68c619b43cbf 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c
@@ -36,6 +36,7 @@
static const uint8_t DP_SINK_DEVICE_STR_ID_1[] = {7, 1, 8, 7, 3};
static const uint8_t DP_SINK_DEVICE_STR_ID_2[] = {7, 1, 8, 7, 5};
static const uint8_t DP_SINK_DEVICE_STR_ID_3[] = {0x42, 0x61, 0x6c, 0x73, 0x61};
+static const uint8_t DP_SINK_DEVICE_STR_ID_4[] = {0x0, 0x0, 0x0, 0x0, 0x0};
/*
* Convert dmcub psr state to dmcu psr state.
@@ -284,6 +285,25 @@ static void dmub_psr_set_power_opt(struct dmub_psr *dmub, unsigned int power_opt
dc_wake_and_execute_dmub_cmd(dc, &cmd, DM_DMUB_WAIT_TYPE_WAIT);
}
+static bool dmub_psr_need_force_ffu(bool dsc_enable_status, struct dc_link *link)
+{
+ if (link->dpcd_caps.sink_dev_id != DP_DEVICE_ID_38EC11)
+ return false;
+
+ /**
+ * WA for PSRSU+DSC on specific TCON, if DSC is enabled, force PSRSU as ffu mode(full frame update)
+ * Note that PSRSU+DSC is still under development.
+ */
+ if (dsc_enable_status &&
+ !memcmp(link->dpcd_caps.sink_dev_id_str, DP_SINK_DEVICE_STR_ID_1,
+ sizeof(DP_SINK_DEVICE_STR_ID_1)))
+ return true;
+ if (!memcmp(link->dpcd_caps.sink_dev_id_str, DP_SINK_DEVICE_STR_ID_4,
+ sizeof(DP_SINK_DEVICE_STR_ID_4)))
+ return true;
+
+ return false;
+}
/*
* Setup PSR by programming phy registers and sending psr hw context values to firmware.
*/
@@ -378,14 +398,8 @@ static bool dmub_psr_copy_settings(struct dmub_psr *dmub,
copy_settings_data->panel_inst = panel_inst;
copy_settings_data->dsc_enable_status = (pipe_ctx->stream->timing.flags.DSC == 1);
- /**
- * WA for PSRSU+DSC on specific TCON, if DSC is enabled, force PSRSU as ffu mode(full frame update)
- * Note that PSRSU+DSC is still under development.
- */
- if (copy_settings_data->dsc_enable_status &&
- link->dpcd_caps.sink_dev_id == DP_DEVICE_ID_38EC11 &&
- !memcmp(link->dpcd_caps.sink_dev_id_str, DP_SINK_DEVICE_STR_ID_1,
- sizeof(DP_SINK_DEVICE_STR_ID_1)))
+
+ if (dmub_psr_need_force_ffu(copy_settings_data->dsc_enable_status, link))
link->psr_settings.force_ffu_mode = 1;
else
link->psr_settings.force_ffu_mode = 0;
--
2.34.1
More information about the amd-gfx
mailing list