Patch "drm/i915/gen9: Fix PCODE polling during SAGV disabling" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
drm/i915/gen9: Fix PCODE polling during SAGV disabling
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-i915-gen9-fix-pcode-polling-during-sagv-disabling.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
dccf82ad1775f2b9c36ec85e25e39d88c7e86818Mon Sep 17 00:00:00 2001
From: Imre Deak <[email protected]>
Date: Mon, 5 Dec 2016 18:27:38 +0200
Subject: drm/i915/gen9: Fix PCODE polling during SAGV disabling
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Imre Deak <[email protected]>
commit dccf82ad1775f2b9c36ec85e25e39d88c7e86818 upstream.
According to the previous patch, it's possible atm that we call intel_do_sagv_disable() only once during the 1ms period and time out if that call fails. As opposed to this the spec says that we need to keep retrying this request for a 1ms duration, so let's do this similarly to the CDCLK change notification request.
v4-5:
- Rebased on the reply_mask, reply change.
v6:
- Remove w/s change. (Lyude)
- Rebased on the timeout_base argument change.
--- drivers/gpu/drm/i915/intel_pm.c | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-)
drivers/gpu/drm/i915/intel_pm.c +9 -25
@@ -2955,24 +2955,10 @@ intel_enable_sagv(struct drm_i915_privatreturn 0 ; } -static int -intel_do_sagv_disable (struct drm_i915_private *dev_priv) -{ -int ret; -uint32_t temp =GEN9_SAGV_DISABLE ; - - ret =sandybridge_pcode_read (dev_priv,GEN9_PCODE_SAGV_CONTROL , - &temp); -if (ret) -return ret; -else -return temp &GEN9_SAGV_IS_DISABLED ; -} -int intel_disable_sagv (struct drm_i915_private *dev_priv) { -int ret, result; +int ret;if (!intel_has_sagv (dev_priv))return 0 ;
@@ -2984,25 +2970,23 @@ intel_disable_sagv(struct drm_i915_privamutex_lock (&dev_priv->rps.hw_lock);/* bspec says to keep retrying for at least 1 ms */ - ret =wait_for (result =intel_do_sagv_disable (dev_priv),1 ); + ret =skl_pcode_request (dev_priv,GEN9_PCODE_SAGV_CONTROL , +GEN9_SAGV_DISABLE , +GEN9_SAGV_IS_DISABLED ,GEN9_SAGV_IS_DISABLED , +1 );mutex_unlock (&dev_priv->rps.hw_lock); -if (ret == -ETIMEDOUT ) { -DRM_ERROR ("Request to disable SAGV timed out\n" ); -return -ETIMEDOUT ; - } -/* * Some skl systems, pre-release machines in particular, * don't actually have an SAGV. */ -if (IS_SKYLAKE (dev_priv) && result == -ENXIO ) { +if (IS_SKYLAKE (dev_priv) && ret == -ENXIO ) {DRM_DEBUG_DRIVER ("No SAGV found on system, ignoring\n" ); dev_priv->sagv_status =I915_SAGV_NOT_CONTROLLED ;return 0 ; - }else if (result <0 ) { -DRM_ERROR ("Failed to disable the SAGV\n" ); -return result; + }else if (ret <0 ) { +DRM_ERROR ("Failed to disable the SAGV (%d)\n" , ret); +return ret; } dev_priv->sagv_status =I915_SAGV_DISABLED ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/drm-i915-gen9-fix-pcode-polling-during-sagv-disabling.patch queue-4.9/drm-i915-gen9-fix-pcode-polling-timeout-in-stable-backport.patch