| From e6b422b88b46353cf596e0db6dc0e39d50d90d6e Mon Sep 17 00:00:00 2001 |
| From: Sandeep Singh <sandeep.singh@amd.com> |
| Date: Thu, 24 Aug 2017 09:57:15 +0530 |
| Subject: usb:xhci:Fix regression when ATI chipsets detected |
| |
| From: Sandeep Singh <sandeep.singh@amd.com> |
| |
| commit e6b422b88b46353cf596e0db6dc0e39d50d90d6e upstream. |
| |
| 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> |
| 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 | 35 ++++++++++++++++++----------------- |
| 1 file changed, 18 insertions(+), 17 deletions(-) |
| |
| --- a/drivers/usb/host/pci-quirks.c |
| +++ b/drivers/usb/host/pci-quirks.c |
| @@ -142,29 +142,30 @@ static int amd_chipset_sb_type_init(stru |
| 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; |
| } |