From: "Roger Lu (陸瑞傑)" <Roger.Lu@mediatek.com>
To: "eballetbo@gmail.com" <eballetbo@gmail.com>,
"matthias.bgg@gmail.com" <matthias.bgg@gmail.com>,
"khilman@kernel.org" <khilman@kernel.org>,
"sboyd@kernel.org" <sboyd@kernel.org>,
"drinkcat@google.com" <drinkcat@google.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mediatek@lists.infradead.org"
<linux-mediatek@lists.infradead.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
Project_Global_Chrome_Upstream_Group
<Project_Global_Chrome_Upstream_Group@mediatek.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"Jia-wei Chang (張佳偉)" <Jia-wei.Chang@mediatek.com>,
"Fan Chen (陳凡)" <fan.chen@mediatek.com>
Subject: Re: [PATCH v4 05/14] soc: mediatek: mtk-svs: use svs clk control APIs
Date: Sat, 11 Feb 2023 11:34:02 +0000 [thread overview]
Message-ID: <1b6f52a1f7108a86a6bdb1ff8dd77454a215203b.camel@mediatek.com> (raw)
In-Reply-To: <f49ad56c-a5fd-5e51-f812-a2941b5681d6@gmail.com>
Hi Matthias Sir,
On Mon, 2023-02-06 at 13:09 +0100, Matthias Brugger wrote:
>
> On 06/02/2023 03:01, Roger Lu (陸瑞傑) wrote:
> > Hi Matthias Sir,
> >
> >
> > On Thu, 2023-02-02 at 11:29 +0100, Matthias Brugger wrote:
> > > 你好,
> >
> > I got shock and thought someone used your name to reply. However,
> > your email account helps me clear my mind. Haha.. Nice and warm to see
> > mandarin
> > on patchwork. It's so fresh and exciting :-).
> >
>
> 谢谢。 I'm learning mainland Chinese for a few month now, I also learned that
> you
> use different symbols in Taiwan, which I don't know. 对不起。
Ha. Both symbols are welcome to me. :-)
>
> > >
> > > On 01/02/2023 13:28, Roger Lu (陸瑞傑) wrote:
> > > > Hi Matthias Sir,
> > > >
> > > > On Tue, 2023-01-31 at 14:19 +0100, Matthias Brugger wrote:
> > > > >
> > > > > On 11/01/2023 08:45, Roger Lu wrote:
> > > > > > In MediaTek HW design, svs and thermal both use the same clk source.
> > > > > > It means that svs clk reference count from CCF includes thermal
> > > > > > control
> > > > > > counts. That makes svs driver confuse whether it disabled svs's main
> > > > > > clk
> > > > > > or not from CCF's perspective and lead to turn off their shared clk
> > > > > > unexpectedly. Therefore, we add svs clk control APIs to make sure
> > > > > > svs's
> > > > > > main clk is controlled well by svs driver itself.
> > > > > >
> > > > > > Here is a NG example. Rely on CCF's reference count and cause
> > > > > > problem.
> > > > > >
> > > > > > thermal probe (clk ref = 1)
> > > > > > -> svs probe (clk ref = 2)
> > > > > > -> svs suspend (clk ref = 1)
> > > > > > -> thermal suspend (clk ref = 0)
> > > > > > -> thermal resume (clk ref = 1)
> > > > > > -> svs resume (encounter error, clk ref = 1)
> > > > > > -> svs suspend (clk ref = 0)
> > > > > > -> thermal suspend (Fail here, thermal HW control w/o clk)
> > > > > >
> > > > > > Fixes: a825d72f74a3 ("soc: mediatek: fix missing
> > > > > > clk_disable_unprepare()
> > > > > > on
> > > > > > err in svs_resume()")
> > > > > > Signed-off-by: Roger Lu <roger.lu@mediatek.com>
> > > > >
> > > > > That looks wrong. Although I don't out of my mind, there should be a
> > > > > way
> > > > > to
> > > > > tell
> > > > > the clock framework that this clock is shared between several devices.
> > > > >
> > > > > I wonder if using clk_enable and clk_disable in svs_resume/suspend
> > > > > wouldn't
> > > > > be
> > > > > enough.
> > > >
> > > > Oh yes, Common Clock Framework (CCF) knows the clock shared between
> > > > several
> > > > devices and maintains clock "on/off" by reference count.
> > > >
> > >
> > > The thing is if you use clk_prepare_enable then the clock framework
> > > check's
> > > if
> > > the clock is already prepared, which could happen like you described in
> > > the
> > > svs_resume (encount error) case in the commit message. The question is,
> > > can't
> > > we
> > > just use clk_enable and clk_disable in resume/suspend and only prepare the
> > > clock
> > > in the probe function?
> >
> > We'll think if this can fix the problem. Thanks for the advice very much.
> >
> > >
> > > > We concern how to stop running svs_suspend() when svs clk is already
> > > > disabled by
> > > > svs_resume(). Take an example as below, if we refers to
> > > > __clk_is_enabled()
> > > > result for knowing svs clk status, it will return "true" all the time
> > > > because
> > > > thermal clk is still on. This causes the problem mentioned in commit
> > > > message.
> > > >
> > >
> > > I would expect that the kernel takes care that we can't enter a resume
> > > path
> > > for
> > > a device before the suspend path has finished. Honestly I don't really
> > > understand the problem here. It seems something different then what you
> > > described in the commit message.
> > >
> > > Please help me understand better.
> >
> > I see. This patch title needs to be changed to "avoid turning off svs clk
> > twice
> > unexpectedly" for pointing out the problem precisely. We saw a loophole that
> > svs
> > clk might be turned off in svs_resume() first and in svs_suspend() again
> > without
> > enabling svs clk during these the process. Therefore, we try to fix it by
> > this
> > patch. Below is our thinking process to explain how we got here.
> >
> > 1. (abandoned) We add __clk_is_enabled() check in svs_suspend() to prevent
> > svs
> > clk from being turned off twice when svs_resume() turned off svs clk in the
> > error-handling process. Nonetheless, we met the NG case in the commit
> > message.
> > 2. (current patch) We add svs clk control hint to understand if we need to
> > run
> > svs_suspend() or not if svs_resume() turned off svs clk before.
> >
>
> Did you had a look on the dev_pm_ops? Maybe we can use suspend_late,
> resume_early to make sure there is no race condition. I wonder also if we
> can't
> make sure that this does not happen using device links. Sorry, I can't give
> better guidance on how to use this technologies, but I have the feeling we
> can
> fix this with existing infrastructure.
No, we didn't look on dev_pm_ops and it seems like another way to fix this issue
with __clk_is_enabled() check in svs_suspend(). Thanks for the advice again.
we'll keep looking for any possible answers to this issue.
Sincerely,
Roger Lu.
next prev parent reply other threads:[~2023-02-11 11:34 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-11 7:45 [PATCH v4 0/14] Enahance SVS's robustness Roger Lu
2023-01-11 7:45 ` [PATCH v4 01/14] soc: mediatek: mtk-svs: restore default voltages when svs_init02() fail Roger Lu
2023-01-31 13:22 ` Matthias Brugger
2023-01-11 7:45 ` [PATCH v4 02/14] soc: mediatek: mtk-svs: reset svs when svs_resume() fail Roger Lu
2023-01-31 13:22 ` Matthias Brugger
2023-01-11 7:45 ` [PATCH v4 03/14] soc: mediatek: mtk-svs: enable the IRQ later Roger Lu
2023-01-31 12:59 ` Matthias Brugger
2023-02-01 13:43 ` Roger Lu (陸瑞傑)
2023-02-01 13:47 ` Matthias Brugger
2023-01-11 7:45 ` [PATCH v4 04/14] soc: mediatek: mtk-svs: Use pm_runtime_resume_and_get() in svs_init01() Roger Lu
2023-01-31 13:23 ` Matthias Brugger
2023-01-11 7:45 ` [PATCH v4 05/14] soc: mediatek: mtk-svs: use svs clk control APIs Roger Lu
2023-01-31 13:19 ` Matthias Brugger
2023-02-01 12:28 ` Roger Lu (陸瑞傑)
2023-02-02 10:29 ` Matthias Brugger
2023-02-06 2:01 ` Roger Lu (陸瑞傑)
2023-02-06 12:09 ` Matthias Brugger
2023-02-11 11:34 ` Roger Lu (陸瑞傑) [this message]
2023-01-11 7:45 ` [PATCH v4 06/14] soc: mediatek: mtk-svs: add thermal voltage compensation if needed Roger Lu
2023-01-11 7:45 ` [PATCH v4 07/14] soc: mediatek: mtk-svs: keep svs alive if CONFIG_DEBUG_FS not supported Roger Lu
2023-01-31 13:24 ` Matthias Brugger
2023-01-11 7:45 ` [PATCH v4 08/14] soc: mediatek: mtk-svs: clean up platform probing Roger Lu
2023-01-31 13:24 ` Matthias Brugger
2023-01-11 7:45 ` [PATCH v4 09/14] soc: mediatek: mtk-svs: improve readability of platform_probe Roger Lu
2023-01-31 13:24 ` Matthias Brugger
2023-01-11 7:45 ` [PATCH v4 10/14] soc: mediatek: mtk-svs: move svs_platform_probe into probe Roger Lu
2023-01-31 13:25 ` Matthias Brugger
2023-01-11 7:45 ` [PATCH v4 11/14] soc: mediatek: mtk-svs: delete superfluous platform data entries Roger Lu
2023-01-31 13:30 ` Matthias Brugger
2023-01-11 7:45 ` [PATCH v4 12/14] soc: mediatek: mtk-svs: use svs get efuse common function Roger Lu
2023-01-31 13:37 ` Matthias Brugger
2023-02-01 8:15 ` Roger Lu (陸瑞傑)
2023-01-11 7:45 ` [PATCH v4 13/14] soc: mediatek: mtk-svs: use common function to disable restore voltages Roger Lu
2023-01-31 13:40 ` Matthias Brugger
2023-02-01 8:13 ` Roger Lu (陸瑞傑)
2023-01-11 7:45 ` [PATCH v4 14/14] soc: mtk-svs: mt8183: refactor o_slope calculation Roger Lu
2023-01-31 13:41 ` Matthias Brugger
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=1b6f52a1f7108a86a6bdb1ff8dd77454a215203b.camel@mediatek.com \
--to=roger.lu@mediatek.com \
--cc=Jia-wei.Chang@mediatek.com \
--cc=Project_Global_Chrome_Upstream_Group@mediatek.com \
--cc=devicetree@vger.kernel.org \
--cc=drinkcat@google.com \
--cc=eballetbo@gmail.com \
--cc=fan.chen@mediatek.com \
--cc=khilman@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-pm@vger.kernel.org \
--cc=matthias.bgg@gmail.com \
--cc=sboyd@kernel.org \
/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