diff mbox series

[v2] usb: Fix problem with xhci resume from suspend

Message ID 20240919184202.22249-1-jose.alberto.reguero@gmail.com (mailing list archive)
State Accepted
Commit d44238d8254a36249d576c96473269dbe500f5e4
Headers show
Series [v2] usb: Fix problem with xhci resume from suspend | expand

Commit Message

Jose Alberto Reguero Sept. 19, 2024, 6:42 p.m. UTC
I have a ASUS PN51 S mini pc that has two xhci devices. One from AMD, and other
from ASMEDIA. The one from ASMEDIA have problems when resume from suspend, and
keep broken until unplug the  power cord. I use this kernel parameter:
xhci-hcd.quirks=128 and then it works ok. I make a path to reset only the
ASMEDIA xhci. 


Signed-off-by: Jose Alberto Reguero <jose.alberto.reguero@gmail.com>

---
 drivers/usb/host/xhci-pci.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Sergey Shtylyov Sept. 19, 2024, 7:18 p.m. UTC | #1
On 9/19/24 21:42, Jose Alberto Reguero wrote:

> I have a ASUS PN51 S mini pc that has two xhci devices. One from AMD, and other
> from ASMEDIA. The one from ASMEDIA have problems when resume from suspend, and
> keep broken until unplug the  power cord. I use this kernel parameter:
> xhci-hcd.quirks=128 and then it works ok. I make a path to reset only the
> ASMEDIA xhci. 
> 
> 
> Signed-off-by: Jose Alberto Reguero <jose.alberto.reguero@gmail.com>
> 
> ---
>  drivers/usb/host/xhci-pci.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
> index dc1e345ab67e..8f075ab63f65 100644
> --- a/drivers/usb/host/xhci-pci.c
> +++ b/drivers/usb/host/xhci-pci.c
[...]
> @@ -447,6 +448,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
>  		pdev->device == PCI_DEVICE_ID_ASMEDIA_1042A_XHCI)
>  		xhci->quirks |= XHCI_ASMEDIA_MODIFY_FLOWCONTROL;
>  
> +	if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
> +		pdev->device == PCI_DEVICE_ID_ASMEDIA_3042_XHCI)

   Hum, please either add 1 more tab here or start the continuation line
under pdev jn the broken up line. The *if* expression should not blend with
code in the branch.

> +		xhci->quirks |= XHCI_RESET_ON_RESUME;
> +
>  	if (pdev->vendor == PCI_VENDOR_ID_TI && pdev->device == 0x8241)
>  		xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_7;

MBR, Sergey
Sergey Shtylyov Sept. 19, 2024, 7:22 p.m. UTC | #2
The subject doesn't look well yet, consider s/th like:

usb: host: xhci-pci: fix problem with resuming from suspend

MBR, Sergey
Jose Alberto Reguero Sept. 23, 2024, 9:39 p.m. UTC | #3
El 19/09/2024 a las 21:18, Sergey Shtylyov escribió:
> On 9/19/24 21:42, Jose Alberto Reguero wrote:
>
>> I have a ASUS PN51 S mini pc that has two xhci devices. One from AMD, and other
>> from ASMEDIA. The one from ASMEDIA have problems when resume from suspend, and
>> keep broken until unplug the  power cord. I use this kernel parameter:
>> xhci-hcd.quirks=128 and then it works ok. I make a path to reset only the
>> ASMEDIA xhci.
>>
>>
>> Signed-off-by: Jose Alberto Reguero <jose.alberto.reguero@gmail.com>
>>
>> ---
>>   drivers/usb/host/xhci-pci.c | 5 +++++
>>   1 file changed, 5 insertions(+)
>>
>> diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
>> index dc1e345ab67e..8f075ab63f65 100644
>> --- a/drivers/usb/host/xhci-pci.c
>> +++ b/drivers/usb/host/xhci-pci.c
> [...]
>> @@ -447,6 +448,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
>>   		pdev->device == PCI_DEVICE_ID_ASMEDIA_1042A_XHCI)
>>   		xhci->quirks |= XHCI_ASMEDIA_MODIFY_FLOWCONTROL;
>>   
>> +	if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
>> +		pdev->device == PCI_DEVICE_ID_ASMEDIA_3042_XHCI)
>     Hum, please either add 1 more tab here or start the continuation line
> under pdev jn the broken up line. The *if* expression should not blend with
> code in the branch.

