* x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
@ 2008-10-15 9:51 Andreas Herrmann
2008-10-22 10:00 ` Ingo Molnar
2008-10-22 10:05 ` Andreas Herrmann
0 siblings, 2 replies; 4+ messages in thread
From: Andreas Herrmann @ 2008-10-15 9:51 UTC (permalink / raw)
To: Ingo Molnar, Thomas Gleixner; +Cc: linux-kernel
On some more HP laptops BIOS reports an IRQ0 override
but the SB600 chipset is configured such that timer
interrupts go to INT0 of IOAPIC.
Check IRQ0 routing and if it is routed to INT0 of IOAPIC skip the
timer override.
See following bug reports:
http://bugzilla.kernel.org/show_bug.cgi?id=11715
http://bugzilla.kernel.org/show_bug.cgi?id=11516
Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
---
arch/x86/kernel/early-quirks.c | 55 +++++++++++++++++++++++++++++++++++++--
1 files changed, 52 insertions(+), 3 deletions(-)
Patch is against v2.6.27-3977-gc166ab7 (yesterday's Linus git).
Please apply.
Thanks,
Andreas
diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
index 733c4f8..3ce029f 100644
--- a/arch/x86/kernel/early-quirks.c
+++ b/arch/x86/kernel/early-quirks.c
@@ -95,7 +95,8 @@ static void __init nvidia_bugs(int num, int slot, int func)
}
-static u32 ati_ixp4x0_rev(int num, int slot, int func)
+#if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC)
+static u32 __init ati_ixp4x0_rev(int num, int slot, int func)
{
u32 d;
u8 b;
@@ -115,7 +116,6 @@ static u32 ati_ixp4x0_rev(int num, int slot, int func)
static void __init ati_bugs(int num, int slot, int func)
{
-#if defined(CONFIG_ACPI) && defined (CONFIG_X86_IO_APIC)
u32 d;
u8 b;
@@ -138,9 +138,56 @@ static void __init ati_bugs(int num, int slot, int func)
printk(KERN_INFO "If you got timer trouble "
"try acpi_use_timer_override\n");
}
-#endif
}
+static u32 __init ati_sbx00_rev(int num, int slot, int func)
+{
+ u32 old, d;
+
+ d = read_pci_config(num, slot, func, 0x70);
+ old = d;
+ d &= ~(1<<8);
+ write_pci_config(num, slot, func, 0x70, d);
+ d = read_pci_config(num, slot, func, 0x8);
+ d &= 0xff;
+ write_pci_config(num, slot, func, 0x70, old);
+
+ return d;
+}
+
+static void __init ati_bugs_contd(int num, int slot, int func)
+{
+ u32 d, rev;
+
+ if (acpi_use_timer_override)
+ return;
+
+ rev = ati_sbx00_rev(num, slot, func);
+ if (rev > 0x13)
+ return;
+
+ /* check for IRQ0 interrupt swap */
+ d = read_pci_config(num, slot, func, 0x64);
+ if (!(d & (1<<14)))
+ acpi_skip_timer_override = 1;
+
+ if (acpi_skip_timer_override) {
+ printk(KERN_INFO "SB600 revision 0x%x\n", rev);
+ printk(KERN_INFO "Ignoring ACPI timer override.\n");
+ printk(KERN_INFO "If you got timer trouble "
+ "try acpi_use_timer_override\n");
+ }
+}
+#else
+static void __init ati_bugs(int num, int slot, int func)
+{
+}
+
+static void __init ati_bugs_contd(int num, int slot, int func)
+{
+}
+#endif
+
#ifdef CONFIG_DMAR
static void __init intel_g33_dmar(int num, int slot, int func)
{
@@ -176,6 +223,8 @@ static struct chipset early_qrk[] __initdata = {
PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, fix_hypertransport_config },
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_SMBUS,
PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs },
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS,
+ PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs_contd },
#ifdef CONFIG_DMAR
{ PCI_VENDOR_ID_INTEL, 0x29c0,
PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, intel_g33_dmar },
--
1.6.0.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
2008-10-15 9:51 x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC Andreas Herrmann
@ 2008-10-22 10:00 ` Ingo Molnar
2008-10-22 10:05 ` Andreas Herrmann
1 sibling, 0 replies; 4+ messages in thread
From: Ingo Molnar @ 2008-10-22 10:00 UTC (permalink / raw)
To: Andreas Herrmann; +Cc: Thomas Gleixner, linux-kernel
* Andreas Herrmann <andreas.herrmann3@amd.com> wrote:
> On some more HP laptops BIOS reports an IRQ0 override
> but the SB600 chipset is configured such that timer
> interrupts go to INT0 of IOAPIC.
>
> Check IRQ0 routing and if it is routed to INT0 of IOAPIC skip the
> timer override.
>
> See following bug reports:
> http://bugzilla.kernel.org/show_bug.cgi?id=11715
> http://bugzilla.kernel.org/show_bug.cgi?id=11516
>
> Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
applied to tip/x86/urgent, and i also added a stable@kernel.org tag.
thanks Andreas!
Ingo
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
2008-10-15 9:51 x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC Andreas Herrmann
2008-10-22 10:00 ` Ingo Molnar
@ 2008-10-22 10:05 ` Andreas Herrmann
2008-10-22 10:08 ` Andreas Herrmann
1 sibling, 1 reply; 4+ messages in thread
From: Andreas Herrmann @ 2008-10-22 10:05 UTC (permalink / raw)
To: Ingo Molnar, Thomas Gleixner; +Cc: linux-kernel
On Wed, Oct 15, 2008 at 11:51:53AM +0200, Andreas Herrmann wrote:
> On some more HP laptops BIOS reports an IRQ0 override
> but the SB600 chipset is configured such that timer
> interrupts go to INT0 of IOAPIC.
>
> Check IRQ0 routing and if it is routed to INT0 of IOAPIC skip the
> timer override.
>
> See following bug reports:
> http://bugzilla.kernel.org/show_bug.cgi?id=11715
> http://bugzilla.kernel.org/show_bug.cgi?id=11516
>
> Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
> ---
> arch/x86/kernel/early-quirks.c | 55 +++++++++++++++++++++++++++++++++++++--
> 1 files changed, 52 insertions(+), 3 deletions(-)
>
> Patch is against v2.6.27-3977-gc166ab7 (yesterday's Linus git).
> Please apply.
Hi Ingo,
any chance that this fix makes it into tip asap?
I'd like to see it in 2.6.28.
Thanks,
Andreas
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
2008-10-22 10:05 ` Andreas Herrmann
@ 2008-10-22 10:08 ` Andreas Herrmann
0 siblings, 0 replies; 4+ messages in thread
From: Andreas Herrmann @ 2008-10-22 10:08 UTC (permalink / raw)
To: Ingo Molnar, Thomas Gleixner; +Cc: linux-kernel
On Wed, Oct 22, 2008 at 12:05:23PM +0200, Andreas Herrmann wrote:
> On Wed, Oct 15, 2008 at 11:51:53AM +0200, Andreas Herrmann wrote:
> > On some more HP laptops BIOS reports an IRQ0 override
> > but the SB600 chipset is configured such that timer
> > interrupts go to INT0 of IOAPIC.
> >
> > Check IRQ0 routing and if it is routed to INT0 of IOAPIC skip the
> > timer override.
> >
> > See following bug reports:
> > http://bugzilla.kernel.org/show_bug.cgi?id=11715
> > http://bugzilla.kernel.org/show_bug.cgi?id=11516
> >
> > Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
> > ---
> > arch/x86/kernel/early-quirks.c | 55 +++++++++++++++++++++++++++++++++++++--
> > 1 files changed, 52 insertions(+), 3 deletions(-)
> >
> > Patch is against v2.6.27-3977-gc166ab7 (yesterday's Linus git).
> > Please apply.
>
>
> Hi Ingo,
>
> any chance that this fix makes it into tip asap?
> I'd like to see it in 2.6.28.
Sorry for the noise.
I've just seen that you have already applied it.
Thanks!!
Andreas
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-10-22 10:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-15 9:51 x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC Andreas Herrmann
2008-10-22 10:00 ` Ingo Molnar
2008-10-22 10:05 ` Andreas Herrmann
2008-10-22 10:08 ` Andreas Herrmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox