The USB_XHCI_RZV2M and USB_RENESAS_USB3 select other drivers based on the enabled SoC types, which leads to build failures when the dependencies are not met: WARNING: unmet direct dependencies detected for USB_RZV2M_USB3DRD Depends on [n]: USB_SUPPORT [=y] && USB_GADGET [=n] && (ARCH_R9A09G011 [=n] || COMPILE_TEST [=y]) Selected by [m]: - USB_XHCI_RZV2M [=m] && USB_SUPPORT [=y] && USB [=y] && USB_XHCI_HCD [=m] && USB_XHCI_PLATFORM [=m] && (ARCH_R9A09G011 [=n] || COMPILE_TEST [=y]) ERROR: modpost: "rzv2m_usb3drd_reset" [drivers/usb/host/xhci-plat-hcd.ko] undefined! The xhci-rcar driver has a reverse dependency with the xhci core, and it depends on the UDC driver in turn. To untangle this, make the xhci-rcar.ko driver a standalone module that just calls into the xhci-plat.ko module like other drivers do. This allows handling the dependency on the USB_RZV2M_USB3DRD driver to only affect the xhci-rcar module and simplify the xhci-plat module. It also allows leaving out the hacks for broken dma mask and nested devices from the rcar side and keep that only in the generic xhci driver. As a future cleanup, the marvell and dwc3 specific bits of xhci-plat.c could be moved out as well, but that is not required for this bugfix. Fixes: c52c9acc415e ("xhci: host: Add Renesas RZ/V2M SoC support") Signed-off-by: Arnd Bergmann <arnd@arndb.de> Tested-by: Biju Das <biju.das.jz@bp.renesas.com> Link: https://lore.kernel.org/r/20230131150531.12347-1-arnd@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
32 lines
883 B
C
32 lines
883 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* xhci-plat.h - xHCI host controller driver platform Bus Glue.
|
|
*
|
|
* Copyright (C) 2015 Renesas Electronics Corporation
|
|
*/
|
|
|
|
#ifndef _XHCI_PLAT_H
|
|
#define _XHCI_PLAT_H
|
|
|
|
#include "xhci.h" /* for hcd_to_xhci() */
|
|
|
|
struct xhci_plat_priv {
|
|
const char *firmware_name;
|
|
unsigned long long quirks;
|
|
void (*plat_start)(struct usb_hcd *);
|
|
int (*init_quirk)(struct usb_hcd *);
|
|
int (*suspend_quirk)(struct usb_hcd *);
|
|
int (*resume_quirk)(struct usb_hcd *);
|
|
};
|
|
|
|
#define hcd_to_xhci_priv(h) ((struct xhci_plat_priv *)hcd_to_xhci(h)->priv)
|
|
#define xhci_to_priv(x) ((struct xhci_plat_priv *)(x)->priv)
|
|
|
|
int xhci_plat_probe(struct platform_device *pdev, struct device *sysdev,
|
|
const struct xhci_plat_priv *priv_match);
|
|
|
|
int xhci_plat_remove(struct platform_device *dev);
|
|
extern const struct dev_pm_ops xhci_plat_pm_ops;
|
|
|
|
#endif /* _XHCI_PLAT_H */
|