Hi, On Wed, Aug 21, 2024 at 2:41 PM Stefan Wahren <wahrenst@xxxxxxx> wrote: > > According to the dt-bindings there are some platforms, which have a > dedicated USB power domain for DWC2 IP core supply. If the power domain > is switched off during system suspend then all USB register will lose > their settings. > > Use GUSBCFG_TOUTCAL as a canary to detect that the power domain has > been powered off during suspend. Since the GOTGCTL_CURMODE_HOST doesn't > match on all platform with the current mode, additionally backup > GINTSTS. This works reliable to decide which registers should be > restored. > > Signed-off-by: Stefan Wahren <wahrenst@xxxxxxx> > --- > drivers/usb/dwc2/core.c | 1 + > drivers/usb/dwc2/core.h | 2 ++ > drivers/usb/dwc2/platform.c | 38 +++++++++++++++++++++++++++++++++++++ > 3 files changed, 41 insertions(+) > +static int dwc2_restore_critical_registers(struct dwc2_hsotg *hsotg) > +{ > + struct dwc2_gregs_backup *gr; > + > + gr = &hsotg->gr_backup; > + > + if (!gr->valid) { > + dev_err(hsotg->dev, "%s: no registers to restore\n", > + __func__); nit: IMO "__func__" should not be in dev_err() messages. The message plus the device should be enough. If __func__ should have been in dev_err() messages then the Linux kernel would have automatically put it there. Aside from that, this looks reasonable to me and discussed previously. Reviewed-by: Douglas Anderson <dianders@xxxxxxxxxxxx>