On 4/9/22 11:21 AM, Peter Geis wrote: > Commit 33fb697ec7e5 ("usb: dwc3: Get clocks individually") moved from > the clk_bulk api to individual clocks, following the snps,dwc3.yaml > dt-binding for clock names. > Unfortunately the rk3328 (and upcoming rk356x support) use the > rockchip,dwc3.yaml which has different clock names, which are common on > devices using the glue layer. > The rk3328 does not use a glue layer, but attaches directly to the dwc3 > core driver. > The offending patch series failed to account for this, thus dwc3 was > broken on rk3328. > > To retain backwards compatibility with rk3328 device trees we must also > check for the alternate clock names. > > Fixes: 33fb697ec7e5 ("usb: dwc3: Get clocks individually") > > Reported-by: Frank Wunderlich <frank-w@xxxxxxxxxxxxxxx> > Signed-off-by: Peter Geis <pgwipeout@xxxxxxxxx> > --- > > This patch is standalone to fix the backwards compatibility, and is > necessary no matter if we decide to retain the clock names in > rockchip,dwc3.yaml as is or align with snps,dwc3.yaml. > > drivers/usb/dwc3/core.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c > index 1170b800acdc..5bfd3e88af35 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -1690,21 +1690,44 @@ static int dwc3_probe(struct platform_device *pdev) > /* > * Clocks are optional, but new DT platforms should support all > * clocks as required by the DT-binding. > + * Some devices have different clock names in legacy device trees, > + * check for them to retain backwards compatibility. > */ > dwc->bus_clk = devm_clk_get_optional(dev, "bus_early"); > if (IS_ERR(dwc->bus_clk)) > return dev_err_probe(dev, PTR_ERR(dwc->bus_clk), > "could not get bus clock\n"); > > + if (dwc->bus_clk == NULL) { > + dwc->bus_clk = devm_clk_get_optional(dev, "bus_clk"); > + if (IS_ERR(dwc->bus_clk)) > + return dev_err_probe(dev, PTR_ERR(dwc->bus_clk), > + "could not get bus clock\n"); > + } > + > dwc->ref_clk = devm_clk_get_optional(dev, "ref"); > if (IS_ERR(dwc->ref_clk)) > return dev_err_probe(dev, PTR_ERR(dwc->ref_clk), > "could not get ref clock\n"); > > + if (dwc->ref_clk == NULL) { > + dwc->ref_clk = devm_clk_get_optional(dev, "ref_clk"); > + if (IS_ERR(dwc->ref_clk)) > + return dev_err_probe(dev, PTR_ERR(dwc->ref_clk), > + "could not get ref clock\n"); > + } > + > dwc->susp_clk = devm_clk_get_optional(dev, "suspend"); > if (IS_ERR(dwc->susp_clk)) > return dev_err_probe(dev, PTR_ERR(dwc->susp_clk), > "could not get suspend clock\n"); > + > + if (dwc->susp_clk == NULL) { > + dwc->susp_clk = devm_clk_get_optional(dev, "suspend_clk"); > + if (IS_ERR(dwc->susp_clk)) > + return dev_err_probe(dev, PTR_ERR(dwc->susp_clk), > + "could not get suspend clock\n"); > + } > } > > ret = reset_control_deassert(dwc->reset); > Acked-by: Sean Anderson <sean.anderson@xxxxxxxx>