Re: [PATCH v8 2/6] usb: host: xhci: plat: Add suspend quirk for dwc3 controller

From: Felipe Balbi
Date: Mon Jul 12 2021 - 05:33:10 EST



Hi,

Sandeep Maheswaram <sanm@xxxxxxxxxxxxxx> writes:
> During suspend read the status of all port and make sure the PHYs
> are in the correct mode based on current speed.
> Phy interrupt masks are set based on this mode. Keep track of the mode
> of the HS PHY to be able to configure wakeup properly.
>
> Also check during suspend if any wakeup capable devices are
> connected to the controller (directly or through hubs), if there
> are none set a flag to indicate that the PHY should be powered
> down during suspend.
>
> Signed-off-by: Sandeep Maheswaram <sanm@xxxxxxxxxxxxxx>
> ---
> drivers/usb/host/xhci-plat.c | 38 ++++++++++++++++++++++++++++++++++++++
> 1 file changed, 38 insertions(+)
>
> diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
> index c1edcc9..ee87923 100644
> --- a/drivers/usb/host/xhci-plat.c
> +++ b/drivers/usb/host/xhci-plat.c
> @@ -24,6 +24,7 @@
> #include "xhci-plat.h"
> #include "xhci-mvebu.h"
> #include "xhci-rcar.h"
> +#include "../dwc3/core.h"
>
> static struct hc_driver __read_mostly xhci_plat_hc_driver;
>
> @@ -430,6 +431,39 @@ static int xhci_plat_remove(struct platform_device *dev)
>
> return 0;
> }
> +static void xhci_dwc3_suspend_quirk(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;

you're still bypassing the driver layering. First you had dwc access
xhci, now you want xhci to access dwc. Either way is wrong. You need to
rely on drivers core and device properties for this stuff. Don't access
data you don't own.

--
balbi

Attachment: signature.asc
Description: PGP signature