All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomasz Figa <tomasz.figa@gmail.com>
To: Thomas Abraham <ta.omasab@gmail.com>
Cc: "cpufreq@vger.kernel.org" <cpufreq@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"Mike Turquette" <mturquette@linaro.org>,
	"Shawn Guo" <shawn.guo@linaro.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"rjw@rjwysocki.net" <rjw@rjwysocki.net>,
	"linux-samsung-soc@vger.kernel.org"
	<linux-samsung-soc@vger.kernel.org>,
	"Kukjin Kim" <kgene.kim@samsung.com>,
	"Tomasz Figa" <t.figa@samsung.com>,
	"Lukasz Majewski" <l.majewski@samsung.com>,
	"Viresh Kumar" <viresh.kumar@linaro.org>,
	"Heiko Stübner" <heiko@sntech.de>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Pawel Moll" <pawel.moll@arm.com>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Ian Campbell" <ijc+devicetree@hellion.org.uk>,
	"Kumar Gala" <galak@codeaurora.org>
Subject: Re: [PATCH v4 4/8] Documentation: devicetree: add cpu clock configuration data binding for Exynos4/5
Date: Mon, 26 May 2014 13:02:06 +0200	[thread overview]
Message-ID: <53831F2E.8000501@gmail.com> (raw)
In-Reply-To: <CAJuA9aikGp=_Vgv+qGyRJhSo1a0Qpb_KLE9a63wtbRNbrxYBYQ@mail.gmail.com>

Thomas,

On 26.05.2014 08:05, Thomas Abraham wrote:
> Hi Tomasz,
> 
> Thanks for your comments. Please see inline reply.
> 
> On Sat, May 17, 2014 at 4:54 AM, Tomasz Figa <tomasz.figa@gmail.com> wrote:
>> Hi Thomas,
>>
>> Please see my comments inline.
>>
>> On 14.05.2014 03:11, Thomas Abraham wrote:
>>> From; Thomas Abraham <thomas.ab@samsung.com>
>>>
>>> The clock blocks within the CMU_CPU clock domain are put together into a
>>> new composite clock type called the cpu clock. This clock type requires
>>> configuration data that will be atomically programmed in the multiple
>>> clock blocks encapsulated within the cpu clock type when the parent clock
>>> frequency is changed. This configuration data is held in the clock controller
>>> node. Update clock binding documentation about this configuration data format
>>> for Samsung Exynos4 and Exynos5 platforms.
>>>
>>> Cc: Tomasz Figa <t.figa@samsung.com>
>>> Cc: Rob Herring <robh+dt@kernel.org>
>>> Cc: Pawel Moll <pawel.moll@arm.com>
>>> Cc: Mark Rutland <mark.rutland@arm.com>
>>> Cc: Ian Campbell <ijc+devicetree@hellion.org.uk>
>>> Cc: Kumar Gala <galak@codeaurora.org>
>>> Cc: <devicetree@vger.kernel.org>
>>> Signed-off-by: Thomas Abraham <thomas.ab@samsung.com>
>>> ---
>>>  .../devicetree/bindings/clock/exynos4-clock.txt    |   37 ++++++++++++++++++++
>>>  .../devicetree/bindings/clock/exynos5250-clock.txt |   36 +++++++++++++++++++
>>>  2 files changed, 73 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/Documentation/devicetree/bindings/clock/exynos4-clock.txt b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>>> index f5a5b19..0934e02 100644
>>> --- a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>>> +++ b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>>> @@ -15,6 +15,35 @@ Required Properties:
>>>
>>>  - #clock-cells: should be 1.
>>>
>>> +- samsung,armclk-divider-table: when the frequency of the APLL is changed
>>> +  the divider clocks in CMU_CPU clock domain also need to be updated. These
>>> +  divider clocks have SoC specific divider clock output requirements for a
>>> +  specific APLL clock speeds. When APLL clock rate is changed, these divider
>>> +  clocks are reprogrammed with pre-determined values in order to maintain the
>>> +  SoC specific divider clock outputs. This property lists the divider values
>>> +  for divider clocks in the CMU_CPU block for supported APLL clock speeds.
>>> +  The format of each entry included in the arm-frequency-table should be
>>> +  as defined below
>>
>> As far as I understand, the relation is not between the APLL frequency
>> and particular clocks in CPU domain, but rather between the latter and
>> input clock to CPU domain, which is _after_ the two dividers (called
>> DIV_CORE and DIV_CORE2 or ARM_DIV1 and ARM_DIV2), which is also exactly
>> the output frequency of ARMCLK.
>>
>>> +
>>> +  - for Exynos4210 and Exynos4212 based platforms:
>>> +      cell #1: arm clock parent frequency
>>
>> Considering my comment above, this should be rather ARMCLK frequency.
> 
> The clocks SCLK_APLL, SCLK_HPM, ATCLK and PCLK_DBG have no relation to
> the ARMCLK frequency. These clocks are directly derived from the PLL
> clock and so it would not be correct to have them related to ARMCLK.