I do in the next version.

Thanks for reviewing.

>> +		xhci->quirks |= XHCI_RESET_ON_RESUME;
>> +
>>   	if (pdev->vendor == PCI_VENDOR_ID_TI && pdev->device == 0x8241)
>>   		xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_7;
> MBR, Sergey
Jose Alberto Reguero
Jose Alberto Reguero Sept. 23, 2024, 9:43 p.m. UTC | #4
El 19/09/2024 a las 21:22, Sergey Shtylyov escribió:
> The subject doesn't look well yet, consider s/th like:
>
> usb: host: xhci-pci: fix problem with resuming from suspend
>
> MBR, Sergey

I look at it in the next version.

Thanks for reviewing.

Jose Alberto Reguero
Greg KH Oct. 4, 2024, 1:40 p.m. UTC | #5
On Mon, Sep 23, 2024 at 11:39:23PM +0200, Jose Alberto Reguero wrote:
> 
> El 19/09/2024 a las 21:18, Sergey Shtylyov escribió:
> > On 9/19/24 21:42, Jose Alberto Reguero wrote:
> > 
> > > I have a ASUS PN51 S mini pc that has two xhci devices. One from AMD, and other
> > > from ASMEDIA. The one from ASMEDIA have problems when resume from suspend, and
> > > keep broken until unplug the  power cord. I use this kernel parameter:
> > > xhci-hcd.quirks=128 and then it works ok. I make a path to reset only the
> > > ASMEDIA xhci.
> > > 
> > > 
> > > Signed-off-by: Jose Alberto Reguero <jose.alberto.reguero@gmail.com>
> > > 
> > > ---
> > >   drivers/usb/host/xhci-pci.c | 5 +++++
> > >   1 file changed, 5 insertions(+)
> > > 
> > > diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
> > > index dc1e345ab67e..8f075ab63f65 100644
> > > --- a/drivers/usb/host/xhci-pci.c
> > > +++ b/drivers/usb/host/xhci-pci.c
> > [...]
> > > @@ -447,6 +448,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
> > >   		pdev->device == PCI_DEVICE_ID_ASMEDIA_1042A_XHCI)
> > >   		xhci->quirks |= XHCI_ASMEDIA_MODIFY_FLOWCONTROL;
> > > +	if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
> > > +		pdev->device == PCI_DEVICE_ID_ASMEDIA_3042_XHCI)
> >     Hum, please either add 1 more tab here or start the continuation line
> > under pdev jn the broken up line. The *if* expression should not blend with
> > code in the branch.
> 
> I do in the next version.

No need, I fixed this up already and applied it, thanks.

greg k-h
diff mbox series

Patch

diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index dc1e345ab67e..8f075ab63f65 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -76,6 +76,7 @@ 
 #define PCI_DEVICE_ID_ASMEDIA_1042A_XHCI		0x1142
 #define PCI_DEVICE_ID_ASMEDIA_1142_XHCI			0x1242
 #define PCI_DEVICE_ID_ASMEDIA_2142_XHCI			0x2142
+#define PCI_DEVICE_ID_ASMEDIA_3042_XHCI			0x3042
 #define PCI_DEVICE_ID_ASMEDIA_3242_XHCI			0x3242
 
 static const char hcd_name[] = "xhci_hcd";
@@ -447,6 +448,10 @@  static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
 		pdev->device == PCI_DEVICE_ID_ASMEDIA_1042A_XHCI)
 		xhci->quirks |= XHCI_ASMEDIA_MODIFY_FLOWCONTROL;
 
+	if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
+		pdev->device == PCI_DEVICE_ID_ASMEDIA_3042_XHCI)
+		xhci->quirks |= XHCI_RESET_ON_RESUME;
+
 	if (pdev->vendor == PCI_VENDOR_ID_TI && pdev->device == 0x8241)
 		xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_7;