* [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs
@ 2010-09-23 21:49 Jesse Barnes
2010-09-23 21:49 ` [PATCH 2/2] IPS driver: verify BIOS provided limits Jesse Barnes
2010-09-23 21:51 ` [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs Jesse Barnes
0 siblings, 2 replies; 7+ messages in thread
From: Jesse Barnes @ 2010-09-23 21:49 UTC (permalink / raw)
To: platform-driver-x86; +Cc: mjg59, Jesse Barnes
If the CPU doesn't support turbo, don't try to enable/disable it.
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
---
drivers/platform/x86/intel_ips.c | 14 +++++++++-----
1 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
index bfa9c72..71d04ef 100644
--- a/drivers/platform/x86/intel_ips.c
+++ b/drivers/platform/x86/intel_ips.c
@@ -51,7 +51,6 @@
* TODO:
* - handle CPU hotplug
* - provide turbo enable/disable api
- * - make sure we can write turbo enable/disable reg based on MISC_EN
*
* Related documents:
* - CDI 403777, 403778 - Auburndale EDS vol 1 & 2
@@ -325,6 +324,7 @@ struct ips_driver {
bool gpu_preferred;
bool poll_turbo_status;
bool second_cpu;
+ bool turbo_toggle_allowed;
struct ips_mcp_limits *limits;
/* Optional MCH interfaces for if i915 is in use */
@@ -461,7 +461,8 @@ static void ips_enable_cpu_turbo(struct ips_driver *ips)
if (ips->__cpu_turbo_on)
return;
- on_each_cpu(do_enable_cpu_turbo, ips, 1);
+ if (ips->turbo_toggle_allowed)
+ on_each_cpu(do_enable_cpu_turbo, ips, 1);
ips->__cpu_turbo_on = true;
}
@@ -498,7 +499,8 @@ static void ips_disable_cpu_turbo(struct ips_driver *ips)
if (!ips->__cpu_turbo_on)
return;
- on_each_cpu(do_disable_cpu_turbo, ips, 1);
+ if (ips->turbo_toggle_allowed)
+ on_each_cpu(do_disable_cpu_turbo, ips, 1);
ips->__cpu_turbo_on = false;
}
@@ -1332,8 +1334,10 @@ static struct ips_mcp_limits *ips_detect_cpu(struct ips_driver *ips)
* turbo manually or we'll get an illegal MSR access, even though
* turbo will still be available.
*/
- if (!(misc_en & IA32_MISC_TURBO_EN))
- ; /* add turbo MSR write allowed flag if necessary */
+ if (misc_en & IA32_MISC_TURBO_EN)
+ ips->turbo_toggle_allowed = true;
+ else
+ ips->turbo_toggle_allowed = false;
if (strstr(boot_cpu_data.x86_model_id, "CPU M"))
limits = &ips_sv_limits;
--
1.7.2.3
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] IPS driver: verify BIOS provided limits
2010-09-23 21:49 [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs Jesse Barnes
@ 2010-09-23 21:49 ` Jesse Barnes
2010-09-23 21:53 ` Jesse Barnes
2010-09-23 21:51 ` [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs Jesse Barnes
1 sibling, 1 reply; 7+ messages in thread
From: Jesse Barnes @ 2010-09-23 21:49 UTC (permalink / raw)
To: platform-driver-x86; +Cc: mjg59, Jesse Barnes
They're optional. If not present or sane, we should use the CPU
defaults.
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
---
drivers/platform/x86/intel_ips.c | 23 +++++++++++++++++++++++
1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
index 71d04ef..c402cc4 100644
--- a/drivers/platform/x86/intel_ips.c
+++ b/drivers/platform/x86/intel_ips.c
@@ -665,6 +665,27 @@ static bool mch_exceeded(struct ips_driver *ips)
}
/**
+ * verify_limits - verify BIOS provided limits
+ * @ips: IPS structure
+ *
+ * BIOS can optionally provide non-default limits for power and temp. Check
+ * them here and use the defaults if the BIOS values are not provided or
+ * are otherwise unusable.
+ */
+static void verify_limits(struct ips_driver *ips)
+{
+ if (ips->mcp_power_limit < ips->limits->mcp_power_limit ||
+ ips->mcp_power_limit > 35000)
+ ips->mcp_power_limit = ips->limits->mcp_power_limit;
+
+ if (ips->mcp_temp_limit < ips->limits->core_temp_limit ||
+ ips->mcp_temp_limit < ips->limits->mch_temp_limit ||
+ ips->mcp_temp_limit > 150)
+ ips->mcp_temp_limit = min(ips->limits->core_temp_limit,
+ ips->limits->mch_temp_limit);
+}
+
+/**
* update_turbo_limits - get various limits & settings from regs
* @ips: IPS driver struct
*
@@ -688,6 +709,7 @@ static void update_turbo_limits(struct ips_driver *ips)
ips->mcp_temp_limit = thm_readw(THM_PTL);
ips->mcp_power_limit = thm_readw(THM_MPPC);
+ verify_limits(ips);
/* Ignore BIOS CPU vs GPU pref */
}
@@ -1156,6 +1178,7 @@ static irqreturn_t ips_irq_handler(int irq, void *arg)
STS_PTL_SHIFT;
ips->mcp_power_limit = (tc1 & STS_PPL_MASK) >>
STS_PPL_SHIFT;
+ verify_limits(ips);
spin_unlock(&ips->turbo_status_lock);
thm_writeb(THM_SEC, SEC_ACK);
--
1.7.2.3
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs
2010-09-23 21:49 [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs Jesse Barnes
2010-09-23 21:49 ` [PATCH 2/2] IPS driver: verify BIOS provided limits Jesse Barnes
@ 2010-09-23 21:51 ` Jesse Barnes
2010-09-23 21:58 ` Rafael J. Wysocki
1 sibling, 1 reply; 7+ messages in thread
From: Jesse Barnes @ 2010-09-23 21:51 UTC (permalink / raw)
To: Rafael J. Wysocki; +Cc: platform-driver-x86, mjg59, infernix
On Thu, 23 Sep 2010 23:49:28 +0200
Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
> If the CPU doesn't support turbo, don't try to enable/disable it.
>
> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> ---
> drivers/platform/x86/intel_ips.c | 14 +++++++++-----
> 1 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
> index bfa9c72..71d04ef 100644
> --- a/drivers/platform/x86/intel_ips.c
> +++ b/drivers/platform/x86/intel_ips.c
> @@ -51,7 +51,6 @@
> * TODO:
> * - handle CPU hotplug
> * - provide turbo enable/disable api
> - * - make sure we can write turbo enable/disable reg based on MISC_EN
> *
> * Related documents:
> * - CDI 403777, 403778 - Auburndale EDS vol 1 & 2
> @@ -325,6 +324,7 @@ struct ips_driver {
> bool gpu_preferred;
> bool poll_turbo_status;
> bool second_cpu;
> + bool turbo_toggle_allowed;
> struct ips_mcp_limits *limits;
>
> /* Optional MCH interfaces for if i915 is in use */
> @@ -461,7 +461,8 @@ static void ips_enable_cpu_turbo(struct ips_driver *ips)
> if (ips->__cpu_turbo_on)
> return;
>
> - on_each_cpu(do_enable_cpu_turbo, ips, 1);
> + if (ips->turbo_toggle_allowed)
> + on_each_cpu(do_enable_cpu_turbo, ips, 1);
>
> ips->__cpu_turbo_on = true;
> }
> @@ -498,7 +499,8 @@ static void ips_disable_cpu_turbo(struct ips_driver *ips)
> if (!ips->__cpu_turbo_on)
> return;
>
> - on_each_cpu(do_disable_cpu_turbo, ips, 1);
> + if (ips->turbo_toggle_allowed)
> + on_each_cpu(do_disable_cpu_turbo, ips, 1);
>
> ips->__cpu_turbo_on = false;
> }
> @@ -1332,8 +1334,10 @@ static struct ips_mcp_limits *ips_detect_cpu(struct ips_driver *ips)
> * turbo manually or we'll get an illegal MSR access, even though
> * turbo will still be available.
> */
> - if (!(misc_en & IA32_MISC_TURBO_EN))
> - ; /* add turbo MSR write allowed flag if necessary */
> + if (misc_en & IA32_MISC_TURBO_EN)
> + ips->turbo_toggle_allowed = true;
> + else
> + ips->turbo_toggle_allowed = false;
>
> if (strstr(boot_cpu_data.x86_model_id, "CPU M"))
> limits = &ips_sv_limits;
Rafael and infernix, this patch should address the GPF in the IPS
driver (kernel bug 18742).
Matthew, since I forgot to add a link to the kernel bug in the log, can
you add it when you commit?
http://bugzilla.kernel.org/show_bug.cgi?id=18742
Thanks,
--
Jesse Barnes, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] IPS driver: verify BIOS provided limits
2010-09-23 21:49 ` [PATCH 2/2] IPS driver: verify BIOS provided limits Jesse Barnes
@ 2010-09-23 21:53 ` Jesse Barnes
2010-09-27 17:38 ` Jesse Barnes
0 siblings, 1 reply; 7+ messages in thread
From: Jesse Barnes @ 2010-09-23 21:53 UTC (permalink / raw)
To: tim.gardner, platform-driver-x86; +Cc: mjg59
On Thu, 23 Sep 2010 23:49:29 +0200
Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
> They're optional. If not present or sane, we should use the CPU
> defaults.
>
> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> ---
> drivers/platform/x86/intel_ips.c | 23 +++++++++++++++++++++++
> 1 files changed, 23 insertions(+), 0 deletions(-)
Note this patch is necessary but not sufficient. At least on one of my
test platforms, I see really bad looking chipset power values from the
i915 driver. That will trigger spurious "power exceeded" messages and
unnecessarily limit your GPU performance. Working on a fix now.
--
Jesse Barnes, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs
2010-09-23 21:51 ` [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs Jesse Barnes
@ 2010-09-23 21:58 ` Rafael J. Wysocki
2010-09-23 22:18 ` Jesse Barnes
0 siblings, 1 reply; 7+ messages in thread
From: Rafael J. Wysocki @ 2010-09-23 21:58 UTC (permalink / raw)
To: Jesse Barnes; +Cc: platform-driver-x86, mjg59, infernix
On Thursday, September 23, 2010, Jesse Barnes wrote:
> On Thu, 23 Sep 2010 23:49:28 +0200
> Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
>
> > If the CPU doesn't support turbo, don't try to enable/disable it.
> >
> > Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> > ---
> > drivers/platform/x86/intel_ips.c | 14 +++++++++-----
> > 1 files changed, 9 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
> > index bfa9c72..71d04ef 100644
> > --- a/drivers/platform/x86/intel_ips.c
> > +++ b/drivers/platform/x86/intel_ips.c
> > @@ -51,7 +51,6 @@
> > * TODO:
> > * - handle CPU hotplug
> > * - provide turbo enable/disable api
> > - * - make sure we can write turbo enable/disable reg based on MISC_EN
> > *
> > * Related documents:
> > * - CDI 403777, 403778 - Auburndale EDS vol 1 & 2
> > @@ -325,6 +324,7 @@ struct ips_driver {
> > bool gpu_preferred;
> > bool poll_turbo_status;
> > bool second_cpu;
> > + bool turbo_toggle_allowed;
> > struct ips_mcp_limits *limits;
> >
> > /* Optional MCH interfaces for if i915 is in use */
> > @@ -461,7 +461,8 @@ static void ips_enable_cpu_turbo(struct ips_driver *ips)
> > if (ips->__cpu_turbo_on)
> > return;
> >
> > - on_each_cpu(do_enable_cpu_turbo, ips, 1);
> > + if (ips->turbo_toggle_allowed)
> > + on_each_cpu(do_enable_cpu_turbo, ips, 1);
> >
> > ips->__cpu_turbo_on = true;
> > }
> > @@ -498,7 +499,8 @@ static void ips_disable_cpu_turbo(struct ips_driver *ips)
> > if (!ips->__cpu_turbo_on)
> > return;
> >
> > - on_each_cpu(do_disable_cpu_turbo, ips, 1);
> > + if (ips->turbo_toggle_allowed)
> > + on_each_cpu(do_disable_cpu_turbo, ips, 1);
> >
> > ips->__cpu_turbo_on = false;
> > }
> > @@ -1332,8 +1334,10 @@ static struct ips_mcp_limits *ips_detect_cpu(struct ips_driver *ips)
> > * turbo manually or we'll get an illegal MSR access, even though
> > * turbo will still be available.
> > */
> > - if (!(misc_en & IA32_MISC_TURBO_EN))
> > - ; /* add turbo MSR write allowed flag if necessary */
> > + if (misc_en & IA32_MISC_TURBO_EN)
> > + ips->turbo_toggle_allowed = true;
> > + else
> > + ips->turbo_toggle_allowed = false;
> >
> > if (strstr(boot_cpu_data.x86_model_id, "CPU M"))
> > limits = &ips_sv_limits;
>
> Rafael and infernix, this patch should address the GPF in the IPS
> driver (kernel bug 18742).
>
> Matthew, since I forgot to add a link to the kernel bug in the log, can
> you add it when you commit?
>
> http://bugzilla.kernel.org/show_bug.cgi?id=18742
Can you drop the patch into the Bugzilla for completeness?
Or is it in patchwork?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs
2010-09-23 21:58 ` Rafael J. Wysocki
@ 2010-09-23 22:18 ` Jesse Barnes
0 siblings, 0 replies; 7+ messages in thread
From: Jesse Barnes @ 2010-09-23 22:18 UTC (permalink / raw)
To: Rafael J. Wysocki; +Cc: platform-driver-x86, mjg59, infernix
On Thu, 23 Sep 2010 23:58:10 +0200
"Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> On Thursday, September 23, 2010, Jesse Barnes wrote:
> > On Thu, 23 Sep 2010 23:49:28 +0200
> > Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
> >
> > > If the CPU doesn't support turbo, don't try to enable/disable it.
> > >
> > > Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> > > ---
> > > drivers/platform/x86/intel_ips.c | 14 +++++++++-----
> > > 1 files changed, 9 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
> > > index bfa9c72..71d04ef 100644
> > > --- a/drivers/platform/x86/intel_ips.c
> > > +++ b/drivers/platform/x86/intel_ips.c
> > > @@ -51,7 +51,6 @@
> > > * TODO:
> > > * - handle CPU hotplug
> > > * - provide turbo enable/disable api
> > > - * - make sure we can write turbo enable/disable reg based on MISC_EN
> > > *
> > > * Related documents:
> > > * - CDI 403777, 403778 - Auburndale EDS vol 1 & 2
> > > @@ -325,6 +324,7 @@ struct ips_driver {
> > > bool gpu_preferred;
> > > bool poll_turbo_status;
> > > bool second_cpu;
> > > + bool turbo_toggle_allowed;
> > > struct ips_mcp_limits *limits;
> > >
> > > /* Optional MCH interfaces for if i915 is in use */
> > > @@ -461,7 +461,8 @@ static void ips_enable_cpu_turbo(struct ips_driver *ips)
> > > if (ips->__cpu_turbo_on)
> > > return;
> > >
> > > - on_each_cpu(do_enable_cpu_turbo, ips, 1);
> > > + if (ips->turbo_toggle_allowed)
> > > + on_each_cpu(do_enable_cpu_turbo, ips, 1);
> > >
> > > ips->__cpu_turbo_on = true;
> > > }
> > > @@ -498,7 +499,8 @@ static void ips_disable_cpu_turbo(struct ips_driver *ips)
> > > if (!ips->__cpu_turbo_on)
> > > return;
> > >
> > > - on_each_cpu(do_disable_cpu_turbo, ips, 1);
> > > + if (ips->turbo_toggle_allowed)
> > > + on_each_cpu(do_disable_cpu_turbo, ips, 1);
> > >
> > > ips->__cpu_turbo_on = false;
> > > }
> > > @@ -1332,8 +1334,10 @@ static struct ips_mcp_limits *ips_detect_cpu(struct ips_driver *ips)
> > > * turbo manually or we'll get an illegal MSR access, even though
> > > * turbo will still be available.
> > > */
> > > - if (!(misc_en & IA32_MISC_TURBO_EN))
> > > - ; /* add turbo MSR write allowed flag if necessary */
> > > + if (misc_en & IA32_MISC_TURBO_EN)
> > > + ips->turbo_toggle_allowed = true;
> > > + else
> > > + ips->turbo_toggle_allowed = false;
> > >
> > > if (strstr(boot_cpu_data.x86_model_id, "CPU M"))
> > > limits = &ips_sv_limits;
> >
> > Rafael and infernix, this patch should address the GPF in the IPS
> > driver (kernel bug 18742).
> >
> > Matthew, since I forgot to add a link to the kernel bug in the log, can
> > you add it when you commit?
> >
> > http://bugzilla.kernel.org/show_bug.cgi?id=18742
>
> Can you drop the patch into the Bugzilla for completeness?
>
> Or is it in patchwork?
Dunno about patchwork, but I just added it to the bug.
--
Jesse Barnes, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] IPS driver: verify BIOS provided limits
2010-09-23 21:53 ` Jesse Barnes
@ 2010-09-27 17:38 ` Jesse Barnes
0 siblings, 0 replies; 7+ messages in thread
From: Jesse Barnes @ 2010-09-27 17:38 UTC (permalink / raw)
Cc: tim.gardner, platform-driver-x86, mjg59
On Thu, 23 Sep 2010 14:53:01 -0700
Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
> On Thu, 23 Sep 2010 23:49:29 +0200
> Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
>
> > They're optional. If not present or sane, we should use the CPU
> > defaults.
> >
> > Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> > ---
> > drivers/platform/x86/intel_ips.c | 23 +++++++++++++++++++++++
> > 1 files changed, 23 insertions(+), 0 deletions(-)
>
> Note this patch is necessary but not sufficient. At least on one of my
> test platforms, I see really bad looking chipset power values from the
> i915 driver. That will trigger spurious "power exceeded" messages and
> unnecessarily limit your GPU performance. Working on a fix now.
Already sent this fix to Chris for inclusion, but here it is for
reference and testing in this thread.
--
Jesse Barnes, Intel Open Source Technology Center
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 9d67b48..c74e4e8 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1787,9 +1787,9 @@ unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
}
}
- div_u64(diff, diff1);
+ diff = div_u64(diff, diff1);
ret = ((m * diff) + c);
- div_u64(ret, 10);
+ ret = div_u64(ret, 10);
dev_priv->last_count1 = total_count;
dev_priv->last_time1 = now;
@@ -1858,7 +1858,7 @@ void i915_update_gfx_val(struct drm_i915_private *dev_priv)
/* More magic constants... */
diff = diff * 1181;
- div_u64(diff, diffms * 10);
+ diff = div_u64(diff, diffms * 10);
dev_priv->gfx_power = diff;
}
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-09-27 17:38 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-23 21:49 [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs Jesse Barnes
2010-09-23 21:49 ` [PATCH 2/2] IPS driver: verify BIOS provided limits Jesse Barnes
2010-09-23 21:53 ` Jesse Barnes
2010-09-27 17:38 ` Jesse Barnes
2010-09-23 21:51 ` [PATCH 1/2] IPS driver: don't toggle CPU turbo on unsupported CPUs Jesse Barnes
2010-09-23 21:58 ` Rafael J. Wysocki
2010-09-23 22:18 ` Jesse Barnes
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).