diff options
Diffstat (limited to 'drivers/usb/host/pci-quirks.c')
| -rw-r--r-- | drivers/usb/host/pci-quirks.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c index e9e5bc178cef..9e81c26313f9 100644 --- a/drivers/usb/host/pci-quirks.c +++ b/drivers/usb/host/pci-quirks.c | |||
| @@ -191,8 +191,9 @@ static void __devinit quirk_usb_handoff_ohci(struct pci_dev *pdev) | |||
| 191 | } | 191 | } |
| 192 | if (wait_time <= 0) | 192 | if (wait_time <= 0) |
| 193 | printk(KERN_WARNING "%s %s: BIOS handoff " | 193 | printk(KERN_WARNING "%s %s: BIOS handoff " |
| 194 | "failed (BIOS bug ?)\n", | 194 | "failed (BIOS bug ?) %08x\n", |
| 195 | pdev->dev.bus_id, "OHCI"); | 195 | pdev->dev.bus_id, "OHCI", |
| 196 | readl(base + OHCI_CONTROL)); | ||
| 196 | 197 | ||
| 197 | /* reset controller, preserving RWC */ | 198 | /* reset controller, preserving RWC */ |
| 198 | writel(control & OHCI_CTRL_RWC, base + OHCI_CONTROL); | 199 | writel(control & OHCI_CTRL_RWC, base + OHCI_CONTROL); |
| @@ -243,6 +244,12 @@ static void __devinit quirk_usb_disable_ehci(struct pci_dev *pdev) | |||
| 243 | pr_debug("%s %s: BIOS handoff\n", | 244 | pr_debug("%s %s: BIOS handoff\n", |
| 244 | pdev->dev.bus_id, "EHCI"); | 245 | pdev->dev.bus_id, "EHCI"); |
| 245 | 246 | ||
| 247 | #if 0 | ||
| 248 | /* aleksey_gorelov@phoenix.com reports that some systems need SMI forced on, | ||
| 249 | * but that seems dubious in general (the BIOS left it off intentionally) | ||
| 250 | * and is known to prevent some systems from booting. so we won't do this | ||
| 251 | * unless maybe we can determine when we're on a system that needs SMI forced. | ||
| 252 | */ | ||
| 246 | /* BIOS workaround (?): be sure the | 253 | /* BIOS workaround (?): be sure the |
| 247 | * pre-Linux code receives the SMI | 254 | * pre-Linux code receives the SMI |
| 248 | */ | 255 | */ |
| @@ -252,12 +259,14 @@ static void __devinit quirk_usb_disable_ehci(struct pci_dev *pdev) | |||
| 252 | pci_write_config_dword(pdev, | 259 | pci_write_config_dword(pdev, |
| 253 | offset + EHCI_USBLEGCTLSTS, | 260 | offset + EHCI_USBLEGCTLSTS, |
| 254 | val | EHCI_USBLEGCTLSTS_SOOE); | 261 | val | EHCI_USBLEGCTLSTS_SOOE); |
| 255 | } | 262 | #endif |
| 256 | 263 | ||
| 257 | /* always say Linux will own the hardware | 264 | /* some systems get upset if this semaphore is |
| 258 | * by setting EHCI_USBLEGSUP_OS. | 265 | * set for any other reason than forcing a BIOS |
| 259 | */ | 266 | * handoff.. |
| 260 | pci_write_config_byte(pdev, offset + 3, 1); | 267 | */ |
| 268 | pci_write_config_byte(pdev, offset + 3, 1); | ||
| 269 | } | ||
| 261 | 270 | ||
| 262 | /* if boot firmware now owns EHCI, spin till | 271 | /* if boot firmware now owns EHCI, spin till |
| 263 | * it hands it over. | 272 | * it hands it over. |
| @@ -274,8 +283,8 @@ static void __devinit quirk_usb_disable_ehci(struct pci_dev *pdev) | |||
| 274 | * it down, and hope nothing goes too wrong | 283 | * it down, and hope nothing goes too wrong |
| 275 | */ | 284 | */ |
| 276 | printk(KERN_WARNING "%s %s: BIOS handoff " | 285 | printk(KERN_WARNING "%s %s: BIOS handoff " |
| 277 | "failed (BIOS bug ?)\n", | 286 | "failed (BIOS bug ?) %08x\n", |
| 278 | pdev->dev.bus_id, "EHCI"); | 287 | pdev->dev.bus_id, "EHCI", cap); |
| 279 | pci_write_config_byte(pdev, offset + 2, 0); | 288 | pci_write_config_byte(pdev, offset + 2, 0); |
| 280 | } | 289 | } |
| 281 | 290 | ||
