[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