--- linux/drivers/usb/host/pci-quirks.c.orig 2006-02-12 17:47:32.000000000 +0000 +++ linux/drivers/usb/host/pci-quirks.c 2006-02-12 17:48:58.000000000 +0000 @@ -208,8 +208,9 @@ static void __devinit quirk_usb_handoff_ } if (wait_time <= 0) printk(KERN_WARNING "%s %s: BIOS handoff " - "failed (BIOS bug ?)\n", - pdev->dev.bus_id, "OHCI"); + "failed (BIOS bug ?) %08x\n", + pdev->dev.bus_id, "OHCI", + readl(base + OHCI_CONTROL)); /* reset controller, preserving RWC */ writel(control & OHCI_CTRL_RWC, base + OHCI_CONTROL); @@ -234,12 +235,19 @@ static void __devinit quirk_usb_disable_ u8 offset, cap_length; int count = 256/4; - if (!mmio_resource_enabled(pdev, 0)) + printk("quirk_usb_disable_ehci()\n"); + + if (!mmio_resource_enabled(pdev, 0)) { + printk("quirk_usb_disable_ehci() no mmio\n"); return; + } base = ioremap_nocache(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0)); - if (base == NULL) return; + if (base == NULL) { + printk("quirk_usb_disable_ehci() no base\n"); + return; + } cap_length = readb(base); op_reg_base = base + cap_length; @@ -261,6 +269,12 @@ static void __devinit quirk_usb_disable_ pr_debug("%s %s: BIOS handoff\n", pdev->dev.bus_id, "EHCI"); +#if 0 +/* aleksey_gorelov@phoenix.com reports that some systems need SMI forced on, + * but that seems dubious in general (the BIOS left it off intentionally) + * and is known to prevent some systems from booting. so we won't do this + * unless maybe we can determine when we're on a system that needs SMI forced. + */ /* BIOS workaround (?): be sure the * pre-Linux code receives the SMI */ @@ -270,6 +284,7 @@ static void __devinit quirk_usb_disable_ pci_write_config_dword(pdev, offset + EHCI_USBLEGCTLSTS, val | EHCI_USBLEGCTLSTS_SOOE); +#endif } /* always say Linux will own the hardware @@ -292,8 +307,8 @@ static void __devinit quirk_usb_disable_ * it down, and hope nothing goes too wrong */ printk(KERN_WARNING "%s %s: BIOS handoff " - "failed (BIOS bug ?)\n", - pdev->dev.bus_id, "EHCI"); + "failed (BIOS bug ?) %08x\n", + pdev->dev.bus_id, "EHCI", cap); pci_write_config_byte(pdev, offset + 2, 0); } @@ -344,6 +359,8 @@ static void __devinit quirk_usb_disable_ iounmap(base); + printk("quirk_usb_disable_ehci() complete\n"); + return; }