From: "Lothar Waßmann" <LW@KARO-electronics.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v7 08/10] usb: host: ohci-generic: add CLOCK support
Date: Wed, 21 Jun 2017 09:56:10 +0200 [thread overview]
Message-ID: <20170621095610.56f2fc9b@karo-electronics.de> (raw)
In-Reply-To: <3c8bff2e-dffa-5d2d-b857-531dd7ba5e40@st.com>
Hi,
On Tue, 20 Jun 2017 12:56:48 +0000 Patrice CHOTARD wrote:
> Hi Lothar
>
> On 06/20/2017 02:06 PM, Lothar Waßmann wrote:
> > Hi,
> >
> > On Tue, 20 Jun 2017 11:59:09 +0200 patrice.chotard at st.com wrote:
> >> From: Patrice Chotard <patrice.chotard@st.com>
> >>
> >> use array to save enabled clocks reference in order to
> >> disabled them in case of error during probe() or during
> >> driver removal.
> >>
> >> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
> >> ---
> >> v7: _ replace clk_count() by ofnode_count_phandle_with_args()
> >>
> >> v6: _ none
> >>
> >> v5: _ none
> >>
> >> v4: _ use generic_phy_valid() before generic_phy_exit() call
> >>
> >> v3: _ extract in this patch the CLOCK support add-on from previous patch 5
> >> _ keep enabled clocks reference in list in order to
> >> disable clocks in error path or in .remove callback
> >>
> >> v2: _ add error path management
> >> _ add .remove callback
> >>
> >> drivers/usb/host/ohci-generic.c | 59 +++++++++++++++++++++++++++++++++++++++--
> >> 1 file changed, 57 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/drivers/usb/host/ohci-generic.c b/drivers/usb/host/ohci-generic.c
> >> index f85738f..f76a1c2 100644
> >> --- a/drivers/usb/host/ohci-generic.c
> >> +++ b/drivers/usb/host/ohci-generic.c
> >> @@ -5,27 +5,83 @@
> >> */
> >>
> >> #include <common.h>
> >> +#include <clk.h>
> >> #include <dm.h>
> >> #include "ohci.h"
> >>
> >> +#include <dm/ofnode.h>
> >> +
> >> #if !defined(CONFIG_USB_OHCI_NEW)
> >> # error "Generic OHCI driver requires CONFIG_USB_OHCI_NEW"
> >> #endif
> >>
> >> struct generic_ohci {
> >> ohci_t ohci;
> >> + struct clk *clocks;
> >> + int clock_count;
> >> };
> >>
> >> static int ohci_usb_probe(struct udevice *dev)
> >> {
> >> struct ohci_regs *regs = (struct ohci_regs *)devfdt_get_addr(dev);
> >> + struct generic_ohci *priv = dev_get_priv(dev);
> >> + int i, err, ret, clock_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);
> >> + if (!priv->clocks) {
> >> + error("Can't allocate resource\n");
> >> + return -ENOMEM;
> >> + }
> >> +
> >> + for (i = 0; i < clock_nb; i++) {
> >> + err = clk_get_by_index(dev, i, &priv->clocks[i]);
> >> + if (err < 0)
> >> + break;
> >> +
> >> + priv->clock_count++;
> >> +
> >> + if (clk_enable(&priv->clocks[i])) {
> >> + error("failed to enable clock %d\n", i);
> >> + clk_free(&priv->clocks[i]);
> >> + goto clk_err;
> >> + }
> >> + clk_free(&priv->clocks[i]);
> >>
> > You free the freshly allocated clock right away and use it lateron?
>
> clk_free() didn't free clock resources, it's the opposite of
> clk_request(), see comments in include.clk.h
>
But as long as you are working with some resource (whether it's a
clock, a gpio, a 'reset' or whatever), you should keep it requested and
free it only after you relinquished using it.
Otherwise the object you are using may be destroyed underneath your
feet.
Lothar Waßmann
next prev parent reply other threads:[~2017-06-21 7:56 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-20 9:59 [U-Boot] [PATCH v7 00/10] usb: Extend ehci and ohci generic drivers patrice.chotard at st.com
2017-06-20 9:59 ` [U-Boot] [PATCH v7 01/10] reset: add reset_request() patrice.chotard at st.com
2017-06-20 9:59 ` [U-Boot] [PATCH v7 02/10] reset: add reset_assert_all() patrice.chotard at st.com
2017-06-20 9:59 ` [U-Boot] [PATCH v7 03/10] clk: add clk_disable_all() patrice.chotard at st.com
2017-06-20 12:11 ` Lothar Waßmann
2017-06-20 12:40 ` Patrice CHOTARD
2017-06-20 9:59 ` [U-Boot] [PATCH v7 04/10] dm: core: add ofnode_count_phandle_with_args() patrice.chotard at st.com
2017-06-20 18:26 ` Simon Glass
2017-06-20 9:59 ` [U-Boot] [PATCH v7 05/10] usb: host: ehci-generic: replace printf() by error() patrice.chotard at st.com
2017-06-20 9:59 ` [U-Boot] [PATCH v7 06/10] usb: host: ehci-generic: add error path and .remove callback patrice.chotard at st.com
2017-06-20 10:09 ` Marek Vasut
2017-06-20 11:26 ` Lothar Waßmann
2017-06-20 12:22 ` Patrice CHOTARD
2017-06-20 11:32 ` Lothar Waßmann
2017-06-20 12:28 ` Patrice CHOTARD
2017-06-20 9:59 ` [U-Boot] [PATCH v7 07/10] usb: host: ehci-generic: add generic PHY support patrice.chotard at st.com
2017-06-20 9:59 ` [U-Boot] [PATCH v7 08/10] usb: host: ohci-generic: add CLOCK support patrice.chotard at st.com
2017-06-20 12:06 ` Lothar Waßmann
2017-06-20 12:56 ` Patrice CHOTARD
2017-06-21 7:56 ` Lothar Waßmann [this message]
2017-06-21 8:36 ` Patrice CHOTARD
2017-06-20 9:59 ` [U-Boot] [PATCH v7 09/10] usb: host: ohci-generic: add RESET support patrice.chotard at st.com
2017-06-20 18:26 ` Simon Glass
2017-06-20 9:59 ` [U-Boot] [PATCH v7 10/10] usb: host: ohci-generic: add generic PHY support patrice.chotard at st.com
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170621095610.56f2fc9b@karo-electronics.de \
--to=lw@karo-electronics.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox