[PATCH v5 2/3] usb: gadget: rcar: Add support for reset controller
Michele Bisogno
micbis.openwrt at gmail.com
Fri Apr 24 17:24:30 CEST 2026
On Fri, 24 Apr 2026 at 07:34, Marek Vasut <marek.vasut at mailbox.org> wrote:
>
> > #include <linux/usb/ch9.h>
> > #include <linux/usb/gadget.h>
> > #include <usb.h>
> > +#include <reset.h>
>
> Please keep the header list sorted.
Ops, OK!
> > #include "common.h"
>
> [...]
>
> clk_enable_bulk() needs to jump to err_clock_enable() on failure, this
> is a bug in the existing driver .
>
> > + ret = reset_get_bulk(dev, &priv->reset_bulk);
> > + if (ret)
> > + goto err_clk;
> > +
> > + ret = reset_deassert_bulk(&priv->reset_bulk);
> > + if (ret)
> > + goto err_clk;
>
> This has to jump to fail path which does reset_release_bulk() , i.e.
>
> goto err_reset_deassert;
OK!
> > clrsetbits_le32(priv->base + UGCTRL2, UGCTRL2_USB0SEL_MASK, UGCTRL2_USB0SEL_EHCI);
> > clrsetbits_le16(priv->base + LPSTS, LPSTS_SUSPM, LPSTS_SUSPM);
> >
> > ret = generic_setup_phy(dev, &priv->phy, 0, PHY_MODE_USB_OTG, 1);
> > if (ret)
> > - goto err_clk;
> > + goto err_reset;
> >
> > priv->phybase = dev_read_addr_ptr(priv->phy.dev);
> >
> > priv->usbhs_priv.pdev = &priv->usbhs_dev;
> > priv->usbhs_priv.base = priv->base;
> > priv->usbhs_dev.dev.driver_data = &priv->usbhs_priv;
> > - ret = usbhs_probe(&priv->usbhs_priv);
> > + ret = usbhs_probe(dev);
> > if (ret < 0)
> > goto err_phy;
> >
> > @@ -439,8 +452,10 @@ static int usbhs_udc_otg_probe(struct udevice *dev)
> >
> > err_phy:
> > generic_shutdown_phy(&priv->phy);
> > +err_reset:
> > + reset_assert_bulk(&priv->reset_bulk);
>
> err_reset_deassert:
> reset_release_bulk(&priv->reset_bulk);
Alright.
> > err_clk:
> > - clk_disable_bulk(&clk_bulk);
> > + clk_disable_bulk(&priv->clk_bulk);
>
>
> err_clk_enable:
> clk_release_bulk(&priv->clk_bulk);
OK.
> > return ret;
> > }
> >
> > @@ -456,6 +471,12 @@ static int usbhs_udc_otg_remove(struct udevice *dev)
> > usbhs_fifo_remove(&priv->usbhs_priv);
> > usbhs_pipe_remove(&priv->usbhs_priv);
> >
> > + reset_assert_bulk(&priv->reset_bulk);
> > + reset_release_bulk(&priv->reset_bulk);
> > +
> > + clk_disable_bulk(&priv->clk_bulk);
> > + clk_release_bulk(&priv->clk_bulk);
> > +
> > generic_shutdown_phy(&priv->phy);
> >
> > return dm_scan_fdt_dev(dev);
>
> Thank you for your help!
Thanks for your patience! :)
More information about the U-Boot
mailing list