From: Jacky Huang <ychuang570808@gmail.com>
To: Stephen Boyd <sboyd@kernel.org>,
gregkh@linuxfoundation.org, jirislaby@kernel.org,
krzysztof.kozlowski+dt@linaro.org, lee@kernel.org,
mturquette@baylibre.com, p.zabel@pengutronix.de,
robh+dt@kernel.org
Cc: devicetree@vger.kernel.org, linux-clk@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
arnd@arndb.de, schung@nuvoton.com, mjchen@nuvoton.com,
Jacky Huang <ychuang3@nuvoton.com>
Subject: Re: [PATCH v6 08/12] arm64: dts: nuvoton: Add initial ma35d1 device tree
Date: Wed, 29 Mar 2023 14:02:31 +0800 [thread overview]
Message-ID: <458d454e-64ba-849a-38cb-88bf016f5a2e@gmail.com> (raw)
In-Reply-To: <b816411c301e2b3afe9c3df36728f946.sboyd@kernel.org>
Dear Stephen,
On 2023/3/29 上午 11:54, Stephen Boyd wrote:
> Quoting Jacky Huang (2023-03-28 20:43:23)
>> On 2023/3/29 上午 11:25, Stephen Boyd wrote:
>>> Quoting Jacky Huang (2023-03-28 20:13:11)
>>>> I may not explain clearly enough. The lock/unlock register of system
>>>> controller is more like
>>>> a kind of write protection for specific registers, rather than
>>>> preventing hetero-core CPU access.
>>>> In many different IP of ma35d1 contain write protected registers.
>>>> In fact, ma35d1 has a "hardware semaphore" IP, and we have implemented
>>>> the driver in drivers/hwspinlock.
>>>> Even the control register of "hardware semaphore" is also write protected.
>>> What's the need to lock and unlock the registers? Is some other
>>> processor also writing to the registers that we need to synchronize
>>> against? Or is Linux the only entity reading and writing the registers?
>>> I'm wondering if we should simply unlock the registers and never lock
>>> them.
> Can you answer this question?
Sorry, I miss this.
The lock and unlock register mechanism is a hardware design of ma35d1 SoC.
The purpose is to prevent from unexpected write to some registers.
However, I think this is a redundant design if s/w is done properly.
Even though I think it's a redundant design, it's out there and we have
to deal with it.
And of course we have unlock and lock pair, I just lost to write in the
above.
>>>> So, should we implement a system controller driver to provide
>>>> register_unlock() function?
>>>> Is it OK to have such a driver in drivers/mfd?
>>>> Or, just use syscon in device tree for those devices that have write
>>>> protect registers.
>>>>
>>> The hwspinlock framework doesn't require there to be another entity
>>> accessing some resource. It's there to implement hardware locks. I don't
>>> see why it can't be used here.
>> The current usage of register lock/unlock protect is as the following code:
>>
>> static void ma35d1_unlock_regs(struct ma35d1_clk_pll *pll)
>> {
>> int ret;
>>
>> do {
>> regmap_write(pll->regmap, REG_SYS_RLKTZNS, 0x59);
>> regmap_write(pll->regmap, REG_SYS_RLKTZNS, 0x16);
>> regmap_write(pll->regmap, REG_SYS_RLKTZNS, 0x88);
>> regmap_read(pll->regmap, REG_SYS_RLKTZNS, &ret);
>> } while (ret == 0);
>> }
>>
>> static void ma35d1_lock_regs(struct ma35d1_clk_pll *pll)
>> {
>> regmap_write(pll->regmap, REG_SYS_RLKTZNS, 0x0);
>> }
>>
>> And the following code is to unlock registers for write and then lock again.
>>
>> ma35d1_unlock_regs(pll);
>> writel_relaxed(reg_ctl[0], pll->ctl0_base);
>> writel_relaxed(reg_ctl[1], pll->ctl1_base);
>> writel_relaxed(reg_ctl[2], pll->ctl2_base);
>> ma35d1_lock_regs(pll);
>>
>> The above code is from the clk-ma35d1-pll.c from this patchset.
> Yeah I understand that you write some registers in the syscon to lock
> the registers.
>
>> We just employ regmap mechansim for the access to REG_SYS_RLKTZNS register.
>> Is this implementation OK for you? Thank you.
>>
> No. Why can't that be a hwspinlock? Or why can't it be unlocked all the
> time and rely on software spinlocks in the kernel to prevent concurrent
> access to the registers accessed by a driver, like a lock for the clk
> registers and a lock for the reset registers, etc. Or if no two clks or
> resets exist within one 32-bit word then no lock is necessary.
You gave a good suggestion here. Yes, of course we can let it be
unlocked all the time.
We can unlock the "register lock" before entering Linux.
As a result, the unlonk and lock register related code is not required.
Thus, we can remove syscon from the clock controller node.
If you agree with this, we will modify it in the next version.
Best regards,
Jacky Huang
next prev parent reply other threads:[~2023-03-29 6:02 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-28 2:19 [PATCH v6 00/12] Introduce Nuvoton ma35d1 SoC Jacky Huang
2023-03-28 2:19 ` [PATCH v6 01/12] arm64: Kconfig.platforms: Add config for Nuvoton MA35 platform Jacky Huang
2023-03-28 2:19 ` [PATCH v6 02/12] arm64: defconfig: Add support for Nuvoton MA35 family SoCs Jacky Huang
2023-03-28 2:19 ` [PATCH v6 03/12] dt-bindings: clock: nuvoton: add binding for ma35d1 clock controller Jacky Huang
2023-03-29 8:14 ` Krzysztof Kozlowski
2023-03-28 2:19 ` [PATCH v6 04/12] dt-bindings: reset: nuvoton: add binding for ma35d1 IP reset control Jacky Huang
2023-03-28 17:48 ` Stephen Boyd
2023-03-29 8:53 ` Jacky Huang
2023-03-29 8:17 ` Krzysztof Kozlowski
2023-03-29 9:12 ` Jacky Huang
2023-03-29 9:27 ` Krzysztof Kozlowski
2023-03-29 9:33 ` Jacky Huang
2023-03-28 2:19 ` [PATCH v6 05/12] dt-bindings: mfd: syscon: Add nuvoton,ma35d1-sys compatible Jacky Huang
2023-04-05 15:27 ` Lee Jones
2023-03-28 2:19 ` [PATCH v6 06/12] dt-bindings: arm: Add initial bindings for Nuvoton platform Jacky Huang
2023-03-28 15:41 ` kernel test robot
2023-03-29 8:19 ` Krzysztof Kozlowski
2023-03-29 8:32 ` Jacky Huang
2023-03-29 13:07 ` Rob Herring
2023-03-30 10:41 ` Jacky Huang
2023-03-30 13:25 ` Krzysztof Kozlowski
2023-03-31 2:15 ` Jacky Huang
2023-04-03 20:33 ` Rob Herring
2023-04-06 2:09 ` Jacky Huang
2023-03-28 2:19 ` [PATCH v6 07/12] dt-bindings: serial: Document ma35d1 uart controller Jacky Huang
2023-03-29 8:20 ` Krzysztof Kozlowski
2023-03-29 8:44 ` Jacky Huang
2023-03-30 7:33 ` Krzysztof Kozlowski
2023-03-30 10:52 ` Jacky Huang
2023-03-30 13:12 ` Rob Herring
2023-03-31 2:03 ` Jacky Huang
2023-03-28 2:19 ` [PATCH v6 08/12] arm64: dts: nuvoton: Add initial ma35d1 device tree Jacky Huang
2023-03-28 17:57 ` Stephen Boyd
2023-03-29 2:03 ` Jacky Huang
2023-03-29 2:19 ` Stephen Boyd
2023-03-29 2:39 ` Jacky Huang
2023-03-29 2:46 ` Stephen Boyd
2023-03-29 3:13 ` Jacky Huang
2023-03-29 3:25 ` Stephen Boyd
2023-03-29 3:43 ` Jacky Huang
2023-03-29 3:54 ` Stephen Boyd
2023-03-29 6:02 ` Jacky Huang [this message]
2023-03-29 17:52 ` Stephen Boyd
2023-03-29 8:21 ` Krzysztof Kozlowski
2023-03-29 8:36 ` Jacky Huang
2023-03-28 2:19 ` [PATCH v6 09/12] clk: nuvoton: Add clock driver for ma35d1 clock controller Jacky Huang
2023-03-28 18:18 ` Stephen Boyd
2023-03-30 10:36 ` Jacky Huang
2023-03-28 2:19 ` [PATCH v6 10/12] reset: Add Nuvoton ma35d1 reset driver support Jacky Huang
2023-04-24 20:02 ` Philipp Zabel
2023-04-25 1:22 ` Jacky Huang
2023-03-28 2:19 ` [PATCH v6 11/12] tty: serial: Add Nuvoton ma35d1 serial " Jacky Huang
2023-03-28 9:23 ` Jiri Slaby
2023-03-29 8:06 ` Jacky Huang
2023-03-31 0:29 ` kernel test robot
2023-03-28 2:19 ` [PATCH v6 12/12] MAINTAINERS: Add entry for NUVOTON MA35 Jacky Huang
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=458d454e-64ba-849a-38cb-88bf016f5a2e@gmail.com \
--to=ychuang570808@gmail.com \
--cc=arnd@arndb.de \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=lee@kernel.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=mjchen@nuvoton.com \
--cc=mturquette@baylibre.com \
--cc=p.zabel@pengutronix.de \
--cc=robh+dt@kernel.org \
--cc=sboyd@kernel.org \
--cc=schung@nuvoton.com \
--cc=ychuang3@nuvoton.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;
as well as URLs for NNTP newsgroup(s).