Browse Source

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 <[email protected]>
Ajay Singh Parmar 6 years ago
parent
commit
9af9987d3d
2 changed files with 21 additions and 7 deletions
  1. 18 6
      msm/dp/dp_catalog.c
  2. 3 1
      msm/dp/dp_ctrl.c

+ 18 - 6
msm/dp/dp_catalog.c

@@ -1212,6 +1212,7 @@ static void dp_catalog_ctrl_set_pattern(struct dp_catalog_ctrl *ctrl,
 {
 	int bit, cnt = 10;
 	u32 data;
+	const u32 link_training_offset = 3;
 	struct dp_catalog_private *catalog;
 	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);
 	io_data = catalog->io.dp_link;
 
-	bit = 1;
-	bit <<= (pattern - 1);
+	switch (pattern) {
+	case DP_TRAINING_PATTERN_4:
+		bit = 3;
+		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;
+	}
+
 	DP_DEBUG("hw: bit=%d train=%d\n", bit, pattern);
-	dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, bit);
+	dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, BIT(bit));
 
-	bit = 8;
-	bit <<= (pattern - 1);
+	bit += link_training_offset;
 
 	while (cnt--) {
 		data = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_READY);
-		if (data & bit)
+		if (data & BIT(bit))
 			break;
 	}
 

+ 3 - 1
msm/dp/dp_ctrl.c

@@ -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 */
 	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;
 	else
 		dpcd_pattern = DP_TRAINING_PATTERN_2;