From: Rob Herring <robherring2@gmail.com>
To: Richard Zhao <richard.zhao@freescale.com>
Cc: Jamie Iles <jamie@jamieiles.com>,
linux@arm.linux.org.uk, arnd@arndb.de,
mark.langsdorf@calxeda.com, linaro-dev@lists.linaro.org,
marc.zyngier@arm.com, catalin.marinas@arm.com,
devicetree-discuss@lists.ozlabs.org, patches@linaro.org,
bryanh@codeaurora.org, cpufreq@vger.kernel.org,
grant.likely@secretlab.ca, rdunlap@xenotime.net,
eric.miao@linaro.org, kernel@pengutronix.de, davej@redhat.com,
davidb@codeaurora.org, shawn.guo@linaro.org,
Richard Zhao <richard.zhao@linaro.org>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH V3 4/7] cpufreq: add generic cpufreq driver
Date: Tue, 20 Dec 2011 09:13:22 -0600 [thread overview]
Message-ID: <4EF0A612.2060400@gmail.com> (raw)
In-Reply-To: <20111220015934.GD15863@b20223-02.ap.freescale.net>
On 12/19/2011 07:59 PM, Richard Zhao wrote:
> On Mon, Dec 19, 2011 at 09:00:44AM -0600, Rob Herring wrote:
>> On 12/19/2011 08:39 AM, Jamie Iles wrote:
>>> On Mon, Dec 19, 2011 at 10:19:29PM +0800, Richard Zhao wrote:
>>>> On Mon, Dec 19, 2011 at 10:05:12AM +0000, Jamie Iles wrote:
>>>>> Hi Richard,
>>>>>
>>>>> On Mon, Dec 19, 2011 at 11:21:40AM +0800, Richard Zhao wrote:
>>>>>> It support single core and multi-core ARM SoCs. But currently it assume
>>>>>> all cores share the same frequency and voltage.
>>>>>>
>>>>>> Signed-off-by: Richard Zhao <richard.zhao@linaro.org>
>>>>>> ---
>>>>>> .../devicetree/bindings/cpufreq/generic-cpufreq | 7 +
>>>>>> drivers/cpufreq/Kconfig | 8 +
>>>>>> drivers/cpufreq/Makefile | 2 +
>>>>>> drivers/cpufreq/generic-cpufreq.c | 251 ++++++++++++++++++++
>>>>>> 4 files changed, 268 insertions(+), 0 deletions(-)
>>>>>> create mode 100644 Documentation/devicetree/bindings/cpufreq/generic-cpufreq
>>>>>> create mode 100644 drivers/cpufreq/generic-cpufreq.c
>>>>>>
>>>>>> diff --git a/Documentation/devicetree/bindings/cpufreq/generic-cpufreq b/Documentation/devicetree/bindings/cpufreq/generic-cpufreq
>>>>>> new file mode 100644
>>>>>> index 0000000..15dd780
>>>>>> --- /dev/null
>>>>>> +++ b/Documentation/devicetree/bindings/cpufreq/generic-cpufreq
>>>>>> @@ -0,0 +1,7 @@
>>>>>> +Generic cpufreq driver
>>>>>> +
>>>>>> +Required properties in /cpus/cpu@0:
>>>>>> +- compatible : "generic-cpufreq"
>>>>>
>>>>> I'm not convinced this is the best way to do this. By requiring a
>>>>> generic-cpufreq compatible string we're encoding Linux driver
>>>>> information into the hardware description. The only way I can see to
>>>>> avoid this is to provide a generic_clk_cpufreq_init() function that
>>>>> platforms can call in their machine init code to use the driver.
>>
>> Agreed on the compatible string.
> Assume you reject to use compatible string.
>> It's putting Linux specifics into DT.
>>
>> You could flip this around and have the module make a call into the
>> kernel to determine whether to initialize or not. Then platforms could
>> set a flag to indicate this.
> Could you make it more clear? kernel global variable, macro, or function?
Any of those. Of course, direct access to variables across modules is
discouraged, so it would probably be a function that checks a variable.
> - Following your idea, I think, we can add in driver/cpufreq/cpufreq.c:
> int (*clk_reg_cpufreq_get_op_table) (struct op_table *tbl, int *size);
> SoC code set the callback. If it's NULL, driver will exit. We can get rid
> of DT. It'll make cpufreq core dirty, but it's the only file built-in.
But aren't you getting the operating points from the DT? Then you don't
want to put this code into each platform.
>
> - Drop module support. SoC call generic_clk_cpufreq_init as Jamie said.
>
>>
>>>> It'll prevent the driver from being a kernel module.
>>>
>>> Hmm, that's not very nice either! I guess you _could_ add an
>>> of_machine_is_compatible() check against a list of compatible machines
>>> in the driver but that feels a little gross. Hopefully Rob or Grant
>>> have a good alternative!
>>>
>>
>> What does cpufreq core do if multiple drivers are registered?
> current cpufreq core only support one cpufreq_driver. Others will fail
> except the first time.
Then whoever gets there first wins. Make your driver register late and
if someone doesn't want to use it they can register a custom driver earlier.
Rob
>> Perhaps a
>> ranking is needed and this would only get enabled if there are no other
>> drivers and other conditions like having the clock "cpu" present are met.
> We'd better keep cpufreq core simple. For this driver, register cpufreq_driver
> is the last thing after checking all conditions.
>
>>
>> Rob
>>
>>>> Hi Grant & Rob,
>>>>
>>>> Could you comment?
>>>>
>>>>>
>>>>>> +- cpu-freqs : cpu frequency points it support
>>>>>> +- cpu-volts : cpu voltages required by the frequency point at the same index
>>>>>> +- trans-latency : transition_latency
>>>>>> diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
>>>>>> index e24a2a1..216eecd 100644
>>>>>> --- a/drivers/cpufreq/Kconfig
>>>>>> +++ b/drivers/cpufreq/Kconfig
>>>>>> @@ -179,6 +179,14 @@ config CPU_FREQ_GOV_CONSERVATIVE
>>>>>>
>>>>>> If in doubt, say N.
>>>>>>
>>>>>> +config GENERIC_CPUFREQ_DRIVER
>>>>>> + bool "Generic cpufreq driver using clock/regulator/devicetree"
>>>>>> + help
>>>>>> + This adds generic CPUFreq driver. It assumes all
>>>>>> + cores of the CPU share the same clock and voltage.
>>>>>> +
>>>>>> + If in doubt, say N.
>>>>>
>>>>> I think this needs dependencies on HAVE_CLK, OF and REGULATOR.
>>>> right, Thanks. I can not check clk before generic clock framework
>>>> come in.
>>>> Added:
>>>> depends on OF && REGULATOR
>>>> select CPU_FREQ_TABLE
>>>
>>> You can still use HAVE_CLK. That symbol has been around for ages and
>>> any platform implementing the clk API should select it so it's fine to
>>> depend on it even before there is a generic struct clk.
> You are right. Thanks.
>
> Richard
>>>
>>> Jamie
>>
>> _______________________________________________
>> linux-arm-kernel mailing list
>> linux-arm-kernel@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>>
>
WARNING: multiple messages have this Message-ID (diff)
From: robherring2@gmail.com (Rob Herring)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V3 4/7] cpufreq: add generic cpufreq driver
Date: Tue, 20 Dec 2011 09:13:22 -0600 [thread overview]
Message-ID: <4EF0A612.2060400@gmail.com> (raw)
In-Reply-To: <20111220015934.GD15863@b20223-02.ap.freescale.net>
On 12/19/2011 07:59 PM, Richard Zhao wrote:
> On Mon, Dec 19, 2011 at 09:00:44AM -0600, Rob Herring wrote:
>> On 12/19/2011 08:39 AM, Jamie Iles wrote:
>>> On Mon, Dec 19, 2011 at 10:19:29PM +0800, Richard Zhao wrote:
>>>> On Mon, Dec 19, 2011 at 10:05:12AM +0000, Jamie Iles wrote:
>>>>> Hi Richard,
>>>>>
>>>>> On Mon, Dec 19, 2011 at 11:21:40AM +0800, Richard Zhao wrote:
>>>>>> It support single core and multi-core ARM SoCs. But currently it assume
>>>>>> all cores share the same frequency and voltage.
>>>>>>
>>>>>> Signed-off-by: Richard Zhao <richard.zhao@linaro.org>
>>>>>> ---
>>>>>> .../devicetree/bindings/cpufreq/generic-cpufreq | 7 +
>>>>>> drivers/cpufreq/Kconfig | 8 +
>>>>>> drivers/cpufreq/Makefile | 2 +
>>>>>> drivers/cpufreq/generic-cpufreq.c | 251 ++++++++++++++++++++
>>>>>> 4 files changed, 268 insertions(+), 0 deletions(-)
>>>>>> create mode 100644 Documentation/devicetree/bindings/cpufreq/generic-cpufreq
>>>>>> create mode 100644 drivers/cpufreq/generic-cpufreq.c
>>>>>>
>>>>>> diff --git a/Documentation/devicetree/bindings/cpufreq/generic-cpufreq b/Documentation/devicetree/bindings/cpufreq/generic-cpufreq
>>>>>> new file mode 100644
>>>>>> index 0000000..15dd780
>>>>>> --- /dev/null
>>>>>> +++ b/Documentation/devicetree/bindings/cpufreq/generic-cpufreq
>>>>>> @@ -0,0 +1,7 @@
>>>>>> +Generic cpufreq driver
>>>>>> +
>>>>>> +Required properties in /cpus/cpu at 0:
>>>>>> +- compatible : "generic-cpufreq"
>>>>>
>>>>> I'm not convinced this is the best way to do this. By requiring a
>>>>> generic-cpufreq compatible string we're encoding Linux driver
>>>>> information into the hardware description. The only way I can see to
>>>>> avoid this is to provide a generic_clk_cpufreq_init() function that
>>>>> platforms can call in their machine init code to use the driver.
>>
>> Agreed on the compatible string.
> Assume you reject to use compatible string.
>> It's putting Linux specifics into DT.
>>
>> You could flip this around and have the module make a call into the
>> kernel to determine whether to initialize or not. Then platforms could
>> set a flag to indicate this.
> Could you make it more clear? kernel global variable, macro, or function?
Any of those. Of course, direct access to variables across modules is
discouraged, so it would probably be a function that checks a variable.
> - Following your idea, I think, we can add in driver/cpufreq/cpufreq.c:
> int (*clk_reg_cpufreq_get_op_table) (struct op_table *tbl, int *size);
> SoC code set the callback. If it's NULL, driver will exit. We can get rid
> of DT. It'll make cpufreq core dirty, but it's the only file built-in.
But aren't you getting the operating points from the DT? Then you don't
want to put this code into each platform.
>
> - Drop module support. SoC call generic_clk_cpufreq_init as Jamie said.
>
>>
>>>> It'll prevent the driver from being a kernel module.
>>>
>>> Hmm, that's not very nice either! I guess you _could_ add an
>>> of_machine_is_compatible() check against a list of compatible machines
>>> in the driver but that feels a little gross. Hopefully Rob or Grant
>>> have a good alternative!
>>>
>>
>> What does cpufreq core do if multiple drivers are registered?
> current cpufreq core only support one cpufreq_driver. Others will fail
> except the first time.
Then whoever gets there first wins. Make your driver register late and
if someone doesn't want to use it they can register a custom driver earlier.
Rob
>> Perhaps a
>> ranking is needed and this would only get enabled if there are no other
>> drivers and other conditions like having the clock "cpu" present are met.
> We'd better keep cpufreq core simple. For this driver, register cpufreq_driver
> is the last thing after checking all conditions.
>
>>
>> Rob
>>
>>>> Hi Grant & Rob,
>>>>
>>>> Could you comment?
>>>>
>>>>>
>>>>>> +- cpu-freqs : cpu frequency points it support
>>>>>> +- cpu-volts : cpu voltages required by the frequency point at the same index
>>>>>> +- trans-latency : transition_latency
>>>>>> diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
>>>>>> index e24a2a1..216eecd 100644
>>>>>> --- a/drivers/cpufreq/Kconfig
>>>>>> +++ b/drivers/cpufreq/Kconfig
>>>>>> @@ -179,6 +179,14 @@ config CPU_FREQ_GOV_CONSERVATIVE
>>>>>>
>>>>>> If in doubt, say N.
>>>>>>
>>>>>> +config GENERIC_CPUFREQ_DRIVER
>>>>>> + bool "Generic cpufreq driver using clock/regulator/devicetree"
>>>>>> + help
>>>>>> + This adds generic CPUFreq driver. It assumes all
>>>>>> + cores of the CPU share the same clock and voltage.
>>>>>> +
>>>>>> + If in doubt, say N.
>>>>>
>>>>> I think this needs dependencies on HAVE_CLK, OF and REGULATOR.
>>>> right, Thanks. I can not check clk before generic clock framework
>>>> come in.
>>>> Added:
>>>> depends on OF && REGULATOR
>>>> select CPU_FREQ_TABLE
>>>
>>> You can still use HAVE_CLK. That symbol has been around for ages and
>>> any platform implementing the clk API should select it so it's fine to
>>> depend on it even before there is a generic struct clk.
> You are right. Thanks.
>
> Richard
>>>
>>> Jamie
>>
>> _______________________________________________
>> linux-arm-kernel mailing list
>> linux-arm-kernel at lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>>
>
next prev parent reply other threads:[~2011-12-20 15:13 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-19 3:21 [PATCH V3 0/7] add a generic cpufreq driver Richard Zhao
2011-12-19 3:21 ` Richard Zhao
2011-12-19 3:21 ` [PATCH V3 1/7] ARM: add cpufreq transiton notifier to adjust loops_per_jiffy for smp Richard Zhao
2011-12-19 3:21 ` Richard Zhao
2011-12-21 14:21 ` Richard Zhao
2011-12-21 14:21 ` Richard Zhao
2011-12-19 3:21 ` [PATCH V3 2/7] arm/imx: cpufreq: remove loops_per_jiffy recalculate " Richard Zhao
2011-12-19 3:21 ` Richard Zhao
2011-12-19 3:21 ` [PATCH V3 3/7] cpufreq: OMAP: " Richard Zhao
2011-12-19 3:21 ` Richard Zhao
2011-12-19 3:21 ` [PATCH V3 4/7] cpufreq: add generic cpufreq driver Richard Zhao
2011-12-19 3:21 ` Richard Zhao
2011-12-19 10:05 ` Jamie Iles
2011-12-19 10:05 ` Jamie Iles
2011-12-19 14:19 ` Richard Zhao
2011-12-19 14:19 ` Richard Zhao
2011-12-19 14:39 ` Jamie Iles
2011-12-19 14:39 ` Jamie Iles
2011-12-19 15:00 ` Rob Herring
2011-12-19 15:00 ` Rob Herring
2011-12-20 1:59 ` Richard Zhao
2011-12-20 1:59 ` Richard Zhao
2011-12-20 15:13 ` Rob Herring [this message]
2011-12-20 15:13 ` Rob Herring
[not found] ` <4EF0A612.2060400-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-12-20 22:16 ` Richard Zhao
2011-12-20 15:21 ` Arnd Bergmann
2011-12-20 15:21 ` Arnd Bergmann
[not found] ` <201112201521.37747.arnd-r2nGTMty4D4@public.gmane.org>
2011-12-20 21:57 ` Richard Zhao
2011-12-20 14:59 ` Mark Brown
2011-12-20 14:59 ` Mark Brown
2011-12-20 23:27 ` Richard Zhao
2011-12-20 23:27 ` Richard Zhao
2011-12-20 23:48 ` Mark Brown
2011-12-20 23:48 ` Mark Brown
2011-12-21 1:20 ` Richard Zhao
2011-12-21 1:20 ` Richard Zhao
2011-12-21 1:32 ` Mark Brown
2011-12-21 1:32 ` Mark Brown
2011-12-21 2:24 ` Richard Zhao
2011-12-21 2:24 ` Richard Zhao
[not found] ` <20111221022452.GF15863-iWYTGMXpHj9ITqJhDdzsOjpauB2SiJktrE5yTffgRl4@public.gmane.org>
2011-12-21 2:33 ` Mark Brown
2011-12-21 2:33 ` Mark Brown
2011-12-21 2:51 ` Richard Zhao
2011-12-21 2:51 ` Richard Zhao
2011-12-21 9:27 ` Richard Zhao
2011-12-21 9:27 ` Richard Zhao
2011-12-21 9:43 ` Arnd Bergmann
2011-12-21 9:43 ` Arnd Bergmann
2011-12-21 11:44 ` Kay Sievers
2011-12-21 11:44 ` Kay Sievers
2011-12-21 12:12 ` Mark Brown
2011-12-21 12:12 ` Mark Brown
2011-12-21 12:49 ` Kay Sievers
2011-12-21 12:49 ` Kay Sievers
2011-12-21 14:19 ` Richard Zhao
2011-12-21 14:19 ` Richard Zhao
2011-12-22 0:50 ` Mark Brown
2011-12-22 0:50 ` Mark Brown
2011-12-21 12:11 ` Mark Brown
2011-12-21 12:11 ` Mark Brown
2011-12-19 3:21 ` [PATCH V3 5/7] dts/imx6q: add cpufreq property Richard Zhao
2011-12-19 3:21 ` Richard Zhao
2011-12-19 3:21 ` [PATCH V3 6/7] arm/imx6q: register arm_clk as cpu to clkdev Richard Zhao
2011-12-19 3:21 ` Richard Zhao
2011-12-19 3:21 ` [PATCH V3 7/7] arm/imx6q: select ARCH_HAS_CPUFREQ Richard Zhao
2011-12-19 3:21 ` Richard Zhao
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=4EF0A612.2060400@gmail.com \
--to=robherring2@gmail.com \
--cc=arnd@arndb.de \
--cc=bryanh@codeaurora.org \
--cc=catalin.marinas@arm.com \
--cc=cpufreq@vger.kernel.org \
--cc=davej@redhat.com \
--cc=davidb@codeaurora.org \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=eric.miao@linaro.org \
--cc=grant.likely@secretlab.ca \
--cc=jamie@jamieiles.com \
--cc=kernel@pengutronix.de \
--cc=linaro-dev@lists.linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux@arm.linux.org.uk \
--cc=marc.zyngier@arm.com \
--cc=mark.langsdorf@calxeda.com \
--cc=patches@linaro.org \
--cc=rdunlap@xenotime.net \
--cc=richard.zhao@freescale.com \
--cc=richard.zhao@linaro.org \
--cc=shawn.guo@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.