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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user