aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnimesh Manna <[email protected]>2015-08-26 01:36:09 +0530
committerDaniel Vetter <[email protected]>2015-09-30 10:14:25 +0200
commit08aef7caa14f1c0b7c5d79d61d279bcedc188ab9 (patch)
tree9fd849c2f57b9bf5eb83f86ef1114fecdaa4950c
parent4e961e426cdeb5c9f27d65fb0afb0010fcecfeae (diff)
drm/i915/skl: Block disable call for pw1 if dmc firmware is present.
Another interesting criteria to work dmc as expected is pw1 to be enabled by driver and dmc will shut it off in its execution sequence. If already disabled by driver dmc will get confuse and behave differently than expected found during pc10 entry issue for skl. So berfore we disable power-well 1, added check if dmc firmware is present and driver will not disable power well 1, but for any reason if firmware is not present of failed to load we can shut off the power well 1 which will save some power. As skl is currently fully dependent on dmc to go in lowest possible power state (dc6) but the same is not applicable for bxt. Display engine can enter into dc9 without dmc, hence unblocking disable call. v1: Initial version. v2: Rebased as per current patch series. Cc: Daniel Vetter <[email protected]> Cc: Damien Lespiau <[email protected]> Cc: Imre Deak <[email protected]> Cc: Sunil Kamath <[email protected]> Signed-off-by: Animesh Manna <[email protected]> Signed-off-by: Vathsala Nagaraju <[email protected]> Reviewed-by: A.Sunil Kamath <[email protected]> Signed-off-by: Daniel Vetter <[email protected]>
-rw-r--r--drivers/gpu/drm/i915/intel_runtime_pm.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index 85c35fdfac65..4a815bb6cfca 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -656,9 +656,15 @@ static void skl_set_power_well(struct drm_i915_private *dev_priv,
}
} else {
if (enable_requested) {
- I915_WRITE(HSW_PWR_WELL_DRIVER, tmp & ~req_mask);
- POSTING_READ(HSW_PWR_WELL_DRIVER);
- DRM_DEBUG_KMS("Disabling %s\n", power_well->name);
+ if (IS_SKYLAKE(dev) &&
+ (power_well->data == SKL_DISP_PW_1) &&
+ (intel_csr_load_status_get(dev_priv) == FW_LOADED))
+ DRM_DEBUG_KMS("Not Disabling PW1, dmc will handle\n");
+ else {
+ I915_WRITE(HSW_PWR_WELL_DRIVER, tmp & ~req_mask);
+ POSTING_READ(HSW_PWR_WELL_DRIVER);
+ DRM_DEBUG_KMS("Disabling %s\n", power_well->name);
+ }
if ((GEN9_ENABLE_DC5(dev) || SKL_ENABLE_DC6(dev)) &&
power_well->data == SKL_DISP_PW_2) {