Commit fae058b4 authored by Paul Hsieh's avatar Paul Hsieh Committed by Alex Deucher

drm/amd/display: support main link off before specific vertical line

[Why]
Some panels request main link off before specific vertical line.
If source turn off main link after specific vertical line then
panel defect will be exposed.

[How]
Add interface to support turn off main link before specific
vertical line
Reviewed-by: default avatarRobin Chen <robin.chen@amd.com>
Acked-by: default avatarStylon Wang <stylon.wang@amd.com>
Signed-off-by: default avatarPaul Hsieh <paul.hsieh@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 73c57a0a
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,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_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_2[] = {7, 1, 8, 7, 5};
static const uint8_t DP_SINK_DEVICE_STR_ID_3[] = {0x42, 0x61, 0x6c, 0x73, 0x61};
/* /*
* Convert dmcub psr state to dmcu psr state. * Convert dmcub psr state to dmcu psr state.
...@@ -295,7 +296,7 @@ static bool dmub_psr_copy_settings(struct dmub_psr *dmub, ...@@ -295,7 +296,7 @@ static bool dmub_psr_copy_settings(struct dmub_psr *dmub,
struct psr_context *psr_context, struct psr_context *psr_context,
uint8_t panel_inst) uint8_t panel_inst)
{ {
union dmub_rb_cmd cmd; union dmub_rb_cmd cmd = { 0 };
struct dc_context *dc = dmub->ctx; struct dc_context *dc = dmub->ctx;
struct dmub_cmd_psr_copy_settings_data *copy_settings_data struct dmub_cmd_psr_copy_settings_data *copy_settings_data
= &cmd.psr_copy_settings.psr_copy_settings_data; = &cmd.psr_copy_settings.psr_copy_settings_data;
...@@ -408,6 +409,13 @@ static bool dmub_psr_copy_settings(struct dmub_psr *dmub, ...@@ -408,6 +409,13 @@ static bool dmub_psr_copy_settings(struct dmub_psr *dmub,
else else
copy_settings_data->debug.bitfields.force_wakeup_by_tps3 = 0; copy_settings_data->debug.bitfields.force_wakeup_by_tps3 = 0;
if (link->psr_settings.psr_version == DC_PSR_VERSION_1 &&
link->dpcd_caps.sink_dev_id == DP_DEVICE_ID_0022B9 &&
!memcmp(link->dpcd_caps.sink_dev_id_str, DP_SINK_DEVICE_STR_ID_3,
sizeof(DP_SINK_DEVICE_STR_ID_3))) {
copy_settings_data->poweroff_before_vertical_line = 16;
}
//WA for PSR1 on specific TCON, require frame delay for frame re-lock //WA for PSR1 on specific TCON, require frame delay for frame re-lock
copy_settings_data->relock_delay_frame_cnt = 0; copy_settings_data->relock_delay_frame_cnt = 0;
if (link->dpcd_caps.sink_dev_id == DP_BRANCH_DEVICE_ID_001CF8) if (link->dpcd_caps.sink_dev_id == DP_BRANCH_DEVICE_ID_001CF8)
......
...@@ -2283,9 +2283,9 @@ struct dmub_cmd_psr_copy_settings_data { ...@@ -2283,9 +2283,9 @@ struct dmub_cmd_psr_copy_settings_data {
*/ */
uint16_t dsc_slice_height; uint16_t dsc_slice_height;
/** /**
* Explicit padding to 4 byte boundary. * Some panels request main link off before xth vertical line
*/ */
uint16_t pad; uint16_t poweroff_before_vertical_line;
}; };
/** /**
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#define DP_BRANCH_HW_REV_10 0x10 #define DP_BRANCH_HW_REV_10 0x10
#define DP_BRANCH_HW_REV_20 0x20 #define DP_BRANCH_HW_REV_20 0x20
#define DP_DEVICE_ID_0022B9 0x0022B9
#define DP_DEVICE_ID_38EC11 0x38EC11 #define DP_DEVICE_ID_38EC11 0x38EC11
#define DP_DEVICE_ID_BA4159 0xBA4159 #define DP_DEVICE_ID_BA4159 0xBA4159
#define DP_FORCE_PSRSU_CAPABILITY 0x40F #define DP_FORCE_PSRSU_CAPABILITY 0x40F
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment