From: Michael Turquette <mturquette@baylibre.com>
To: James Liao <jamesjj.liao@mediatek.com>,
"Stephen Boyd" <sboyd@codeaurora.org>
Cc: "Erin Lo" <erin.lo@mediatek.com>,
"Matthias Brugger" <matthias.bgg@gmail.com>,
"Rob Herring" <robh@kernel.org>,
"John Crispin" <blogic@openwrt.org>,
"Arnd Bergmann" <arnd@arndb.de>,
"Sascha Hauer" <kernel@pengutronix.de>,
"Daniel Kurtz" <djkurtz@chromium.org>,
"Philipp Zabel" <p.zabel@pengutronix.de>,
devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org,
linux-clk@vger.kernel.org, srv_heupstream@mediatek.com
Subject: Re: [PATCH v9 01/10] clk: fix initial state of critical clock's parents
Date: Fri, 08 Jul 2016 16:32:10 -0700 [thread overview]
Message-ID: <146802073038.73491.6675612765998057903@resonance> (raw)
In-Reply-To: <1467604308.26485.4.camel@mtksdaap41>
Hi James,
Quoting James Liao (2016-07-03 20:51:48)
> On Fri, 2016-07-01 at 18:21 -0700, Stephen Boyd wrote:
> > (Resending to everyone)
> > =
> > On 06/22, Erin Lo wrote:
> > > From: James Liao <jamesjj.liao@mediatek.com>
> > > =
> > > This patch fixed wrong state of parent clocks if they are registered
> > > after critical clocks.
> > > =
> > > Signed-off-by: James Liao <jamesjj.liao@mediatek.com>
> > > Signed-off-by: Erin Lo <erin.lo@mediatek.com>
> > =
> > It would be nice if you included the information about the
> > problem from James' previous mail. This says what it does, but
> > doesn't explain what the problem is and how it is fixing it.
> > =
> > > ---
> > > drivers/clk/clk.c | 9 ++++++++-
> > > 1 file changed, 8 insertions(+), 1 deletion(-)
> > > =
> > > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> > > index d584004..e9f5f89 100644
> > > --- a/drivers/clk/clk.c
> > > +++ b/drivers/clk/clk.c
> > > @@ -2388,8 +2388,15 @@ static int __clk_core_init(struct clk_core *co=
re)
> > > hlist_for_each_entry_safe(orphan, tmp2, &clk_orphan_list, child_n=
ode) {
> > > struct clk_core *parent =3D __clk_init_parent(orphan);
> > > =
> > > - if (parent)
> > > + if (parent) {
> > > clk_core_reparent(orphan, parent);
> > > +
> > > + if (orphan->prepare_count)
> > > + clk_core_prepare(parent);
> > > +
> > > + if (orphan->enable_count)
> > > + clk_core_enable(parent);
> > > + }
> > > }
> > =
> > I'm pretty sure I pointed this problem out to Mike when the
> > critical clk patches were being pushed. I can't recall what the
> > plan was though to fix the problem. I'm pretty sure he said that
> > clk_core_reparent() would take care of it, but obviously it is
> > not doing that. Or perhaps it was that clk handoff should figure
> > out that the parents of a critical clk are also on and thus keep
> > them on.
> =
> Hi Mike
> =
> Is there any other patch to fix this issue? Or did I misuse critical
> clock flag?
There is no fix yes. Your fix is basically correct. I was mistaken back
when I told you and Stephen that the framework already took care of
this.
However, instead of "open coding" this solution, I would rather re-use
the __clk_set_parent_{before,after} helpers instead. Can you review/test
the following patch and let me know what you think?
Thanks,
Mike
From=20c0163b3f719b1e219b28ad425f94f9ef54a25a8f Mon Sep 17 00:00:00 2001
From: Michael Turquette <mturquette@baylibre.com>
Date: Fri, 8 Jul 2016 16:05:22 -0700
Subject: [PATCH] clk: migrate ref counts when orphans are reunited
It's always nice to see families reunited, and this is equally true when
talking about parent clocks and their children. However, if the orphan
clk had a positive prepare_count or enable_count, then we would not
migrate those counts up the parent chain correctly.
This has manifested with the recent critical clocks feature, which often
enables clocks very early, before their parents have been registered.
Fixed by replacing the call to clk_core_reparent with calls to
__clk_set_parent_{before,after}.
Cc: James Liao <jamesjj.liao@mediatek.com>
Cc: Erin Lo <erin.lo@mediatek.com>
Signed-off-by: Michael Turquette <mturquette@baylibre.com>
---
drivers/clk/clk.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 820a939fb6bb..70efe4c4e0cc 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -2449,8 +2449,14 @@ static int __clk_core_init(struct clk_core *core)
hlist_for_each_entry_safe(orphan, tmp2, &clk_orphan_list, child_node) {
struct clk_core *parent =3D __clk_init_parent(orphan);
=
- if (parent)
- clk_core_reparent(orphan, parent);
+ /*
+ * we could call __clk_set_parent, but that would result in a
+ * reducant call to the .set_rate op, if it exists
+ */
+ if (parent) {
+ __clk_set_parent_before(orphan, parent);
+ __clk_set_parent_after(orphan, parent, NULL);
+ }
}
=
/*
-- =
2.7.4 (Apple Git-66)
next prev parent reply other threads:[~2016-07-08 23:32 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-22 7:40 [PATCH v9 00/10] Add clock support for Mediatek MT2701 Erin Lo
2016-06-22 7:40 ` [PATCH v9 01/10] clk: fix initial state of critical clock's parents Erin Lo
2016-07-02 1:21 ` Stephen Boyd
2016-07-04 3:51 ` James Liao
2016-07-08 23:32 ` Michael Turquette [this message]
2016-07-09 0:46 ` Stephen Boyd
2016-07-11 8:24 ` James Liao
2016-08-03 5:46 ` James Liao
2016-08-09 5:39 ` James Liao
2016-08-10 21:09 ` Stephen Boyd
2016-08-12 8:17 ` James Liao
2016-08-13 0:39 ` Stephen Boyd
2016-08-15 2:47 ` James Liao
2016-06-22 7:40 ` [PATCH v9 02/10] clk: mediatek: remove __init from clk registration functions Erin Lo
2016-06-22 7:40 ` [PATCH v9 03/10] clk: mediatek: Refine the makefile to support multiple clock drivers Erin Lo
2016-08-13 0:41 ` Stephen Boyd
2016-06-22 7:40 ` [PATCH v9 04/10] dt-bindings: ARM: Mediatek: Document bindings for MT2701 Erin Lo
2016-06-22 7:40 ` [PATCH v9 05/10] clk: mediatek: Add dt-bindings for MT2701 clocks Erin Lo
2016-06-22 7:40 ` [PATCH v9 06/10] clk: mediatek: Add MT2701 clock support Erin Lo
2016-08-13 0:44 ` Stephen Boyd
2016-08-15 3:00 ` James Liao
2016-08-15 18:16 ` Stephen Boyd
2016-06-22 7:40 ` [PATCH v9 07/10] reset: mediatek: Add MT2701 reset controller dt-binding file Erin Lo
2016-06-22 7:40 ` [PATCH v9 08/10] reset: mediatek: Add MT2701 reset driver Erin Lo
2016-06-22 7:40 ` [PATCH v9 09/10] arm: dts: mt2701: Add clock controller device nodes Erin Lo
2016-06-22 7:40 ` [PATCH v9 10/10] arm: dts: mt2701: Use real clock for UARTs Erin Lo
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=146802073038.73491.6675612765998057903@resonance \
--to=mturquette@baylibre.com \
--cc=arnd@arndb.de \
--cc=blogic@openwrt.org \
--cc=devicetree@vger.kernel.org \
--cc=djkurtz@chromium.org \
--cc=erin.lo@mediatek.com \
--cc=jamesjj.liao@mediatek.com \
--cc=kernel@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=matthias.bgg@gmail.com \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=sboyd@codeaurora.org \
--cc=srv_heupstream@mediatek.com \
/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