On Fri, Feb 08, 2008 at 04:13:35PM +0100, Prakash Punnoor wrote:I hope you remember correctly and mean it this time. It would be better if you could double check. I'm a little sceptical because we had this patch in OpenSUSE 10.3 and I didn't think there were complaints from NF2 users. With the changes you're requesting it turns from something very well tested into something experimental. But NF2 should not need a timer override anyways so probably ignoring it there is ok. Actually checking CK804 is already an Nforce2, but you might have NF2S which has a different ID. Do you have full lspci/lspci -n output? Ok I'm appending another patch that adds the NF2S too, can you please test it on that machine? Can you please test it? It was a heuristic originally to detect the NF5 which did need the override. That is why I first removed it because it should have been obsolete. Yes, it was a problem in the Nvidia reference BIOS that they sent to OEMs to base their own BIOS on, so pretty much everybody had this problem. We went over this with Nvidia engineers with a fine comb at this point. If you search the mailing list archives you might even find the discussions. -Andi7 --- Replace nvidia timer override quirk with pci id list v3 [This patch was originally in the old ff tree and was intended for .24; but somehow got lost in the arch merge. Has also shipped with OpenSUSE 10.3. I think it should go into .25] This replaces the old NF3/NF4 reference BIOS timer override quirk with a device ID list. We need to ignore the timer override on these systems, but not ignore it on NF5 based systems. Previously this was distingushed by checking for HPET, but a lot of BIOS vendors didn't enable HPET in their pre Vista BIOSes. Replace the old "for all of nvidia" quirk with a quirk containing pci device ID. I goobled this list together from pci.ids and googling and it may be incomplete, but so far I haven't had complaints. I also straightened out the ifdef jungle a bit. v1->v2: Readd the HPET check to handle a NF4 system of Prakash Punnoor. This means with HPET we always assume timer overrides are ok. v2->v3: Match any IDs, not only bridges again. Add NF2S ID Cc: lenb@kernel.org Signed-off-by: Andi Kleen <ak@suse.de> --- arch/x86/kernel/early-quirks.c | 53 ++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 24 deletions(-) Index: linux/arch/x86/kernel/early-quirks.c =================================================================== --- linux.orig/arch/x86/kernel/early-quirks.c +++ linux/arch/x86/kernel/early-quirks.c @@ -67,37 +67,30 @@ static int __init nvidia_hpet_check(stru { return 0; } -#endif /* CONFIG_X86_IO_APIC */ -#endif /* CONFIG_ACPI */ -static void __init nvidia_bugs(int num, int slot, int func) +static void __init nvidia_timer(int num, int slot, int func) { -#ifdef CONFIG_ACPI -#ifdef CONFIG_X86_IO_APIC - /* - * All timer overrides on Nvidia are - * wrong unless HPET is enabled. - * Unfortunately that's not true on many Asus boards. - * We don't know yet how to detect this automatically, but - * at least allow a command line override. - */ if (acpi_use_timer_override) return; - if (acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check)) { - acpi_skip_timer_override = 1; - printk(KERN_INFO "Nvidia board " - "detected. Ignoring ACPI " - "timer override.\n"); - printk(KERN_INFO "If you got timer trouble " - "try acpi_use_timer_override\n"); + /* When the board has HPET assume timer override is ok */ + if (!acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check)) { + printk(KERN_INFO "Pre Nforce5 Nvidia board detected with HPET.\n" + KERN_INFO "Assuming timer override is ok. If you have trouble\n" + KERN_INFO "please try booting with acpi_skip_timer_override\n"); + return; } -#endif -#endif - /* RED-PEN skip them on mptables too? */ + acpi_skip_timer_override = 1; + printk(KERN_INFO "Pre NForce5 Nvidia board " + "detected. Ignoring ACPI timer override.\n"); + printk(KERN_INFO "If you got timer trouble " + "try acpi_use_timer_override\n"); } +#endif +#endif + static void __init ati_bugs(int num, int slot, int func) { #ifdef CONFIG_X86_IO_APIC @@ -121,9 +114,22 @@ struct chipset { void (*f)(int num, int slot, int func); }; +#define QID(vendor, device, func) { \ + vendor, device, PCI_ANY_ID, PCI_ANY_ID, \ + QFLAG_APPLY_ONCE, func } + static struct chipset early_qrk[] __initdata = { - { PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, - PCI_CLASS_BRIDGE_PCI, PCI_ANY_ID, QFLAG_APPLY_ONCE, nvidia_bugs }, +#if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC) + /* This list should cover at least one PCI ID from each NF3 or NF4 + mainboard to handle bogus timer overrides in their reference BIOS. */ + QID(PCI_VENDOR_ID_NVIDIA, 0x00e1, nvidia_timer), /* nforce 3 */ + QID(PCI_VENDOR_ID_NVIDIA, 0x00ed, nvidia_timer), /* nforce 3 */ + QID(PCI_VENDOR_ID_NVIDIA, 0x003d, nvidia_timer), /* mcp 04 ?? */ + QID(PCI_VENDOR_ID_NVIDIA, 0x02f0, nvidia_timer), /* mcp 51/nf4 ? */ + QID(PCI_VENDOR_ID_NVIDIA, 0x026f, nvidia_timer), /* mcp 51/nf4 ? */ + QID(PCI_VENDOR_ID_NVIDIA, 0x005c, nvidia_timer), /* ck 804 */ + QID(PCI_VENDOR_ID_NVIDIA, 0x0084, nvidia_timer), /* nf2s */ +#endif { PCI_VENDOR_ID_VIA, PCI_ANY_ID, PCI_CLASS_BRIDGE_PCI, PCI_ANY_ID, QFLAG_APPLY_ONCE, via_bugs }, { PCI_VENDOR_ID_ATI, PCI_ANY_ID, --
| Greg Kroah-Hartman | [PATCH 006/196] Chinese: add translation of oops-tracing.txt |
| Jan Engelhardt | intel iommu (Re: -mm merge plans for 2.6.23) |
| James Bottomley | Re: Integration of SCST in the mainstream Linux kernel |
| Borislav Petkov | 2.6.23-rc1: no setup signature found... |
git: | |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| David Miller | [GIT]: Networking |
| David Miller | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| David Miller | Re: [BUG] New Kernel Bugs |
