Hi, Sandeep Maheswaram <sanm@xxxxxxxxxxxxxx> writes: >>> @@ -11,6 +11,14 @@ >>> #include <linux/platform_device.h> >>> >>> #include "core.h" >>> +#include "../host/xhci.h" >>> +#include "../host/xhci-plat.h" >>> + >>> +static int xhci_dwc3_suspend_quirk(struct usb_hcd *hcd); >>> + >>> +static const struct xhci_plat_priv xhci_plat_dwc3_xhci = { >>> + .suspend_quirk = xhci_dwc3_suspend_quirk, >>> +}; >> we're passing data using device_properties, why do you want this here? > Similar implemenation was done in > drivers/usb/cdns3/host.c<https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/usb/cdns3/host.c?h=next-20210503> then it seems we have two places to correct :-) >>> @@ -127,6 +142,50 @@ int dwc3_host_init(struct dwc3 *dwc) >>> return ret; >>> } >>> >>> +static void dwc3_set_phy_mode(struct usb_hcd *hcd) >>> +{ >>> + >>> + int i, num_ports; >>> + u32 reg; >>> + unsigned int ss_phy_mode = 0; >>> + struct dwc3 *dwc = dev_get_drvdata(hcd->self.controller->parent); >>> + struct xhci_hcd *xhci_hcd = hcd_to_xhci(hcd); >>> + >>> + dwc->hs_phy_mode = 0; >>> + >>> + reg = readl(&xhci_hcd->cap_regs->hcs_params1); >>> + num_ports = HCS_MAX_PORTS(reg); >> there's a big assumption here that xhci is still alive. Why isn't this >> quirk implemented in xhci-plat itself? >> >>> +int xhci_dwc3_suspend_quirk(struct usb_hcd *hcd) >> who calls this? > This will be called from > xhci_plat_suspend->xhci_priv_suspend_quirk->xhci_dwc3_suspend_quirk So xhci.ko calls a function from dwc3.ko? That sounds odd, doesn't it? It really looks like we're just finding ways to bypass the driver layering, rather than working with it. -- balbi
Attachment:
signature.asc
Description: PGP signature