aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_psr.c
diff options
context:
space:
mode:
authorDhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>2018-05-11 15:51:45 -0400
committerJani Nikula <jani.nikula@intel.com>2018-05-24 09:34:23 -0400
commit97c9de66ca8075871b31f4af05593e027e880e67 (patch)
tree8e60a0096d990f80454a7504ec879c8284cb3e40 /drivers/gpu/drm/i915/intel_psr.c
parent264ff016cf0672f99f98ea853dbc7e45c3527bc2 (diff)
drm/i915/psr: Fix ALPM cap check for PSR2
While touching the code around this, I noticed that absence of ALPM capability does not stop us from enabling PSR2. But, the spec unambiguously states that ALPM is required for PSR2 and so does this commit that introduced this code drm/i915/psr: enable ALPM for psr2 As per edp1.4 spec , alpm is required for psr2 operation as it's used for all psr2 main link power down management and alpm enable bit must be set for psr2 operation. Cc: Jose Roberto de Souza <jose.souza@intel.com> Cc: Vathsala Nagaraju <vathsala.nagaraju@intel.com> Reviewed-by: Vathsala Nagaraju <vathsala.nagaraju@intel.com> Reviewed-by: Tarun Vyas <tarun.vyas@intel.com> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180511195145.3829-6-dhinakaran.pandiyan@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/intel_psr.c')
-rw-r--r--drivers/gpu/drm/i915/intel_psr.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 09f5962a19aa..ebc483f06c6f 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -250,6 +250,10 @@ void intel_psr_init_dpcd(struct intel_dp *intel_dp)
250 250
251 if (INTEL_GEN(dev_priv) >= 9 && 251 if (INTEL_GEN(dev_priv) >= 9 &&
252 (intel_dp->psr_dpcd[0] == DP_PSR2_WITH_Y_COORD_IS_SUPPORTED)) { 252 (intel_dp->psr_dpcd[0] == DP_PSR2_WITH_Y_COORD_IS_SUPPORTED)) {
253 bool y_req = intel_dp->psr_dpcd[1] &
254 DP_PSR2_SU_Y_COORDINATE_REQUIRED;
255 bool alpm = intel_dp_get_alpm_status(intel_dp);
256
253 /* 257 /*
254 * All panels that supports PSR version 03h (PSR2 + 258 * All panels that supports PSR version 03h (PSR2 +
255 * Y-coordinate) can handle Y-coordinates in VSC but we are 259 * Y-coordinate) can handle Y-coordinates in VSC but we are
@@ -261,16 +265,13 @@ void intel_psr_init_dpcd(struct intel_dp *intel_dp)
261 * Y-coordinate requirement panels we would need to enable 265 * Y-coordinate requirement panels we would need to enable
262 * GTC first. 266 * GTC first.
263 */ 267 */
264 dev_priv->psr.sink_psr2_support = 268 dev_priv->psr.sink_psr2_support = y_req && alpm;
265 intel_dp->psr_dpcd[1] & DP_PSR2_SU_Y_COORDINATE_REQUIRED;
266 DRM_DEBUG_KMS("PSR2 %ssupported\n", 269 DRM_DEBUG_KMS("PSR2 %ssupported\n",
267 dev_priv->psr.sink_psr2_support ? "" : "not "); 270 dev_priv->psr.sink_psr2_support ? "" : "not ");
268 271
269 if (dev_priv->psr.sink_psr2_support) { 272 if (dev_priv->psr.sink_psr2_support) {
270 dev_priv->psr.colorimetry_support = 273 dev_priv->psr.colorimetry_support =
271 intel_dp_get_colorimetry_status(intel_dp); 274 intel_dp_get_colorimetry_status(intel_dp);
272 dev_priv->psr.alpm =
273 intel_dp_get_alpm_status(intel_dp);
274 dev_priv->psr.sink_sync_latency = 275 dev_priv->psr.sink_sync_latency =
275 intel_dp_get_sink_sync_latency(intel_dp); 276 intel_dp_get_sink_sync_latency(intel_dp);
276 } 277 }
@@ -351,13 +352,12 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
351 u8 dpcd_val = DP_PSR_ENABLE; 352 u8 dpcd_val = DP_PSR_ENABLE;
352 353
353 /* Enable ALPM at sink for psr2 */ 354 /* Enable ALPM at sink for psr2 */
354 if (dev_priv->psr.psr2_enabled && dev_priv->psr.alpm) 355 if (dev_priv->psr.psr2_enabled) {
355 drm_dp_dpcd_writeb(&intel_dp->aux, 356 drm_dp_dpcd_writeb(&intel_dp->aux, DP_RECEIVER_ALPM_CONFIG,
356 DP_RECEIVER_ALPM_CONFIG, 357 DP_ALPM_ENABLE);
357 DP_ALPM_ENABLE);
358
359 if (dev_priv->psr.psr2_enabled)
360 dpcd_val |= DP_PSR_ENABLE_PSR2; 358 dpcd_val |= DP_PSR_ENABLE_PSR2;
359 }
360
361 if (dev_priv->psr.link_standby) 361 if (dev_priv->psr.link_standby)
362 dpcd_val |= DP_PSR_MAIN_LINK_ACTIVE; 362 dpcd_val |= DP_PSR_MAIN_LINK_ACTIVE;
363 drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG, dpcd_val); 363 drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG, dpcd_val);