mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
usb: pci-quirks: disable D3cold on xhci suspend for s2idle on AMD Renoir
The XHCI controller is required to enter D3hot rather than D3cold for AMD s2idle on this hardware generation. Otherwise, the 'Controller Not Ready' (CNR) bit is not being cleared by host in resume and eventually this results in xhci resume failures during the s2idle wakeup. Link: https://lore.kernel.org/linux-usb/1612527609-7053-1-git-send-email-Prike.Liang@amd.com/ Suggested-by: Prike Liang <Prike.Liang@amd.com> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Cc: stable <stable@vger.kernel.org> # 5.11+ Link: https://lore.kernel.org/r/20210527154534.8900-1-mario.limonciello@amd.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
1958ff5ad2
commit
d1658268e4
2 changed files with 7 additions and 1 deletions
|
@ -59,6 +59,7 @@
|
||||||
#define PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI 0x1138
|
#define PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI 0x1138
|
||||||
#define PCI_DEVICE_ID_INTEL_ALDER_LAKE_XHCI 0x461e
|
#define PCI_DEVICE_ID_INTEL_ALDER_LAKE_XHCI 0x461e
|
||||||
|
|
||||||
|
#define PCI_DEVICE_ID_AMD_RENOIR_XHCI 0x1639
|
||||||
#define PCI_DEVICE_ID_AMD_PROMONTORYA_4 0x43b9
|
#define PCI_DEVICE_ID_AMD_PROMONTORYA_4 0x43b9
|
||||||
#define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba
|
#define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba
|
||||||
#define PCI_DEVICE_ID_AMD_PROMONTORYA_2 0x43bb
|
#define PCI_DEVICE_ID_AMD_PROMONTORYA_2 0x43bb
|
||||||
|
@ -182,6 +183,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
||||||
(pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_1)))
|
(pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_1)))
|
||||||
xhci->quirks |= XHCI_U2_DISABLE_WAKE;
|
xhci->quirks |= XHCI_U2_DISABLE_WAKE;
|
||||||
|
|
||||||
|
if (pdev->vendor == PCI_VENDOR_ID_AMD &&
|
||||||
|
pdev->device == PCI_DEVICE_ID_AMD_RENOIR_XHCI)
|
||||||
|
xhci->quirks |= XHCI_BROKEN_D3COLD;
|
||||||
|
|
||||||
if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
|
if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
|
||||||
xhci->quirks |= XHCI_LPM_SUPPORT;
|
xhci->quirks |= XHCI_LPM_SUPPORT;
|
||||||
xhci->quirks |= XHCI_INTEL_HOST;
|
xhci->quirks |= XHCI_INTEL_HOST;
|
||||||
|
@ -539,7 +544,7 @@ static int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup)
|
||||||
* Systems with the TI redriver that loses port status change events
|
* Systems with the TI redriver that loses port status change events
|
||||||
* need to have the registers polled during D3, so avoid D3cold.
|
* need to have the registers polled during D3, so avoid D3cold.
|
||||||
*/
|
*/
|
||||||
if (xhci->quirks & XHCI_COMP_MODE_QUIRK)
|
if (xhci->quirks & (XHCI_COMP_MODE_QUIRK | XHCI_BROKEN_D3COLD))
|
||||||
pci_d3cold_disable(pdev);
|
pci_d3cold_disable(pdev);
|
||||||
|
|
||||||
if (xhci->quirks & XHCI_PME_STUCK_QUIRK)
|
if (xhci->quirks & XHCI_PME_STUCK_QUIRK)
|
||||||
|
|
|
@ -1892,6 +1892,7 @@ struct xhci_hcd {
|
||||||
#define XHCI_DISABLE_SPARSE BIT_ULL(38)
|
#define XHCI_DISABLE_SPARSE BIT_ULL(38)
|
||||||
#define XHCI_SG_TRB_CACHE_SIZE_QUIRK BIT_ULL(39)
|
#define XHCI_SG_TRB_CACHE_SIZE_QUIRK BIT_ULL(39)
|
||||||
#define XHCI_NO_SOFT_RETRY BIT_ULL(40)
|
#define XHCI_NO_SOFT_RETRY BIT_ULL(40)
|
||||||
|
#define XHCI_BROKEN_D3COLD BIT_ULL(41)
|
||||||
|
|
||||||
unsigned int num_active_eps;
|
unsigned int num_active_eps;
|
||||||
unsigned int limit_active_eps;
|
unsigned int limit_active_eps;
|
||||||
|
|
Loading…
Reference in a new issue