From: Chris Wilson Date: Fri, 10 Nov 2017 14:26:30 +0000 (+0000) Subject: drm/i915: Move intel_init_clock_gating() to i915_gem_init() X-Git-Tag: Ubuntu-4.15.0-89.89~17 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=87b7ddc7f9dc36df7dfcffa4cacb2b6be5b00cb1;p=mirror_ubuntu-bionic-kernel.git drm/i915: Move intel_init_clock_gating() to i915_gem_init() BugLink: https://bugs.launchpad.net/bugs/1862840 Despite its name intel_init_clock_gating applies both display clock gating workarounds; GT mmio workarounds and the occasional GT power context workaround. Worse, sometimes it includes a context register workaround which we need to apply before we record the default HW state for all contexts. Signed-off-by: Chris Wilson Cc: Ville Syrjälä Cc: Joonas Lahtinen Reviewed-by: Ville Syrjälä Link: https://patchwork.freedesktop.org/patch/msgid/20171110142634.10551-4-chris@chris-wilson.co.uk CVE-2020-8832 (cherry picked from commit cc6a818ad6bdb0d3008314cbd0fc9c9a2cd02695) Signed-off-by: Tyler Hicks Acked-by: Kleber Sacilotto de Souza Acked-by: Timo Aaltonen Signed-off-by: Khalid Elmously --- diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 2148ffbdb012..62752d3bf5be 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -5023,6 +5023,21 @@ int i915_gem_init(struct drm_i915_private *dev_priv) intel_init_gt_powersave(dev_priv); ret = i915_gem_init_hw(dev_priv); + if (ret) + goto out_unlock; + + /* + * Despite its name intel_init_clock_gating applies both display + * clock gating workarounds; GT mmio workarounds and the occasional + * GT power context workaround. Worse, sometimes it includes a context + * register workaround which we need to apply before we record the + * default HW state for all contexts. + * + * FIXME: break up the workarounds and apply them at the right time! + */ + intel_init_clock_gating(dev_priv); + +out_unlock: if (ret == -EIO) { mutex_lock(&dev_priv->drm.struct_mutex); @@ -5043,8 +5058,6 @@ int i915_gem_init(struct drm_i915_private *dev_priv) mutex_unlock(&dev_priv->drm.struct_mutex); } - -out_unlock: intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); mutex_unlock(&dev_priv->drm.struct_mutex); diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 4ab77ac3cd7d..158de3594e2a 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -15287,8 +15287,6 @@ void intel_modeset_gem_init(struct drm_device *dev) { struct drm_i915_private *dev_priv = to_i915(dev); - intel_init_clock_gating(dev_priv); - intel_setup_overlay(dev_priv); }