usb:xhci:Fix regression when ATI chipsets detected
authorSandeep Singh <sandeep.singh@amd.com>
Thu, 24 Aug 2017 04:27:15 +0000 (09:57 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Aug 2017 09:43:39 +0000 (11:43 +0200)
The following commit cause a regression on ATI chipsets.
'commit e788787ef4f9 ("usb:xhci:Add quirk for Certain
failing HP keyboard on reset after resume")'

This causes pinfo->smbus_dev to be wrongly set to NULL on
systems with the ATI chipset that this function checks for first.

Added conditional check for AMD chipsets to avoid the overwriting
pinfo->smbus_dev.

Reported-by: Ben Hutchings <ben@decadent.org.uk>
Fixes: e788787ef4f9 ("usb:xhci:Add quirk for Certain
failing HP keyboard on reset after resume")
cc: Nehal Shah <Nehal-bakulchandra.Shah@amd.com>
cc: <stable@vger.kernel.org>
Signed-off-by: Sandeep Singh <Sandeep.Singh@amd.com>
Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/pci-quirks.c

index c8f3864..658d9d1 100644 (file)
@@ -142,29 +142,30 @@ static int amd_chipset_sb_type_init(struct amd_chipset_info *pinfo)
                        pinfo->sb_type.gen = AMD_CHIPSET_SB700;
                else if (rev >= 0x40 && rev <= 0x4f)
                        pinfo->sb_type.gen = AMD_CHIPSET_SB800;
-       }
-       pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
-                                         0x145c, NULL);
-       if (pinfo->smbus_dev) {
-               pinfo->sb_type.gen = AMD_CHIPSET_TAISHAN;
        } else {
                pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
                                PCI_DEVICE_ID_AMD_HUDSON2_SMBUS, NULL);
 
-               if (!pinfo->smbus_dev) {
-                       pinfo->sb_type.gen = NOT_AMD_CHIPSET;
-                       return 0;
+               if (pinfo->smbus_dev) {
+                       rev = pinfo->smbus_dev->revision;
+                       if (rev >= 0x11 && rev <= 0x14)
+                               pinfo->sb_type.gen = AMD_CHIPSET_HUDSON2;
+                       else if (rev >= 0x15 && rev <= 0x18)
+                               pinfo->sb_type.gen = AMD_CHIPSET_BOLTON;
+                       else if (rev >= 0x39 && rev <= 0x3a)
+                               pinfo->sb_type.gen = AMD_CHIPSET_YANGTZE;
+               } else {
+                       pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
+                                                         0x145c, NULL);
+                       if (pinfo->smbus_dev) {
+                               rev = pinfo->smbus_dev->revision;
+                               pinfo->sb_type.gen = AMD_CHIPSET_TAISHAN;
+                       } else {
+                               pinfo->sb_type.gen = NOT_AMD_CHIPSET;
+                               return 0;
+                       }
                }
-
-               rev = pinfo->smbus_dev->revision;
-               if (rev >= 0x11 && rev <= 0x14)
-                       pinfo->sb_type.gen = AMD_CHIPSET_HUDSON2;
-               else if (rev >= 0x15 && rev <= 0x18)
-                       pinfo->sb_type.gen = AMD_CHIPSET_BOLTON;
-               else if (rev >= 0x39 && rev <= 0x3a)
-                       pinfo->sb_type.gen = AMD_CHIPSET_YANGTZE;
        }
-
        pinfo->sb_type.rev = rev;
        return 1;
 }