From: Jie Luo <quic_luoj@quicinc.com>
To: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Stephen Boyd <sboyd@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Conor Dooley <conor+dt@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
Michael Turquette <mturquette@baylibre.com>,
Rob Herring <robh@kernel.org>, Will Deacon <will@kernel.org>,
<linux-arm-msm@vger.kernel.org>, <linux-clk@vger.kernel.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<quic_kkumarcs@quicinc.com>, <quic_suruchia@quicinc.com>,
<quic_pavir@quicinc.com>, <quic_linchen@quicinc.com>,
<quic_leiwei@quicinc.com>, <bartosz.golaszewski@linaro.org>,
<srinivas.kandagatla@linaro.org>
Subject: Re: [PATCH v3 2/4] clk: qcom: Add CMN PLL clock controller driver for IPQ SoC
Date: Tue, 3 Sep 2024 22:00:31 +0800 [thread overview]
Message-ID: <492e3c19-c06d-4faa-8064-e6b73c46b13e@quicinc.com> (raw)
In-Reply-To: <6sk7sx4pz2gnne2tg3d5lsphmnp6vqjj2tjogqcop7fwn3yk3r@ftevsz77w6pt>
On 9/3/2024 2:39 AM, Dmitry Baryshkov wrote:
> On Mon, Sep 02, 2024 at 11:33:57PM GMT, Jie Luo wrote:
>>
>>
>> On 8/31/2024 6:24 AM, Stephen Boyd wrote:
>>> Quoting Jie Luo (2024-08-30 09:14:28)
>>>> Hi Stephen,
>>>> Please find below a minor update to my earlier message on clk_ops usage.
>>>
>>> Ok. Next time you can trim the reply to save me time.
>>
>> OK.
>>
>>>
>>>> On 8/28/2024 1:44 PM, Jie Luo wrote:
>>>>> On 8/28/2024 7:50 AM, Stephen Boyd wrote:
>>>>>> Quoting Luo Jie (2024-08-27 05:46:00)
>>>>>>> + case 48000000:
>>>>>>> + val |= FIELD_PREP(CMN_PLL_REFCLK_INDEX, 7);
>>>>>>> + break;
>>>>>>> + case 50000000:
>>>>>>> + val |= FIELD_PREP(CMN_PLL_REFCLK_INDEX, 8);
>>>>>>> + break;
>>>>>>> + case 96000000:
>>>>>>> + val |= FIELD_PREP(CMN_PLL_REFCLK_INDEX, 7);
>>>>>>> + val &= ~CMN_PLL_REFCLK_DIV;
>>>>>>> + val |= FIELD_PREP(CMN_PLL_REFCLK_DIV, 2);
>>>>>>> + break;
>>>>>>> + default:
>>>>>>> + return -EINVAL;
>>>>>>> + }
>>>>>>
>>>>>> Why isn't this done with struct clk_ops::set_rate() or clk_ops::init()?
>>>>>
>>>>> OK, I will move this code into the clk_ops::init().
>>>>
>>>> This code is expected to be executed once for initializing the CMN PLL
>>>> to enable output clocks, and requires the parent clock rate to be
>>>> available. However the parent clock rate is not available in the
>>>> clk_ops::init(). Hence clk_ops::set_rate() seems to be the right option
>>>> for this. Please let us know if this approach is fine. Thanks.
>>>
>>> Sure. It actually sounds like the PLL has a mux to select different
>>> reference clks. Is that right? If so, it seems like there should be
>>> multiple 'clocks' for the DT property and many parents possible. If
>>> that's the case then it should be possible to have something like
>>>
>>> clocks = <0>, <&refclk>, <0>;
>>>
>>> in the DT node and then have clk_set_rate() from the consumer actually
>>> set the parent index in hardware. If that's all static then it can be
>>> done with assigned-clock-parents or assigned-clock-rates.
>>
>> Thanks Stephen. The CMN PLL block always uses a single input reference
>> clock pin on any given IPQ SoC, however its rate may be different on
>> different IPQ SoC. For example, its rate is 48MHZ on IPQ9574 and 96MHZ
>> on IPQ5018.
>>
>> Your second suggestion seems more apt for this device. I can define the
>> DT property 'assigned-clock-parents' to configure the clock parent of
>> CMN PLL. The code for reference clock selection will be added in
>> clk_ops::set_parent(). Please let us know if this approach is fine.
>
> What is the source of this clock? Can you call clk_get_rate() on this
> input?
>
The source (parent clock) for CMN PLL is always from on-board Wi-Fi
block for any given IPQ SoC.
From the discussion so far, it seems there are two approaches possible
which I would like to summarize below to be clear. Please let us know
if this understanding or approach needs correction. Thanks.
1. clk_get_rate() requires the parent clock instance to be acquired by
devm_clk_get(). Per our understanding from Stephen's previous comment,
it is preferred that a clock provider driver (this) does not use the
_get_ APIs on the parent clock to get the rate. Instead the parent rate
should be passed to the clk_ops using parent data. So the parent clock
should be specified in the DT using assigned-clock-parents property, and
can be accessed from the clk_ops::set_parent(). This seems like a more
reasonable method.
2. Alternatively, if it is architecturally acceptable to use
devm_clk_get() and clk_get_rate() in this clock provider driver, we can
save this parent clock rate into a local driver data structure and then
access it from clk_ops::init() for configuring the PLL.
next prev parent reply other threads:[~2024-09-03 14:00 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-27 12:45 [PATCH v3 0/4] Add CMN PLL clock controller driver for IPQ9574 Luo Jie
2024-08-27 12:45 ` [PATCH v3 1/4] dt-bindings: clock: qcom: Add CMN PLL clock controller for IPQ SoC Luo Jie
2024-08-27 12:46 ` [PATCH v3 2/4] clk: qcom: Add CMN PLL clock controller driver " Luo Jie
2024-08-27 23:50 ` Stephen Boyd
2024-08-28 5:44 ` Jie Luo
2024-08-30 16:14 ` Jie Luo
2024-08-30 22:24 ` Stephen Boyd
2024-09-02 15:33 ` Jie Luo
2024-09-02 18:39 ` Dmitry Baryshkov
2024-09-03 14:00 ` Jie Luo [this message]
2024-09-03 14:08 ` Dmitry Baryshkov
2024-09-03 21:36 ` Stephen Boyd
2024-09-05 15:32 ` Jie Luo
2024-08-27 12:46 ` [PATCH v3 3/4] arm64: defconfig: Enable Qualcomm IPQ CMN PLL clock controller Luo Jie
2024-08-27 12:46 ` [PATCH v3 4/4] arm64: dts: qcom: Add CMN PLL node for IPQ9574 SoC Luo Jie
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=492e3c19-c06d-4faa-8064-e6b73c46b13e@quicinc.com \
--to=quic_luoj@quicinc.com \
--cc=andersson@kernel.org \
--cc=bartosz.golaszewski@linaro.org \
--cc=catalin.marinas@arm.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.baryshkov@linaro.org \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mturquette@baylibre.com \
--cc=quic_kkumarcs@quicinc.com \
--cc=quic_leiwei@quicinc.com \
--cc=quic_linchen@quicinc.com \
--cc=quic_pavir@quicinc.com \
--cc=quic_suruchia@quicinc.com \
--cc=robh@kernel.org \
--cc=sboyd@kernel.org \
--cc=srinivas.kandagatla@linaro.org \
--cc=will@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