Index: ehci_pci.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/ehci_pci.c,v retrieving revision 1.56 diff -u -r1.56 ehci_pci.c --- ehci_pci.c 20 Jul 2012 01:26:19 -0000 1.56 +++ ehci_pci.c 21 Sep 2012 22:14:05 -0000 @@ -393,18 +393,16 @@ if (EHCI_CAP_GET_ID(cap) != EHCI_CAP_ID_LEGACY) goto next; legsup = pci_conf_read(pc, tag, addr + PCI_EHCI_USBLEGSUP); + /* Ask BIOS to give up ownership */ + pci_conf_write(pc, tag, addr + PCI_EHCI_USBLEGSUP, + legsup | EHCI_LEG_HC_OS_OWNED); if (legsup & EHCI_LEG_HC_BIOS_OWNED) { - /* Ask BIOS to give up ownership */ - legsup &= ~EHCI_LEG_HC_BIOS_OWNED; - legsup |= EHCI_LEG_HC_OS_OWNED; - pci_conf_write(pc, tag, addr + PCI_EHCI_USBLEGSUP, - legsup); for (ms = 0; ms < EHCI_MAX_BIOS_WAIT; ms++) { legsup = pci_conf_read(pc, tag, addr + PCI_EHCI_USBLEGSUP); if (!(legsup & EHCI_LEG_HC_BIOS_OWNED)) break; - delay(10000); + delay(1000); } if (ms == EHCI_MAX_BIOS_WAIT) { aprint_normal("%s: BIOS refuses to give up " @@ -417,7 +415,9 @@ } /* Disable SMIs */ - pci_conf_write(pc, tag, addr + PCI_EHCI_USBLEGCTLSTS, 0); + pci_conf_write(pc, tag, addr + PCI_EHCI_USBLEGCTLSTS, + EHCI_LEG_EXT_SMI_BAR | EHCI_LEG_EXT_SMI_PCICMD | + EHCI_LEG_EXT_SMI_OS_CHANGE); next: if (--maxcap < 0) {