diff options
| -rw-r--r-- | Documentation/kernel-parameters.txt | 2 | ||||
| -rw-r--r-- | drivers/usb/host/pci-quirks.c | 46 | ||||
| -rw-r--r-- | include/asm-i386/mach-summit/mach_mpparse.h | 3 | ||||
| -rw-r--r-- | include/linux/pci_ids.h | 3 |
4 files changed, 6 insertions, 48 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 971589a9752d..90766b75d1b7 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -1517,8 +1517,6 @@ running once the system is up. | |||
| 1517 | uart6850= [HW,OSS] | 1517 | uart6850= [HW,OSS] |
| 1518 | Format: <io>,<irq> | 1518 | Format: <io>,<irq> |
| 1519 | 1519 | ||
| 1520 | usb-handoff [HW] Enable early USB BIOS -> OS handoff | ||
| 1521 | |||
| 1522 | usbhid.mousepoll= | 1520 | usbhid.mousepoll= |
| 1523 | [USBHID] The interval which mice are to be polled at. | 1521 | [USBHID] The interval which mice are to be polled at. |
| 1524 | 1522 | ||
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c index f7411ca48835..b7fd3f644e1e 100644 --- a/drivers/usb/host/pci-quirks.c +++ b/drivers/usb/host/pci-quirks.c | |||
| @@ -23,33 +23,6 @@ | |||
| 23 | #include <linux/acpi.h> | 23 | #include <linux/acpi.h> |
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | /* | ||
| 27 | * PIIX3 USB: We have to disable USB interrupts that are | ||
| 28 | * hardwired to PIRQD# and may be shared with an | ||
| 29 | * external device. | ||
| 30 | * | ||
| 31 | * Legacy Support Register (LEGSUP): | ||
| 32 | * bit13: USB PIRQ Enable (USBPIRQDEN), | ||
| 33 | * bit4: Trap/SMI On IRQ Enable (USBSMIEN). | ||
| 34 | * | ||
| 35 | * We mask out all r/wc bits, too. | ||
| 36 | */ | ||
| 37 | static void __devinit quirk_piix3_usb(struct pci_dev *dev) | ||
| 38 | { | ||
| 39 | u16 legsup; | ||
| 40 | |||
| 41 | pci_read_config_word(dev, 0xc0, &legsup); | ||
| 42 | legsup &= 0x50ef; | ||
| 43 | pci_write_config_word(dev, 0xc0, legsup); | ||
| 44 | } | ||
| 45 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_2, quirk_piix3_usb ); | ||
| 46 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_2, quirk_piix3_usb ); | ||
| 47 | |||
| 48 | |||
| 49 | /* FIXME these should be the guts of hcd->reset() methods; resolve all | ||
| 50 | * the differences between this version and the HCD's version. | ||
| 51 | */ | ||
| 52 | |||
| 53 | #define UHCI_USBLEGSUP 0xc0 /* legacy support */ | 26 | #define UHCI_USBLEGSUP 0xc0 /* legacy support */ |
| 54 | #define UHCI_USBCMD 0 /* command register */ | 27 | #define UHCI_USBCMD 0 /* command register */ |
| 55 | #define UHCI_USBINTR 4 /* interrupt register */ | 28 | #define UHCI_USBINTR 4 /* interrupt register */ |
| @@ -83,13 +56,6 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_2, qui | |||
| 83 | #define EHCI_USBLEGCTLSTS 4 /* legacy control/status */ | 56 | #define EHCI_USBLEGCTLSTS 4 /* legacy control/status */ |
| 84 | #define EHCI_USBLEGCTLSTS_SOOE (1 << 13) /* SMI on ownership change */ | 57 | #define EHCI_USBLEGCTLSTS_SOOE (1 << 13) /* SMI on ownership change */ |
| 85 | 58 | ||
| 86 | int usb_early_handoff __devinitdata = 0; | ||
| 87 | static int __init usb_handoff_early(char *str) | ||
| 88 | { | ||
| 89 | usb_early_handoff = 1; | ||
| 90 | return 0; | ||
| 91 | } | ||
| 92 | __setup("usb-handoff", usb_handoff_early); | ||
| 93 | 59 | ||
| 94 | /* | 60 | /* |
| 95 | * Make sure the controller is completely inactive, unable to | 61 | * Make sure the controller is completely inactive, unable to |
| @@ -320,17 +286,11 @@ static void __devinit quirk_usb_disable_ehci(struct pci_dev *pdev) | |||
| 320 | 286 | ||
| 321 | static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev) | 287 | static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev) |
| 322 | { | 288 | { |
| 323 | if (!usb_early_handoff) | 289 | if (pdev->class == PCI_CLASS_SERIAL_USB_UHCI) |
| 324 | return; | ||
| 325 | |||
| 326 | if (pdev->class == ((PCI_CLASS_SERIAL_USB << 8) | 0x00)) { /* UHCI */ | ||
| 327 | quirk_usb_handoff_uhci(pdev); | 290 | quirk_usb_handoff_uhci(pdev); |
| 328 | } else if (pdev->class == ((PCI_CLASS_SERIAL_USB << 8) | 0x10)) { /* OHCI */ | 291 | else if (pdev->class == PCI_CLASS_SERIAL_USB_OHCI) |
| 329 | quirk_usb_handoff_ohci(pdev); | 292 | quirk_usb_handoff_ohci(pdev); |
| 330 | } else if (pdev->class == ((PCI_CLASS_SERIAL_USB << 8) | 0x20)) { /* EHCI */ | 293 | else if (pdev->class == PCI_CLASS_SERIAL_USB_EHCI) |
| 331 | quirk_usb_disable_ehci(pdev); | 294 | quirk_usb_disable_ehci(pdev); |
| 332 | } | ||
| 333 | |||
| 334 | return; | ||
| 335 | } | 295 | } |
| 336 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff); | 296 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff); |
diff --git a/include/asm-i386/mach-summit/mach_mpparse.h b/include/asm-i386/mach-summit/mach_mpparse.h index 2b9e6d55bef1..1cce2b924a80 100644 --- a/include/asm-i386/mach-summit/mach_mpparse.h +++ b/include/asm-i386/mach-summit/mach_mpparse.h | |||
| @@ -22,7 +22,6 @@ static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, | |||
| 22 | { | 22 | { |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | extern int usb_early_handoff; | ||
| 26 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | 25 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, |
| 27 | char *productid) | 26 | char *productid) |
| 28 | { | 27 | { |
| @@ -32,7 +31,6 @@ static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | |||
| 32 | || !strncmp(productid, "RUTHLESS SMP", 12))){ | 31 | || !strncmp(productid, "RUTHLESS SMP", 12))){ |
| 33 | use_cyclone = 1; /*enable cyclone-timer*/ | 32 | use_cyclone = 1; /*enable cyclone-timer*/ |
| 34 | setup_summit(); | 33 | setup_summit(); |
| 35 | usb_early_handoff = 1; | ||
| 36 | return 1; | 34 | return 1; |
| 37 | } | 35 | } |
| 38 | return 0; | 36 | return 0; |
| @@ -46,7 +44,6 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) | |||
| 46 | || !strncmp(oem_table_id, "EXA", 3))){ | 44 | || !strncmp(oem_table_id, "EXA", 3))){ |
| 47 | use_cyclone = 1; /*enable cyclone-timer*/ | 45 | use_cyclone = 1; /*enable cyclone-timer*/ |
| 48 | setup_summit(); | 46 | setup_summit(); |
| 49 | usb_early_handoff = 1; | ||
| 50 | return 1; | 47 | return 1; |
| 51 | } | 48 | } |
| 52 | return 0; | 49 | return 0; |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 7d300f7469e3..467a096c3b81 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -96,6 +96,9 @@ | |||
| 96 | #define PCI_CLASS_SERIAL_ACCESS 0x0c01 | 96 | #define PCI_CLASS_SERIAL_ACCESS 0x0c01 |
| 97 | #define PCI_CLASS_SERIAL_SSA 0x0c02 | 97 | #define PCI_CLASS_SERIAL_SSA 0x0c02 |
| 98 | #define PCI_CLASS_SERIAL_USB 0x0c03 | 98 | #define PCI_CLASS_SERIAL_USB 0x0c03 |
| 99 | #define PCI_CLASS_SERIAL_USB_UHCI 0x0c0300 | ||
| 100 | #define PCI_CLASS_SERIAL_USB_OHCI 0x0c0310 | ||
| 101 | #define PCI_CLASS_SERIAL_USB_EHCI 0x0c0320 | ||
| 99 | #define PCI_CLASS_SERIAL_FIBER 0x0c04 | 102 | #define PCI_CLASS_SERIAL_FIBER 0x0c04 |
| 100 | #define PCI_CLASS_SERIAL_SMBUS 0x0c05 | 103 | #define PCI_CLASS_SERIAL_SMBUS 0x0c05 |
| 101 | 104 | ||
