diff options
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r-- | drivers/pci/quirks.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 90acb32c85b1..ed6f89b6efe5 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -379,6 +379,26 @@ static void quirk_ati_exploding_mce(struct pci_dev *dev) | |||
379 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS100, quirk_ati_exploding_mce); | 379 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS100, quirk_ati_exploding_mce); |
380 | 380 | ||
381 | /* | 381 | /* |
382 | * In the AMD NL platform, this device ([1022:7912]) has a class code of | ||
383 | * PCI_CLASS_SERIAL_USB_XHCI (0x0c0330), which means the xhci driver will | ||
384 | * claim it. | ||
385 | * But the dwc3 driver is a more specific driver for this device, and we'd | ||
386 | * prefer to use it instead of xhci. To prevent xhci from claiming the | ||
387 | * device, change the class code to 0x0c03fe, which the PCI r3.0 spec | ||
388 | * defines as "USB device (not host controller)". The dwc3 driver can then | ||
389 | * claim it based on its Vendor and Device ID. | ||
390 | */ | ||
391 | static void quirk_amd_nl_class(struct pci_dev *pdev) | ||
392 | { | ||
393 | /* | ||
394 | * Use 'USB Device' (0x0c03fe) instead of PCI header provided | ||
395 | */ | ||
396 | pdev->class = 0x0c03fe; | ||
397 | } | ||
398 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB, | ||
399 | quirk_amd_nl_class); | ||
400 | |||
401 | /* | ||
382 | * Let's make the southbridge information explicit instead | 402 | * Let's make the southbridge information explicit instead |
383 | * of having to worry about people probing the ACPI areas, | 403 | * of having to worry about people probing the ACPI areas, |
384 | * for example.. (Yes, it happens, and if you read the wrong | 404 | * for example.. (Yes, it happens, and if you read the wrong |