Oh, right, the old driver was changing DIV_APLL, DIV_ATB and
DIV_PCLK_DBG as well. Somehow I was under an impression that we need to
care only about those dividers on the path after DIV_CORE and DIV_CORE2.
In this case the parent rate is the key here, although I'd call it "CPU
block parent rate (usually APLL)".

However this means that the trick with using DIV_CORE and DIV_CORE2 to
divide the rate of temporary parent clock is not enough, because DIV_ATB
is sourced directly from MOUT_CORE.

> 
> So, I see two solutions to this, first being preferred solution.
> 
> [A] Cell #1 should define PLL (parent of armclk) clock speed. Cell #2
> and Cell #3  should define divider values for ARMCLK clock speed. The
> hardware does support PLL frequency != ARMCLK frequency and so DT
> binding should allow that (even though implementation in the linux
> kernel does not use this feature). BTW, this was what was done in v2
> of this series.
> 
> [B] Embedded this data with the code and don't get this from DT. The
> reason for doing this is, these are SoC specific values and not board
> specific. And when we are clear about what we want to put in DT, have
> a provision to lookup DT first and if DT values are not found,
> fallback on data embedded with the code.

Well, they are not that generic as they might appear. I've seen
different values for the same SoC in different vendor kernels, depending
on device the kernel was targeted for. Also they will likely differ
between SoC revisions.

However it might be a good idea indeed to keep the table in the code as
a first step to get the driver running without creating new DT bindings.

By the way, I'm not fully convinced if there is really a need for such
hardcoded look-up tables at all. Those divisors certainly look like they
are calculated based on some upper bounds for certain clocks and the
driver could simply find them out itself if those limits were provided.

Best regards,
Tomasz

WARNING: multiple messages have this Message-ID (diff)
From: tomasz.figa@gmail.com (Tomasz Figa)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 4/8] Documentation: devicetree: add cpu clock configuration data binding for Exynos4/5
Date: Mon, 26 May 2014 13:02:06 +0200	[thread overview]
Message-ID: <53831F2E.8000501@gmail.com> (raw)
In-Reply-To: <CAJuA9aikGp=_Vgv+qGyRJhSo1a0Qpb_KLE9a63wtbRNbrxYBYQ@mail.gmail.com>

Thomas,

