Re: [PATCH v2] usb: xhci: Restore xhci_pci support for Renesas HCs

nb
2025-02-03T18:21:56Z

On 28.1.2025 10:45, Michal Pecio wrote:
> Some Renesas HCs require firmware upload to work, this is handled by
> the
> xhci_pci_renesas driver. Other variants of those chips load firmware
> from
> a SPI flash and are ready to work with xhci_pci alone.
>
> A refactor merged in v6.12 broke the latter configuration so that users
> are finding their hardware ignored by the normal driver and are forced
> to
> enable the firmware loader which isn't really necessary on their
> systems.
>
> Let xhci_pci work with those chips as before when the firmware loader
> is
> disabled by kernel configuration.
>
> Fixes: 25f51b76f90f ("xhci-pci: Make xhci-pci-renesas a proper modular
> driver")
> CC: stable@vger.kernel.org
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219616
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219726
> Signed-off-by: Michal Pecio <michal.pecio@gmail.com>

Can confirm that this patch restores the old behavior, where xhci-pci
supported the Renesas controllers when an external SPI flash is
attached. I've tested with a PCIe extension card on arm64 and x86 as
well as with a arm64 (Raspberry CM4) based Revolution Pi Connect 4.

Tested-by: Nicolai Buchwitz <nb@tipi-net.de>

Thanks!

Nicolai

> ---
>
> new in v2:
> - changed #ifdef CONFIG_XXX to if (IS_ENABLED(CONFIG_XXX))
> - renamed the PCI IDs table to clarify code intent
> - small commit message improvements
>
> drivers/usb/host/xhci-pci.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
> index 5a5f0b2dba4d..54460d11f7ee 100644
> --- a/drivers/usb/host/xhci-pci.c
> +++ b/drivers/usb/host/xhci-pci.c
> @@ -657,8 +657,8 @@ int xhci_pci_common_probe(struct pci_dev *dev,
> const struct pci_device_id *id)
> }
> EXPORT_SYMBOL_NS_GPL(xhci_pci_common_probe, "xhci");
>
> -static const struct pci_device_id pci_ids_reject[] = {
> - /* handled by xhci-pci-renesas */
> +/* handled by xhci-pci-renesas if enabled */
> +static const struct pci_device_id pci_ids_renesas[] = {
> { PCI_DEVICE(PCI_VENDOR_ID_RENESAS, 0x0014) },
> { PCI_DEVICE(PCI_VENDOR_ID_RENESAS, 0x0015) },
> { /* end: all zeroes */ }
> @@ -666,7 +666,8 @@ static const struct pci_device_id pci_ids_reject[]
> = {
>
> static int xhci_pci_probe(struct pci_dev *dev, const struct
> pci_device_id *id)
> {
> - if (pci_match_id(pci_ids_reject, dev))
> + if (IS_ENABLED(CONFIG_USB_XHCI_PCI_RENESAS) &&
> + pci_match_id(pci_ids_renesas, dev))
> return -ENODEV;
>
> return xhci_pci_common_probe(dev, id);