aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAndy Whitcroft <apw@canonical.com>2010-10-05 04:48:42 -0400
committerMatthew Garrett <mjg@redhat.com>2010-10-05 14:59:21 -0400
commit070c0ee1ef9f5550cac9247190f0289349f28c01 (patch)
treeb78952dc9942382fb59a548304ce14b465bff53a /drivers
parenta8c096adbd2b55942ff13c8bbc573a7551768003 (diff)
intel_ips -- ensure we do not enable gpu turbo mode without driver linkage
Both when polling the current turbo status (in poll_turbo_status mode) and when handling thermal events (in ips_irq_handler) the current status of GPU turbo is updated to match the hardware status. However if during driver initialisation we were unable aquire linkage to the i915 driver enabling GPU turbo will lead to an oops on the first attempt to determine GPU busy status. Ensure that we do not enable GPU turbo unless we have driver linkage. BugLink: http://bugs.launchpad.net/bugs/632430 Cc: stable@kernel.org Signed-off-by: Andy Whitcroft <apw@canonical.com> Signed-off-by: Matthew Garrett <mjg@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/platform/x86/intel_ips.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
index 07a1a4aac60..76e41dc45f7 100644
--- a/drivers/platform/x86/intel_ips.c
+++ b/drivers/platform/x86/intel_ips.c
@@ -715,7 +715,8 @@ static void update_turbo_limits(struct ips_driver *ips)
715 u32 hts = thm_readl(THM_HTS); 715 u32 hts = thm_readl(THM_HTS);
716 716
717 ips->cpu_turbo_enabled = !(hts & HTS_PCTD_DIS); 717 ips->cpu_turbo_enabled = !(hts & HTS_PCTD_DIS);
718 ips->gpu_turbo_enabled = !(hts & HTS_GTD_DIS); 718 if (ips->gpu_busy)
719 ips->gpu_turbo_enabled = !(hts & HTS_GTD_DIS);
719 ips->core_power_limit = thm_readw(THM_MPCPC); 720 ips->core_power_limit = thm_readw(THM_MPCPC);
720 ips->mch_power_limit = thm_readw(THM_MMGPC); 721 ips->mch_power_limit = thm_readw(THM_MMGPC);
721 ips->mcp_temp_limit = thm_readw(THM_PTL); 722 ips->mcp_temp_limit = thm_readw(THM_PTL);
@@ -1185,7 +1186,8 @@ static irqreturn_t ips_irq_handler(int irq, void *arg)
1185 STS_GPL_SHIFT; 1186 STS_GPL_SHIFT;
1186 /* ignore EC CPU vs GPU pref */ 1187 /* ignore EC CPU vs GPU pref */
1187 ips->cpu_turbo_enabled = !(sts & STS_PCTD_DIS); 1188 ips->cpu_turbo_enabled = !(sts & STS_PCTD_DIS);
1188 ips->gpu_turbo_enabled = !(sts & STS_GTD_DIS); 1189 if (ips->gpu_busy)
1190 ips->gpu_turbo_enabled = !(sts & STS_GTD_DIS);
1189 ips->mcp_temp_limit = (sts & STS_PTL_MASK) >> 1191 ips->mcp_temp_limit = (sts & STS_PTL_MASK) >>
1190 STS_PTL_SHIFT; 1192 STS_PTL_SHIFT;
1191 ips->mcp_power_limit = (tc1 & STS_PPL_MASK) >> 1193 ips->mcp_power_limit = (tc1 & STS_PPL_MASK) >>