aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2015-03-12 11:10:32 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-03-20 06:48:06 -0400
commit1db10e28b25687fea1d11a94196b0477145a24a8 (patch)
treed269557ee226d86b93c99c64241697a463b2bc3d
parentd098a5054373d860f062b42466fb965841c161fe (diff)
drm/i915: Fully separate source vs. sink rates
Remove the sink vs. source limit mess from intel_dp_max_link_bw() and just move the source restriction checks to intel_dp_source_rates(). Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Sonika Jindal <sonika.jindal@intel.com> [danvet: Resolve conflict with WaDisableHBR2:skl patch.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 4cbb956f0fe3..7553f08d87e1 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -126,22 +126,11 @@ int
126intel_dp_max_link_bw(struct intel_dp *intel_dp) 126intel_dp_max_link_bw(struct intel_dp *intel_dp)
127{ 127{
128 int max_link_bw = intel_dp->dpcd[DP_MAX_LINK_RATE]; 128 int max_link_bw = intel_dp->dpcd[DP_MAX_LINK_RATE];
129 struct drm_device *dev = intel_dp->attached_connector->base.dev;
130 129
131 switch (max_link_bw) { 130 switch (max_link_bw) {
132 case DP_LINK_BW_1_62: 131 case DP_LINK_BW_1_62:
133 case DP_LINK_BW_2_7: 132 case DP_LINK_BW_2_7:
134 break; 133 case DP_LINK_BW_5_4:
135 case DP_LINK_BW_5_4: /* 1.2 capable displays may advertise higher bw */
136 if (IS_SKYLAKE(dev) && INTEL_REVID(dev) <= SKL_REVID_B0)
137 /* WaDisableHBR2:skl */
138 max_link_bw = DP_LINK_BW_2_7;
139 else if (((IS_HASWELL(dev) && !IS_HSW_ULX(dev)) ||
140 INTEL_INFO(dev)->gen >= 8) &&
141 intel_dp->dpcd[DP_DPCD_REV] >= 0x12)
142 max_link_bw = DP_LINK_BW_5_4;
143 else
144 max_link_bw = DP_LINK_BW_2_7;
145 break; 134 break;
146 default: 135 default:
147 WARN(1, "invalid max DP link bw val %x, using 1.62Gbps\n", 136 WARN(1, "invalid max DP link bw val %x, using 1.62Gbps\n",
@@ -1154,10 +1143,8 @@ intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
1154} 1143}
1155 1144
1156static int 1145static int
1157intel_dp_source_rates(struct intel_dp *intel_dp, const int **source_rates) 1146intel_dp_source_rates(struct drm_device *dev, const int **source_rates)
1158{ 1147{
1159 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1160
1161 if (INTEL_INFO(dev)->gen >= 9) { 1148 if (INTEL_INFO(dev)->gen >= 9) {
1162 *source_rates = gen9_rates; 1149 *source_rates = gen9_rates;
1163 return ARRAY_SIZE(gen9_rates); 1150 return ARRAY_SIZE(gen9_rates);
@@ -1165,7 +1152,14 @@ intel_dp_source_rates(struct intel_dp *intel_dp, const int **source_rates)
1165 1152
1166 *source_rates = default_rates; 1153 *source_rates = default_rates;
1167 1154
1168 return (intel_dp_max_link_bw(intel_dp) >> 3) + 1; 1155 if (IS_SKYLAKE(dev) && INTEL_REVID(dev) <= SKL_REVID_B0)
1156 /* WaDisableHBR2:skl */
1157 return (DP_LINK_BW_2_7 >> 3) + 1;
1158 else if (INTEL_INFO(dev)->gen >= 8 ||
1159 (IS_HASWELL(dev) && !IS_HSW_ULX(dev)))
1160 return (DP_LINK_BW_5_4 >> 3) + 1;
1161 else
1162 return (DP_LINK_BW_2_7 >> 3) + 1;
1169} 1163}
1170 1164
1171static void 1165static void
@@ -1259,7 +1253,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,
1259 1253
1260 sink_len = intel_dp_sink_rates(intel_dp, &sink_rates); 1254 sink_len = intel_dp_sink_rates(intel_dp, &sink_rates);
1261 1255
1262 source_len = intel_dp_source_rates(intel_dp, &source_rates); 1256 source_len = intel_dp_source_rates(dev, &source_rates);
1263 1257
1264 supported_len = intel_supported_rates(source_rates, source_len, 1258 supported_len = intel_supported_rates(source_rates, source_len,
1265 sink_rates, sink_len, supported_rates); 1259 sink_rates, sink_len, supported_rates);