--- usb_/ehci_pci.c 2008-01-26 18:42:11.000000000 +0100 +++ usb/ehci_pci.c 2008-01-26 21:15:28.000000000 +0100 @@ -99,6 +99,8 @@ /* AMD */ #define PCI_EHCI_DEVICEID_8111 0x10227463 static const char *ehci_device_8111 = "AMD 8111 USB 2.0 controller"; +#define PCI_EHCI_DEVICEID_CS5536 0x20951022 +static const char *ehci_device_cs5536 = "AMD CS5536 (Geode) USB 2.0 controller"; /* ATI */ #define PCI_EHCI_DEVICEID_SB200 0x43451002 @@ -214,6 +216,8 @@ return (ehci_device_m5239); case PCI_EHCI_DEVICEID_8111: return (ehci_device_8111); + case PCI_EHCI_DEVICEID_CS5536: + return (ehci_device_cs5536); case PCI_EHCI_DEVICEID_SB200: return (ehci_device_sb200); case PCI_EHCI_DEVICEID_SB400: @@ -291,8 +295,13 @@ case PCI_USBREV_PRE_1_0: case PCI_USBREV_1_0: case PCI_USBREV_1_1: - sc->sc_bus.usbrev = USBREV_UNKNOWN; device_printf(self, "pre-2.0 USB rev\n"); + if (pci_get_devid(self) == PCI_EHCI_DEVICEID_CS5536) { + sc->sc_bus.usbrev = USBREV_2_0; + device_printf(self, "Quirk for CS5536 USB 2.0 enabled\n"); + break; + } + sc->sc_bus.usbrev = USBREV_UNKNOWN; return ENXIO; case PCI_USBREV_2_0: sc->sc_bus.usbrev = USBREV_2_0;