[U-Boot] [PATCH v7 06/10] usb: host: ehci-generic: add error path and .remove callback
Lothar Waßmann
LW at KARO-electronics.de
Tue Jun 20 11:26:37 UTC 2017
Hi,
On Tue, 20 Jun 2017 12:09:22 +0200 Marek Vasut wrote:
> On 06/20/2017 11:59 AM, patrice.chotard at st.com wrote:
> > From: Patrice Chotard <patrice.chotard at st.com>
> >
> > Use an array to save enabled clocks reference and deasserted resets
> > in order to respectively disabled and asserted them in case of error
> > during probe() or during driver removal.
> >
> > Signed-off-by: Patrice Chotard <patrice.chotard at st.com>
>
> Nitpicks below
>
> > ---
> >
> > v7: _ replace clk_count() and reset_count() by ofnode_count_phandle_with_args()
> >
> > v6: _ none
> >
> > v5: _ none
> >
> > v4: _ update the memory allocation for deasserted resets and enabled
> > clocks reference list. Replace lists by arrays.
> > _ usage of new RESET and CLOCK methods clk_count(), reset_count(),
> > reset_assert_all() and clk_disable_all().
> >
> > v3: _ keep enabled clocks and deasserted resets reference in list in order to
> > disable clock or assert resets in error path or in .remove callback
> > _ use struct generic_ehci * instead of struct udevice * as parameter for
> > ehci_release_resets() and ehci_release_clocks()
> >
> > drivers/usb/host/ehci-generic.c | 125 ++++++++++++++++++++++++++++++++--------
> > 1 file changed, 101 insertions(+), 24 deletions(-)
> >
> > diff --git a/drivers/usb/host/ehci-generic.c b/drivers/usb/host/ehci-generic.c
> > index 2116ae1..388b242 100644
> > --- a/drivers/usb/host/ehci-generic.c
> > +++ b/drivers/usb/host/ehci-generic.c
> > @@ -11,6 +11,8 @@
> > #include <dm.h>
> > #include "ehci.h"
> >
> > +#include <dm/ofnode.h>
> > +
> > /*
> > * Even though here we don't explicitly use "struct ehci_ctrl"
> > * ehci_register() expects it to be the first thing that resides in
> > @@ -18,43 +20,119 @@
> > */
> > struct generic_ehci {
> > struct ehci_ctrl ctrl;
> > + struct clk *clocks;
> > + struct reset_ctl *resets;
> > + int clock_count;
> > + int reset_count;
> > };
> >
> > static int ehci_usb_probe(struct udevice *dev)
> > {
> > + struct generic_ehci *priv = dev_get_priv(dev);
> > struct ehci_hccr *hccr;
> > struct ehci_hcor *hcor;
> > - int i;
> > -
> > - for (i = 0; ; i++) {
> > - struct clk clk;
> > - int ret;
> > -
> > - ret = clk_get_by_index(dev, i, &clk);
> > - if (ret < 0)
> > - break;
> > - if (clk_enable(&clk))
> > - error("failed to enable clock %d\n", i);
> > - clk_free(&clk);
> > - }
> > + int i, err, ret, clock_nb, reset_nb;
> > +
> > + err = 0;
> > + priv->clock_count = 0;
> > + clock_nb = ofnode_count_phandle_with_args(dev_ofnode(dev), "clocks",
> > + "#clock-cells");
> > + if (clock_nb > 0) {
> > + priv->clocks = devm_kmalloc(dev, sizeof(struct clk) * clock_nb,
> > + GFP_KERNEL);
>
> devm_kzalloc()
>
devm_kcalloc(dev, clock_nb, sizeof()...)
Lothar Waßmann
More information about the U-Boot
mailing list