--- linux-2.6.16-rc4-gentoo/drivers/usb/host/pci-quirks.c.orig 2006-02-18 13:45:14.000000000 +0000 +++ linux-2.6.16-rc4-gentoo/drivers/usb/host/pci-quirks.c 2006-02-18 13:54:48.000000000 +0000 @@ -217,6 +217,8 @@ static void __devinit quirk_usb_disable_ u8 offset, cap_length; int count = 256/4; + printk("quirk_usb_disable_ehci\n"); + if (!mmio_resource_enabled(pdev, 0)) return; @@ -233,11 +235,13 @@ static void __devinit quirk_usb_disable_ */ hcc_params = readl(base + EHCI_HCC_PARAMS); offset = (hcc_params >> 8) & 0xff; + printk("entering loop, initial offset %x\n", offset); while (offset && count--) { u32 cap; int msec; pci_read_config_dword(pdev, offset, &cap); + printk("read %x at offset %x\n", cap, offset); switch (cap & 0xff) { case 1: /* BIOS/SMM/... handoff support */ if ((cap & EHCI_USBLEGSUP_BIOS)) { @@ -265,7 +269,9 @@ static void __devinit quirk_usb_disable_ /* always say Linux will own the hardware * by setting EHCI_USBLEGSUP_OS. */ + printk("claiming OS at offset %x\n", offset + 3); pci_write_config_byte(pdev, offset + 3, 1); + printk("claimed\n"); /* if boot firmware now owns EHCI, spin till * it hands it over. @@ -276,6 +282,7 @@ static void __devinit quirk_usb_disable_ msec -= 10; pci_read_config_dword(pdev, offset, &cap); } + printk("done spinning\n"); if (cap & EHCI_USBLEGSUP_BIOS) { /* well, possibly buggy BIOS... try to shut @@ -287,10 +294,12 @@ static void __devinit quirk_usb_disable_ pci_write_config_byte(pdev, offset + 2, 0); } + printk("disabling SMI\n"); /* just in case, always disable EHCI SMIs */ pci_write_config_dword(pdev, offset + EHCI_USBLEGCTLSTS, 0); + printk("disable done\n"); break; case 0: /* illegal reserved capability */ cap = 0; @@ -311,11 +320,15 @@ static void __devinit quirk_usb_disable_ /* * halt EHCI & disable its interrupts in any case */ + printk("reading usbsts\n"); val = readl(op_reg_base + EHCI_USBSTS); + printk("usbsts reads %x\n", val); if ((val & EHCI_USBSTS_HALTED) == 0) { + printk("status halted\n"); val = readl(op_reg_base + EHCI_USBCMD); val &= ~EHCI_USBCMD_RUN; writel(val, op_reg_base + EHCI_USBCMD); + printk("cleared run\n"); wait_time = 2000; delta = 100; @@ -328,9 +341,14 @@ static void __devinit quirk_usb_disable_ break; } } while (wait_time > 0); + + printk("finished spinning\n"); } + printk("disable intr\n"); writel(0, op_reg_base + EHCI_USBINTR); + printk("done 1\n"); writel(0x3f, op_reg_base + EHCI_USBSTS); + printk("done disable\n"); iounmap(base);