diff options
author | Matt Roper | 2016-05-12 16:06:02 +0200 |
---|---|---|
committer | Matt Roper | 2016-05-13 16:33:54 +0200 |
commit | 279e99d76e6097ee7b531114777fa9b030496d81 (patch) | |
tree | 530832355fdc4835bd4c1794d519ad964664598a /drivers/gpu/drm/i915/intel_pm.c | |
parent | drm/i915/gen9: Allow skl_allocate_pipe_ddb() to operate on in-flight state (v3) (diff) | |
download | kernel-qcow2-linux-279e99d76e6097ee7b531114777fa9b030496d81.tar.gz kernel-qcow2-linux-279e99d76e6097ee7b531114777fa9b030496d81.tar.xz kernel-qcow2-linux-279e99d76e6097ee7b531114777fa9b030496d81.zip |
drm/i915: Add distrust_bios_wm flag to dev_priv (v2)
SKL-style platforms can't fully trust the watermark/DDB settings
programmed by the BIOS and need to do extra sanitization on their first
atomic update. Add a flag to dev_priv that is set during hardware
readout and cleared at the end of the first commit.
Note that for the somewhat common case where everything is turned off
when the driver starts up, we don't need to bother with a recompute...we
know exactly what the DDB should be (all zero's) so just setup the DDB
directly in that case.
v2:
- Move clearing of distrust_bios_wm up below the swap_state call since
it's a more natural / self-explanatory location. (Maarten)
- Use dev_priv->active_crtcs to test whether any CRTC's are turned on
during HW WM readout rather than trying to count the active CRTC's
again ourselves. (Maarten)
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-9-git-send-email-matthew.d.roper@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/intel_pm.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index ca38f6c0e3c8..87fae2e93c40 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -4026,6 +4026,14 @@ void skl_wm_get_hw_state(struct drm_device *dev) list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) skl_pipe_wm_get_hw_state(crtc); + if (dev_priv->active_crtcs) { + /* Fully recompute DDB on first atomic commit */ + dev_priv->wm.distrust_bios_wm = true; + } else { + /* Easy/common case; just sanitize DDB now if everything off */ + memset(ddb, 0, sizeof(*ddb)); + } + /* Calculate plane data rates */ for_each_intel_crtc(dev, intel_crtc) { struct intel_crtc_state *cstate = intel_crtc->config; |