On 26.05.2014 08:05, Thomas Abraham wrote:
> Hi Tomasz,
> 
> Thanks for your comments. Please see inline reply.
> 
> On Sat, May 17, 2014 at 4:54 AM, Tomasz Figa <tomasz.figa@gmail.com> wrote:
>> Hi Thomas,
>>
>> Please see my comments inline.
>>
>> On 14.05.2014 03:11, Thomas Abraham wrote:
>>> From; Thomas Abraham <thomas.ab@samsung.com>
>>>
>>> The clock blocks within the CMU_CPU clock domain are put together into a
>>> new composite clock type called the cpu clock. This clock type requires
>>> configuration data that will be atomically programmed in the multiple
>>> clock blocks encapsulated within the cpu clock type when the parent clock
>>> frequency is changed. This configuration data is held in the clock controller
>>> node. Update clock binding documentation about this configuration data format
>>> for Samsung Exynos4 and Exynos5 platforms.
>>>
>>> Cc: Tomasz Figa <t.figa@samsung.com>
>>> Cc: Rob Herring <robh+dt@kernel.org>
>>> Cc: Pawel Moll <pawel.moll@arm.com>
>>> Cc: Mark Rutland <mark.rutland@arm.com>
>>> Cc: Ian Campbell <ijc+devicetree@hellion.org.uk>
>>> Cc: Kumar Gala <galak@codeaurora.org>
>>> Cc: <devicetree@vger.kernel.org>
>>> Signed-off-by: Thomas Abraham <thomas.ab@samsung.com>
>>> ---
>>>  .../devicetree/bindings/clock/exynos4-clock.txt    |   37 ++++++++++++++++++++
>>>  .../devicetree/bindings/clock/exynos5250-clock.txt |   36 +++++++++++++++++++
>>>  2 files changed, 73 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/Documentation/devicetree/bindings/clock/exynos4-clock.txt b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>>> index f5a5b19..0934e02 100644
>>> --- a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>>> +++ b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>>> @@ -15,6 +15,35 @@ Required Properties:
>>>
>>>  - #clock-cells: should be 1.
>>>
>>> +- samsung,armclk-divider-table: when the frequency of the APLL is changed
>>> +  the divider clocks in CMU_CPU clock domain also need to be updated. These
>>> +  divider clocks have SoC specific divider clock output requirements for a
>>> +  specific APLL clock speeds. When APLL clock rate is changed, these divider
>>> +  clocks are reprogrammed with pre-determined values in order to maintain the
>>> +  SoC specific divider clock outputs. This property lists the divider values
>>> +  for divider clocks in the CMU_CPU block for supported APLL clock speeds.
>>> +  The format of each entry included in the arm-frequency-table should be
>>> +  as defined below
>>
>> As far as I understand, the relation is not between the APLL frequency
>> and particular clocks in CPU domain, but rather between the latter and
>> input clock to CPU domain, which is _after_ the two dividers (called
>> DIV_CORE and DIV_CORE2 or ARM_DIV1 and ARM_DIV2), which is also exactly
>> the output frequency of ARMCLK.
>>
>>> +
>>> +  - for Exynos4210 and Exynos4212 based platforms:
>>> +      cell #1: arm clock parent frequency
>>
>> Considering my comment above, this should be rather ARMCLK frequency.
> 
> The clocks SCLK_APLL, SCLK_HPM, ATCLK and PCLK_DBG have no relation to
> the ARMCLK frequency. These clocks are directly derived from the PLL
> clock and so it would not be correct to have them related to ARMCLK.

Oh, right, the old driver was changing DIV_APLL, DIV_ATB and
DIV_PCLK_DBG as well. Somehow I was under an impression that we need to
care only about those dividers on the path after DIV_CORE and DIV_CORE2.
In this case the parent rate is the key here, although I'd call it "CPU
block parent rate (usually APLL)".

However this means that the trick with using DIV_CORE and DIV_CORE2 to
divide the rate of temporary parent clock is not enough, because DIV_ATB
is sourced directly from MOUT_CORE.

> 
> So, I see two solutions to this, first being preferred solution.
> 
> [A] Cell #1 should define PLL (parent of armclk) clock speed. Cell #2
> and Cell #3  should define divider values for ARMCLK clock speed. The
> hardware does support PLL frequency != ARMCLK frequency and so DT
> binding should allow that (even though implementation in the linux
> kernel does not use this feature). BTW, this was what was done in v2
> of this series.
> 
> [B] Embedded this data with the code and don't get this from DT. The
> reason for doing this is, these are SoC specific values and not board
> specific. And when we are clear about what we want to put in DT, have
> a provision to lookup DT first and if DT values are not found,
> fallback on data embedded with the code.

Well, they are not that generic as they might appear. I've seen
different values for the same SoC in different vendor kernels, depending
on device the kernel was targeted for. Also they will likely differ
between SoC revisions.

However it might be a good idea indeed to keep the table in the code as
a first step to get the driver running without creating new DT bindings.

By the way, I'm not fully convinced if there is really a need for such
hardcoded look-up tables at all. Those divisors certainly look like they
are calculated based on some upper bounds for certain clocks and the
driver could simply find them out itself if those limits were provided.

Best regards,
Tomasz

  reply	other threads:[~2014-05-26 11:02 UTC|newest]

