[Intel-gfx] [PATCH v4 08/17] drm/i915: Add distrust_bios_wm flag to dev_priv (v2)

Maarten Lankhorst maarten.lankhorst at linux.intel.com
Thu May 12 10:09:32 UTC 2016


Op 11-05-16 om 18:02 schreef Matt Roper:
> 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 at linux.intel.com>
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h      | 7 +++++++
>  drivers/gpu/drm/i915/intel_display.c | 1 +
>  drivers/gpu/drm/i915/intel_pm.c      | 8 ++++++++
>  3 files changed, 16 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index c41655c..83806e7 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1993,6 +1993,13 @@ struct drm_i915_private {
>  		 * cstate->wm.need_postvbl_update.
>  		 */
>  		struct mutex wm_mutex;
> +
> +		/*
> +		 * Set during HW readout of watermarks/DDB.  Some platforms
> +		 * need to know when we're still using BIOS-provided values
> +		 * (which we don't fully trust).
> +		 */
> +		bool distrust_bios_wm;
>  	} wm;
>  
>  	struct i915_runtime_pm pm;
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index a386a2d..beb95d1 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -13595,6 +13595,7 @@ static int intel_atomic_commit(struct drm_device *dev,
>  
>  	drm_atomic_helper_swap_state(dev, state);
>  	dev_priv->wm.config = intel_state->wm_config;
> +	dev_priv->wm.distrust_bios_wm = false;
>  	intel_shared_dpll_commit(state);
>  
>  	if (intel_state->modeset) {
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index 709ac40..946a0b0 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;

Reviewed-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>



More information about the Intel-gfx mailing list