| From 2f216a8507153578efc309c821528a6b81628cd2 Mon Sep 17 00:00:00 2001 |
| From: Jani Nikula <jani.nikula@intel.com> |
| Date: Fri, 1 Nov 2019 16:20:24 +0200 |
| Subject: drm/i915: update rawclk also on resume |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Jani Nikula <jani.nikula@intel.com> |
| |
| commit 2f216a8507153578efc309c821528a6b81628cd2 upstream. |
| |
| Since CNP it's possible for rawclk to have two different values, 19.2 |
| and 24 MHz. If the value indicated by SFUSE_STRAP register is different |
| from the power on default for PCH_RAWCLK_FREQ, we'll end up having a |
| mismatch between the rawclk hardware and software states after |
| suspend/resume. On previous platforms this used to work by accident, |
| because the power on defaults worked just fine. |
| |
| Update the rawclk also on resume. The natural place to do this would be |
| intel_modeset_init_hw(), however VLV/CHV need it done before |
| intel_power_domains_init_hw(). Thus put it there even if it feels |
| slightly out of place. |
| |
| v2: Call intel_update_rawclck() in intel_power_domains_init_hw() for all |
| platforms (Ville). |
| |
| Reported-by: Shawn Lee <shawn.c.lee@intel.com> |
| Cc: Shawn Lee <shawn.c.lee@intel.com> |
| Cc: Ville Syrjala <ville.syrjala@linux.intel.com> |
| Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Tested-by: Shawn Lee <shawn.c.lee@intel.com> |
| Signed-off-by: Jani Nikula <jani.nikula@intel.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20191101142024.13877-1-jani.nikula@intel.com |
| (cherry picked from commit 59ed05ccdded5eb18ce012eff3d01798ac8535fa) |
| Cc: <stable@vger.kernel.org> # v4.15+ |
| Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/i915/display/intel_display_power.c | 3 +++ |
| drivers/gpu/drm/i915/i915_drv.c | 3 --- |
| 2 files changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/gpu/drm/i915/display/intel_display_power.c |
| +++ b/drivers/gpu/drm/i915/display/intel_display_power.c |
| @@ -4345,6 +4345,9 @@ void intel_power_domains_init_hw(struct |
| |
| power_domains->initializing = true; |
| |
| + /* Must happen before power domain init on VLV/CHV */ |
| + intel_update_rawclk(i915); |
| + |
| if (INTEL_GEN(i915) >= 11) { |
| icl_display_core_init(i915, resume); |
| } else if (IS_CANNONLAKE(i915)) { |
| --- a/drivers/gpu/drm/i915/i915_drv.c |
| +++ b/drivers/gpu/drm/i915/i915_drv.c |
| @@ -708,9 +708,6 @@ static int i915_load_modeset_init(struct |
| if (ret) |
| goto cleanup_vga_client; |
| |
| - /* must happen before intel_power_domains_init_hw() on VLV/CHV */ |
| - intel_update_rawclk(dev_priv); |
| - |
| intel_power_domains_init_hw(dev_priv, false); |
| |
| intel_csr_ucode_init(dev_priv); |