Commit d8c5d29f authored by Imre Deak's avatar Imre Deak

drm/i915: Don't check power domains state in intel_power_domains_init_hw()

During power domains initialization we acquire power well references for
power wells in the INIT power domain. The rest of power wells - which
BIOS could have left enabled - we can only acquire references as needed
during display HW readout and so must defer sanitization until then
(also implying that we must always do HW readout to cleanup unused power
wells).

Thus during initialization these latter power wells can have a refcount
of 0 while still being enabled. To avoid the false-positive state
mismatch error this causes remove the check from
intel_power_domains_init_hw() and rely on the state check in
intel_power_domains_enable() which follows the HW readout.

v2:
- Add comment to log and code clarifying how unused power wells get
  disabled. (Chris)

Fixes: 6dfc4a8f ("drm/i915: Verify power domains after enabling them")
Cc: Chris Wilson <chris@chris-wilson.co.uk>
References: https://bugs.freedesktop.org/show_bug.cgi?id=107411Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20180828122231.14336-1-imre.deak@intel.com
parent 5df52391
...@@ -3724,9 +3724,10 @@ static void intel_power_domains_verify_state(struct drm_i915_private *dev_priv); ...@@ -3724,9 +3724,10 @@ static void intel_power_domains_verify_state(struct drm_i915_private *dev_priv);
* *
* This function initializes the hardware power domain state and enables all * This function initializes the hardware power domain state and enables all
* power wells belonging to the INIT power domain. Power wells in other * power wells belonging to the INIT power domain. Power wells in other
* domains (and not in the INIT domain) are referenced or disabled during the * domains (and not in the INIT domain) are referenced or disabled by
* modeset state HW readout. After that the reference count of each power well * intel_modeset_readout_hw_state(). After that the reference count of each
* must match its HW enabled state, see intel_power_domains_verify_state(). * power well must match its HW enabled state, see
* intel_power_domains_verify_state().
* *
* It will return with power domains disabled (to be enabled later by * It will return with power domains disabled (to be enabled later by
* intel_power_domains_enable()) and must be paired with * intel_power_domains_enable()) and must be paired with
...@@ -3767,9 +3768,8 @@ void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume) ...@@ -3767,9 +3768,8 @@ void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume)
if (!i915_modparams.disable_power_well) if (!i915_modparams.disable_power_well)
intel_display_power_get(dev_priv, POWER_DOMAIN_INIT); intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
intel_power_domains_sync_hw(dev_priv); intel_power_domains_sync_hw(dev_priv);
power_domains->initializing = false;
intel_power_domains_verify_state(dev_priv); power_domains->initializing = false;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment