diff mbox series

PCI: Prevent xHCI driver from claiming AMD VanGogh USB3 DRD device

Message ID 20230927202212.2388216-1-vi@endrift.com (mailing list archive)
State Accepted
Headers show
Series PCI: Prevent xHCI driver from claiming AMD VanGogh USB3 DRD device | expand

Commit Message

Vicki Pfau Sept. 27, 2023, 8:22 p.m. UTC
The AMD VanGogh SoC contains a DesignWare USB3 Dual-Role Device that can be
operated as either a USB Host or a USB Device, similar to on the AMD Nolan
platform. A quirk was previously added to let the dwc3 driver claim the device
since it provides more specific support. This commit extends that quirk to
include the equivalent PID for the VanGogh SoC.

Signed-off-by: Vicki Pfau <vi@endrift.com>
---
 drivers/pci/quirks.c    | 8 +++++---
 include/linux/pci_ids.h | 1 +
 2 files changed, 6 insertions(+), 3 deletions(-)

Comments

Bjorn Helgaas Sept. 28, 2023, 5:17 p.m. UTC | #1
On Wed, Sep 27, 2023 at 01:22:12PM -0700, Vicki Pfau wrote:
> The AMD VanGogh SoC contains a DesignWare USB3 Dual-Role Device that can be
> operated as either a USB Host or a USB Device, similar to on the AMD Nolan
> platform. A quirk was previously added to let the dwc3 driver claim the device
> since it provides more specific support. This commit extends that quirk to
> include the equivalent PID for the VanGogh SoC.
> 
> Signed-off-by: Vicki Pfau <vi@endrift.com>

Applied to misc for v6.7, thanks!

> ---
>  drivers/pci/quirks.c    | 8 +++++---
>  include/linux/pci_ids.h | 1 +
>  2 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index eeec1d6f9023..e3e915329510 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -690,7 +690,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI,	PCI_DEVICE_ID_ATI_RS100,   quirk_ati_
>  /*
>   * In the AMD NL platform, this device ([1022:7912]) has a class code of
>   * PCI_CLASS_SERIAL_USB_XHCI (0x0c0330), which means the xhci driver will
> - * claim it.
> + * claim it. The same applies on the VanGogh platform device ([1022:163a]).
>   *
>   * But the dwc3 driver is a more specific driver for this device, and we'd
>   * prefer to use it instead of xhci. To prevent xhci from claiming the
> @@ -698,7 +698,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI,	PCI_DEVICE_ID_ATI_RS100,   quirk_ati_
>   * defines as "USB device (not host controller)". The dwc3 driver can then
>   * claim it based on its Vendor and Device ID.
>   */
> -static void quirk_amd_nl_class(struct pci_dev *pdev)
> +static void quirk_amd_dwc_class(struct pci_dev *pdev)
>  {
>  	u32 class = pdev->class;
>  
> @@ -708,7 +708,9 @@ static void quirk_amd_nl_class(struct pci_dev *pdev)
>  		 class, pdev->class);
>  }
>  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB,
> -		quirk_amd_nl_class);
> +		quirk_amd_dwc_class);
> +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VANGOGH_USB,
> +		quirk_amd_dwc_class);
>  
>  /*
>   * Synopsys USB 3.x host HAPS platform has a class code of
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index 5fb3d4c393a9..3a8e24e9a93f 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -579,6 +579,7 @@
>  #define PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3 0x12c3
>  #define PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3 0x16fb
>  #define PCI_DEVICE_ID_AMD_MI200_DF_F3	0x14d3
> +#define PCI_DEVICE_ID_AMD_VANGOGH_USB	0x163a
>  #define PCI_DEVICE_ID_AMD_CNB17H_F3	0x1703
>  #define PCI_DEVICE_ID_AMD_LANCE		0x2000
>  #define PCI_DEVICE_ID_AMD_LANCE_HOME	0x2001
> -- 
> 2.42.0
>
Bjorn Helgaas Oct. 5, 2023, 4:12 p.m. UTC | #2
On Thu, Sep 28, 2023 at 12:17:38PM -0500, Bjorn Helgaas wrote:
> On Wed, Sep 27, 2023 at 01:22:12PM -0700, Vicki Pfau wrote:
> > The AMD VanGogh SoC contains a DesignWare USB3 Dual-Role Device that can be
> > operated as either a USB Host or a USB Device, similar to on the AMD Nolan
> > platform. A quirk was previously added to let the dwc3 driver claim the device
> > since it provides more specific support. This commit extends that quirk to
> > include the equivalent PID for the VanGogh SoC.
> > 
> > Signed-off-by: Vicki Pfau <vi@endrift.com>
> 
> Applied to misc for v6.7, thanks!

This seems like stable material, so I added a stable tag for v3.19+
since be6646bfbaec ("PCI: Prevent xHCI driver from claiming AMD Nolan
USB3 DRD device") appeared in v3.19.

> > ---
> >  drivers/pci/quirks.c    | 8 +++++---
> >  include/linux/pci_ids.h | 1 +
> >  2 files changed, 6 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> > index eeec1d6f9023..e3e915329510 100644
> > --- a/drivers/pci/quirks.c
> > +++ b/drivers/pci/quirks.c
> > @@ -690,7 +690,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI,	PCI_DEVICE_ID_ATI_RS100,   quirk_ati_
> >  /*
> >   * In the AMD NL platform, this device ([1022:7912]) has a class code of
> >   * PCI_CLASS_SERIAL_USB_XHCI (0x0c0330), which means the xhci driver will
> > - * claim it.
> > + * claim it. The same applies on the VanGogh platform device ([1022:163a]).
> >   *
> >   * But the dwc3 driver is a more specific driver for this device, and we'd
> >   * prefer to use it instead of xhci. To prevent xhci from claiming the
> > @@ -698,7 +698,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI,	PCI_DEVICE_ID_ATI_RS100,   quirk_ati_
> >   * defines as "USB device (not host controller)". The dwc3 driver can then
> >   * claim it based on its Vendor and Device ID.
> >   */
> > -static void quirk_amd_nl_class(struct pci_dev *pdev)
> > +static void quirk_amd_dwc_class(struct pci_dev *pdev)
> >  {
> >  	u32 class = pdev->class;
> >  
> > @@ -708,7 +708,9 @@ static void quirk_amd_nl_class(struct pci_dev *pdev)
> >  		 class, pdev->class);
> >  }
> >  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB,
> > -		quirk_amd_nl_class);
> > +		quirk_amd_dwc_class);
> > +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VANGOGH_USB,
> > +		quirk_amd_dwc_class);
> >  
> >  /*
> >   * Synopsys USB 3.x host HAPS platform has a class code of
> > diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> > index 5fb3d4c393a9..3a8e24e9a93f 100644
> > --- a/include/linux/pci_ids.h
> > +++ b/include/linux/pci_ids.h
> > @@ -579,6 +579,7 @@
> >  #define PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3 0x12c3
> >  #define PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3 0x16fb
> >  #define PCI_DEVICE_ID_AMD_MI200_DF_F3	0x14d3
> > +#define PCI_DEVICE_ID_AMD_VANGOGH_USB	0x163a
> >  #define PCI_DEVICE_ID_AMD_CNB17H_F3	0x1703
> >  #define PCI_DEVICE_ID_AMD_LANCE		0x2000
> >  #define PCI_DEVICE_ID_AMD_LANCE_HOME	0x2001
> > -- 
> > 2.42.0
> >
diff mbox series

Patch

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index eeec1d6f9023..e3e915329510 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -690,7 +690,7 @@  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI,	PCI_DEVICE_ID_ATI_RS100,   quirk_ati_
 /*
  * In the AMD NL platform, this device ([1022:7912]) has a class code of
  * PCI_CLASS_SERIAL_USB_XHCI (0x0c0330), which means the xhci driver will
- * claim it.
+ * claim it. The same applies on the VanGogh platform device ([1022:163a]).
  *
  * But the dwc3 driver is a more specific driver for this device, and we'd
  * prefer to use it instead of xhci. To prevent xhci from claiming the
@@ -698,7 +698,7 @@  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI,	PCI_DEVICE_ID_ATI_RS100,   quirk_ati_
  * defines as "USB device (not host controller)". The dwc3 driver can then
  * claim it based on its Vendor and Device ID.
  */
-static void quirk_amd_nl_class(struct pci_dev *pdev)
+static void quirk_amd_dwc_class(struct pci_dev *pdev)
 {
 	u32 class = pdev->class;
 
@@ -708,7 +708,9 @@  static void quirk_amd_nl_class(struct pci_dev *pdev)
 		 class, pdev->class);
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB,
-		quirk_amd_nl_class);
+		quirk_amd_dwc_class);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VANGOGH_USB,
+		quirk_amd_dwc_class);
 
 /*
  * Synopsys USB 3.x host HAPS platform has a class code of
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 5fb3d4c393a9..3a8e24e9a93f 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -579,6 +579,7 @@ 
 #define PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3 0x12c3
 #define PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3 0x16fb
 #define PCI_DEVICE_ID_AMD_MI200_DF_F3	0x14d3
+#define PCI_DEVICE_ID_AMD_VANGOGH_USB	0x163a
 #define PCI_DEVICE_ID_AMD_CNB17H_F3	0x1703
 #define PCI_DEVICE_ID_AMD_LANCE		0x2000
 #define PCI_DEVICE_ID_AMD_LANCE_HOME	0x2001