Thread overview: 123+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-14  1:11 [PATCH v4 0/8] cpufreq: use cpufreq-cpu0 driver for exynos based platforms Thomas Abraham
2014-05-14  1:11 ` Thomas Abraham
2014-05-14  1:11 ` Thomas Abraham
2014-05-14  1:11 ` [PATCH v4 1/8] cpufreq: cpufreq-cpu0: allow use of optional boost mode frequencies Thomas Abraham
2014-05-14  1:11   ` Thomas Abraham
2014-05-14  3:46   ` Viresh Kumar
2014-05-14  3:46     ` Viresh Kumar
2014-05-14  6:17     ` Lukasz Majewski
2014-05-14  6:17       ` Lukasz Majewski
2014-05-14  6:20       ` Viresh Kumar
2014-05-14  6:20         ` Viresh Kumar
2014-05-14 13:43         ` Thomas Abraham
2014-05-14 13:43           ` Thomas Abraham
2014-05-14 13:50           ` Viresh Kumar
2014-05-14 13:50             ` Viresh Kumar
2014-05-14 14:18             ` Thomas Abraham
2014-05-14 14:18               ` Thomas Abraham
2014-05-14 14:20               ` Viresh Kumar
2014-05-14 14:20                 ` Viresh Kumar
2014-05-14  1:11 ` [PATCH v4 2/8] clk: samsung: change scope of samsung clock lock to global Thomas Abraham
2014-05-14  1:11   ` Thomas Abraham
2014-05-14  3:50   ` Viresh Kumar
2014-05-14  3:50     ` Viresh Kumar
2014-05-14 13:26     ` Thomas Abraham
2014-05-14 13:26       ` Thomas Abraham
2014-05-16 12:30   ` Tomasz Figa
2014-05-16 12:30     ` Tomasz Figa
2014-05-14  1:11 ` [PATCH v4 3/8] clk: samsung: add infrastructure to register cpu clocks Thomas Abraham
2014-05-14  1:11   ` Thomas Abraham
2014-05-15 18:18   ` Doug Anderson
2014-05-15 18:18     ` Doug Anderson
2014-05-15 19:17     ` Heiko Stübner
2014-05-15 19:17       ` Heiko Stübner
2014-05-15 19:36       ` Doug Anderson
2014-05-15 19:36         ` Doug Anderson
2014-05-15 19:36         ` Doug Anderson
2014-05-15 20:12         ` Heiko Stübner
2014-05-15 20:12           ` Heiko Stübner
2014-05-15 20:26           ` Doug Anderson
2014-05-15 20:26             ` Doug Anderson
2014-05-16  4:55             ` Thomas Abraham
2014-05-16  4:55               ` Thomas Abraham
2014-05-16 17:17   ` Tomasz Figa
2014-05-16 17:17     ` Tomasz Figa
2014-05-23 14:41     ` Thomas Abraham
2014-05-23 14:41       ` Thomas Abraham
2014-05-23 14:50       ` Tomasz Figa
2014-05-23 14:50         ` Tomasz Figa
2014-05-14  1:11 ` [PATCH v4 4/8] Documentation: devicetree: add cpu clock configuration data binding for Exynos4/5 Thomas Abraham
2014-05-14  1:11   ` Thomas Abraham
2014-05-16 23:24   ` Tomasz Figa
2014-05-16 23:24     ` Tomasz Figa
2014-05-17  0:00     ` Tomasz Figa
2014-05-17  0:00       ` Tomasz Figa
2014-05-26  6:05     ` Thomas Abraham
2014-05-26  6:05       ` Thomas Abraham
2014-05-26 11:02       ` Tomasz Figa [this message]
2014-05-26 11:02         ` Tomasz Figa
2014-05-14  1:11 ` [PATCH v4 5/8] clk: exynos: use cpu-clock provider type to represent arm clock Thomas Abraham
2014-05-14  1:11   ` Thomas Abraham
2014-05-14 21:37   ` Mike Turquette
2014-05-14 21:37     ` Mike Turquette
2014-05-15  7:48     ` Thomas Abraham
2014-05-15  7:48       ` Thomas Abraham
2014-05-15  8:10       ` Lukasz Majewski
2014-05-15  8:10         ` Lukasz Majewski
2014-05-15  9:59         ` Thomas Abraham
2014-05-15  9:59           ` Thomas Abraham
2014-05-16  5:14     ` Thomas Abraham
2014-05-16  5:14       ` Thomas Abraham
2014-05-16 23:57   ` Tomasz Figa
2014-05-16 23:57     ` Tomasz Figa
2014-05-14  1:11 ` [PATCH v4 6/8] ARM: dts: Exynos: add cpu nodes, opp and cpu clock configuration data Thomas Abraham
2014-05-14  1:11   ` Thomas Abraham
2014-05-16 23:16   ` Tomasz Figa
2014-05-16 23:16     ` Tomasz Figa
2014-05-14  1:11 ` [PATCH v4 7/8] ARM: Exynos: switch to using generic cpufreq-cpu0 driver Thomas Abraham
2014-05-14  1:11   ` Thomas Abraham
2014-05-14 12:50   ` Arnd Bergmann
2014-05-14 12:50     ` Arnd Bergmann
2014-05-14 13:05     ` Viresh Kumar
2014-05-14 13:05       ` Viresh Kumar
2014-05-14 13:11       ` Heiko Stübner
2014-05-14 13:11         ` Heiko Stübner
2014-05-14 13:14         ` Viresh Kumar
2014-05-14 13:14           ` Viresh Kumar
2014-05-14 13:14           ` Viresh Kumar
2014-05-14 13:18           ` Arnd Bergmann
2014-05-14 13:18             ` Arnd Bergmann
2014-05-14 13:45             ` Rob Herring
2014-05-14 13:45               ` Rob Herring
2014-05-14 13:45               ` Rob Herring
2014-05-14 14:33               ` Arnd Bergmann
2014-05-14 14:33                 ` Arnd Bergmann
2014-07-08  5:15                 ` Viresh Kumar
2014-07-08  5:15                   ` Viresh Kumar
2014-05-14 14:03         ` Thomas Abraham
2014-05-14 14:03           ` Thomas Abraham
2014-05-14 14:03           ` Thomas Abraham
2014-05-14 14:09           ` Sudeep Holla
2014-05-14 14:09             ` Sudeep Holla
2014-05-14 14:09             ` Sudeep Holla
2014-05-14 14:09     ` Thomas Abraham
2014-05-14 14:09       ` Thomas Abraham
2014-05-17  0:04   ` Tomasz Figa
2014-05-17  0:04     ` Tomasz Figa
2014-05-14  1:11 ` [PATCH v4 8/8] cpufreq: exynos: remove all exynos specific cpufreq driver support Thomas Abraham
2014-05-14  1:11   ` Thomas Abraham
2014-05-14  3:57   ` Viresh Kumar
2014-05-14  3:57     ` Viresh Kumar
2014-05-14  7:20   ` Lukasz Majewski
2014-05-14  7:20     ` Lukasz Majewski
2014-05-14 13:53     ` Thomas Abraham
2014-05-14 13:53       ` Thomas Abraham
2014-05-14 12:51 ` [PATCH v4 0/8] cpufreq: use cpufreq-cpu0 driver for exynos based platforms Arnd Bergmann
2014-05-14 12:51   ` Arnd Bergmann
2014-05-14 13:07   ` Viresh Kumar
2014-05-14 13:07     ` Viresh Kumar
2014-05-14 13:16     ` Arnd Bergmann
2014-05-14 13:16       ` Arnd Bergmann
2014-05-17  0:14 ` Tomasz Figa
2014-05-17  0:14   ` Tomasz Figa
2014-05-17  0:14   ` Tomasz Figa

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=53831F2E.8000501@gmail.com \
    --to=tomasz.figa@gmail.com \
    --cc=cpufreq@vger.kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=galak@codeaurora.org \
    --cc=heiko@sntech.de \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=kgene.kim@samsung.com \
    --cc=l.majewski@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mturquette@linaro.org \
    --cc=pawel.moll@arm.com \
    --cc=rjw@rjwysocki.net \
    --cc=robh+dt@kernel.org \
    --cc=shawn.guo@linaro.org \
    --cc=t.figa@samsung.com \
    --cc=ta.omasab@gmail.com \
    --cc=viresh.kumar@linaro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.