disp: msm: dp: add support for test pattern #4

DP specification mandate test pattern #4 for CTS 1.4a. Add
support for the same in link training #2 as per specification.

CRs-Fixed: 2490128
Change-Id: I2f72fec340b56270e7fd1c2940adafe1068bab43
Signed-off-by: Ajay Singh Parmar <aparmar@codeaurora.org>
This commit is contained in:
Ajay Singh Parmar
2019-07-19 10:57:53 -07:00
parent aacd9e9585
commit 9af9987d3d
2 changed files with 22 additions and 8 deletions

View File

@@ -1212,6 +1212,7 @@ static void dp_catalog_ctrl_set_pattern(struct dp_catalog_ctrl *ctrl,
{ {
int bit, cnt = 10; int bit, cnt = 10;
u32 data; u32 data;
const u32 link_training_offset = 3;
struct dp_catalog_private *catalog; struct dp_catalog_private *catalog;
struct dp_io_data *io_data; struct dp_io_data *io_data;
@@ -1223,17 +1224,28 @@ static void dp_catalog_ctrl_set_pattern(struct dp_catalog_ctrl *ctrl,
catalog = dp_catalog_get_priv(ctrl); catalog = dp_catalog_get_priv(ctrl);
io_data = catalog->io.dp_link; io_data = catalog->io.dp_link;
bit = 1; switch (pattern) {
bit <<= (pattern - 1); case DP_TRAINING_PATTERN_4:
DP_DEBUG("hw: bit=%d train=%d\n", bit, pattern); bit = 3;
dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, bit); break;
case DP_TRAINING_PATTERN_3:
case DP_TRAINING_PATTERN_2:
case DP_TRAINING_PATTERN_1:
bit = pattern - 1;
break;
default:
DP_ERR("invalid pattern\n");
return;
}
bit = 8; DP_DEBUG("hw: bit=%d train=%d\n", bit, pattern);
bit <<= (pattern - 1); dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, BIT(bit));
bit += link_training_offset;
while (cnt--) { while (cnt--) {
data = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_READY); data = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_READY);
if (data & bit) if (data & BIT(bit))
break; break;
} }

View File

@@ -453,7 +453,9 @@ static int dp_ctrl_link_training_2(struct dp_ctrl_private *ctrl)
/* Make sure to clear the current pattern before starting a new one */ /* Make sure to clear the current pattern before starting a new one */
wmb(); wmb();
if (drm_dp_tps3_supported(ctrl->panel->dpcd)) if (drm_dp_tps4_supported(ctrl->panel->dpcd))
dpcd_pattern = DP_TRAINING_PATTERN_4;
else if (drm_dp_tps3_supported(ctrl->panel->dpcd))
dpcd_pattern = DP_TRAINING_PATTERN_3; dpcd_pattern = DP_TRAINING_PATTERN_3;
else else
dpcd_pattern = DP_TRAINING_PATTERN_2; dpcd_pattern = DP_TRAINING_PATTERN_2;