xhci: Add reset on resume quirk for asrock p67 host
Subsystems (2)
PATCH v2 1/1 xhci: Add reset on resume quirk for asrock p67 host
The asrock p67 xhci controller completely dies on resume, add a quirk for this, to bring the host back online after a suspend.
This should be backported to stable kernels up until 2.6.37.
---
V2: Fix inversed logic, and correct kernel version
drivers/usb/host/xhci-pci.c +8 -0
@@ -29,6 +29,9 @@#define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73#define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 +#define PCI_VENDOR_ID_ETRON 0x1b6f +#define PCI_DEVICE_ID_ASROCK_P67 0x7023 +static const char hcd_name[] ="xhci_hcd" ;/* called after powerup, by probe or system-pm "wakeup" */
@@ -134,6 +137,11 @@ static int xhci_pci_setup(struct usb_hcd *hcd) xhci->quirks |=XHCI_EP_LIMIT_QUIRK ; xhci->limit_active_eps =64 ; } +if (pdev->vendor ==PCI_VENDOR_ID_ETRON && + pdev->device ==PCI_DEVICE_ID_ASROCK_P67 ) { + xhci->quirks |=XHCI_RESET_ON_RESUME ; +xhci_dbg (xhci,"QUIRK: Resetting on resume\n" ); + }/* Make sure the HC is halted. */ retval =xhci_halt (xhci);
drivers/usb/host/xhci.c +2 -0
@@ -759,6 +759,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)msleep (100 );spin_lock_irq (&xhci->lock); +if (xhci->quirks &XHCI_RESET_ON_RESUME ) + hibernated = true;if (!hibernated) {/* step 1: restore register */
drivers/usb/host/xhci.h +1 -0
@@ -1308,6 +1308,7 @@ struct xhci_hcd {*/ #define XHCI_EP_LIMIT_QUIRK (1 << 5)#define XHCI_BROKEN_MSI (1 << 6) +#define XHCI_RESET_ON_RESUME (1 << 7)unsigned int num_active_eps;unsigned int limit_active_eps;/* There are two roothubs to keep track of bus suspend info for */
drivers/usb/host/xhci-pci.c +8 -0
@@ -29,6 +29,9 @@#define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73#define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 +#define PCI_VENDOR_ID_ETRON 0x1b6f +#define PCI_DEVICE_ID_ASROCK_P67 0x7023 +static const char hcd_name[] ="xhci_hcd" ;/* called after powerup, by probe or system-pm "wakeup" */
@@ -134,6 +137,11 @@ static int xhci_pci_setup(struct usb_hcd *hcd) xhci->quirks |=XHCI_EP_LIMIT_QUIRK ; xhci->limit_active_eps =64 ; } +if (pdev->vendor ==PCI_VENDOR_ID_ETRON && + pdev->device ==PCI_DEVICE_ID_ASROCK_P67 ) { + xhci->quirks |=XHCI_RESET_ON_RESUME ; +xhci_dbg (xhci,"QUIRK: Resetting on resume\n" ); + }/* Make sure the HC is halted. */ retval =xhci_halt (xhci);
drivers/usb/host/xhci.c +2 -0
@@ -759,6 +759,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)msleep (100 );spin_lock_irq (&xhci->lock); +if (xhci->quirks &XHCI_RESET_ON_RESUME ) + hibernated = true;if (!hibernated) {/* step 1: restore register */
drivers/usb/host/xhci.h +1 -0
@@ -1308,6 +1308,7 @@ struct xhci_hcd {*/ #define XHCI_EP_LIMIT_QUIRK (1 << 5)#define XHCI_BROKEN_MSI (1 << 6) +#define XHCI_RESET_ON_RESUME (1 << 7)unsigned int num_active_eps;unsigned int limit_active_eps;/* There are two roothubs to keep track of bus suspend info for */
No attached patches, just inline ones please. :) I've fixed this up for now, since your first patch was inline.
Sarah Sharp
Quoted 63 lines · Maarten Lankhorst
The asrock p67 xhci controller completely dies on resume, add a quirk for this, to bring the host back online after a suspend.
This should be backported to stable kernels up until 2.6.37.
Signed-off-by Maarten Lankhorst <[email protected]>---
V2: Fix inversed logic, and correct kernel versiondrivers/usb/host/xhci-pci.c +8
-0@@ -29,6 +29,9 @@#define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73#define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 +#define PCI_VENDOR_ID_ETRON 0x1b6f +#define PCI_DEVICE_ID_ASROCK_P67 0x7023 +static const char hcd_name[] ="xhci_hcd" ;/* called after powerup, by probe or system-pm "wakeup" */ @@ -134,6 +137,11 @@ static int xhci_pci_setup(struct usb_hcd *hcd) xhci->quirks |=XHCI_EP_LIMIT_QUIRK ; xhci->limit_active_eps =64 ; } +if (pdev->vendor ==PCI_VENDOR_ID_ETRON && + pdev->device ==PCI_DEVICE_ID_ASROCK_P67 ) { + xhci->quirks |=XHCI_RESET_ON_RESUME ; +xhci_dbg (xhci,"QUIRK: Resetting on resume\n" ); + }/* Make sure the HC is halted. */ retval =xhci_halt (xhci);drivers/usb/host/xhci.c +2
-0@@ -759,6 +759,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)msleep (100 );spin_lock_irq (&xhci->lock); +if (xhci->quirks &XHCI_RESET_ON_RESUME ) + hibernated = true;if (!hibernated) {/* step 1: restore register */ drivers/usb/host/xhci.h +1
-0@@ -1308,6 +1308,7 @@ struct xhci_hcd {*/ #define XHCI_EP_LIMIT_QUIRK (1 << 5)#define XHCI_BROKEN_MSI (1 << 6) +#define XHCI_RESET_ON_RESUME (1 << 7)unsigned int num_active_eps;unsigned int limit_active_eps;/* There are two roothubs to keep track of bus suspend info for */
Hi Sarah,
Op 16-06-11 00:43, Sarah Sharp schreef:
Quoted 2 lines
No attached patches, just inline ones please. :) I've fixed this up for now, since your first patch was inline.
Actually, it seems I did it both ways by accident. Testing patch -Np1 with that message still worked. Sorry about that. Sent it right before falling asleep.
~Maarten