From: "Menon, Nishanth" <nm@ti.com>
To: eduardo.valentin@nokia.com
Cc: linux-omap <linux-omap@vger.kernel.org>,
Benoit Cousson <b-cousson@ti.com>,
Kevin Hilman <khilman@deeprootsystems.com>,
Madhusudhan Chikkature Rajashekar <madhu.cr@ti.com>,
Paul Walmsley <paul@pwsan.com>, Romit Dasgupta <romit@ti.com>,
Sanjeev Premi <premi@ti.com>,
Santosh Shilimkar <santosh.shilimkar@ti.com>,
Sergio Alberto Aguirre Rodriguez <saaguirre@ti.com>,
Thara Gopinath <thara@ti.com>,
Vishwanath Sripathy <vishwanath.bs@ti.com>
Subject: Re: [PATCH 09/10 V3] omap3: pm: introduce 3630 opps
Date: Tue, 08 Dec 2009 04:59:49 -0600 [thread overview]
Message-ID: <4B1E31A5.10701@ti.com> (raw)
In-Reply-To: <20091208074900.GB23829@esdhcp037198.research.nokia.com>
Hi,
thanks for your comments. few thoughts below.
Eduardo Valentin said the following on 12/08/2009 01:49 AM:
> Hello Nishanth,
>
> Few comments bellow.
>
> On Wed, Nov 25, 2009 at 05:09:18AM +0100, ext Nishanth Menon wrote:
>
>> Introduce the OMAP3630 OPPs including the defined OPP tuples.
>>
>> Further information on OMAP3630 can be found here:
>> http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&navigationId=12836&contentId=52606
>>
>> OMAP36xx family introduces:
>> VDD1 with 4 OPPs, of which OPP3 & 4 are available only on devices yet
>> to be introduced in 36xx family. Meanwhile, VDD2 has 2 opps.
>>
>> Device Support of OPPs->
>> |<-3630-600->| (default)
>> |<- 3630-800 ->| (device: TBD)
>> |<- 3630-1000 ->| (device: TBD)
>> H/w OPP-> OPP50 OPP100 OPP-Turbo OPP1G-SB
>> VDD1 OPP1 OPP2 OPP3 OPP4
>> VDD2 OPP1 OPP2 OPP2 OPP2
>>
>> Note:
>> a) TI h/w naming for OPPs are now standardized in terms of OPP50, 100,
>> Turbo and SB. This maps as shown above to the opp IDs (s/w term).
>> b) For boards which need custom VDD1/2 OPPs, the opp table can be
>> updated by the board file on a need basis after the
>> omap3_pm_init_opp_table call. The OPPs introduced here are the
>> official OPP table at this point in time.
>>
>> Cc: Benoit Cousson <b-cousson@ti.com>
>> Cc: Kevin Hilman <khilman@deeprootsystems.com>
>> Cc: Madhusudhan Chikkature Rajashekar <madhu.cr@ti.com>
>> Cc: Paul Walmsley <paul@pwsan.com>
>> Cc: Romit Dasgupta <romit@ti.com>
>> Cc: Sanjeev Premi <premi@ti.com>
>> Cc: Santosh Shilimkar <santosh.shilimkar@ti.com>
>> Cc: Sergio Alberto Aguirre Rodriguez <saaguirre@ti.com>
>> Cc: Thara Gopinath <thara@ti.com>
>> Cc: Vishwanath Sripathy <vishwanath.bs@ti.com>
>>
>> Signed-off-by: Nishanth Menon <nm@ti.com>
>> ---
>> arch/arm/mach-omap2/pm34xx.c | 49 ++++++++++++++++++++++++++++++++++++++++-
>> 1 files changed, 47 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
>> index ad21f5f..05ecf02 100644
>> --- a/arch/arm/mach-omap2/pm34xx.c
>> +++ b/arch/arm/mach-omap2/pm34xx.c
>> @@ -143,6 +143,41 @@ static struct omap_opp_def __initdata omap34xx_dsp_rate_table[] = {
>> {.enabled = 0, .freq = 0, .u_volt = 0}
>> };
>>
>> +static struct omap_opp_def __initdata omap36xx_mpu_rate_table[] = {
>> + /*OPP1 - OPP50*/
>> + {.enabled = true, .freq = 300000000, .u_volt = 930000},
>> + /*OPP2 - OPP100*/
>> + {.enabled = true, .freq = 600000000, .u_volt = 1100000},
>> + /*OPP3 - OPP-Turbo*/
>> + {.enabled = false, .freq = 800000000, .u_volt = 1260000},
>> + /*OPP4 - OPP-SB*/
>> + {.enabled = false, .freq = 1000000000, .u_volt = 1310000},
>> + /* Terminator */
>> + {.enabled = 0, .freq = 0, .u_volt = 0}
>> +};
>> +
>> +static struct omap_opp_def __initdata omap36xx_l3_rate_table[] = {
>> + /*OPP1 - OPP50 */
>> + {.enabled = true, .freq = 100000000, .u_volt = 930000},
>> + /*OPP2 - OPP100, OPP-Turbo, OPP-SB*/
>> + {.enabled = true, .freq = 200000000, .u_volt = 1137500},
>> + /* Terminator */
>> + {.enabled = 0, .freq = 0, .u_volt = 0}
>> +};
>> +
>> +static struct omap_opp_def __initdata omap36xx_dsp_rate_table[] = {
>> + /*OPP1 - OPP50*/
>> + {.enabled = true, .freq = 260000000, .u_volt = 930000},
>> + /*OPP2 - OPP100*/
>> + {.enabled = true, .freq = 520000000, .u_volt = 1100000},
>> + /*OPP3 - OPP-Turbo*/
>> + {.enabled = false, .freq = 660000000, .u_volt = 1260000},
>> + /*OPP4 - OPP-SB*/
>> + {.enabled = false, .freq = 875000000, .u_volt = 1310000},
>> + /* Terminator */
>> + {.enabled = 0, .freq = 0, .u_volt = 0}
>> +};
>> +
>>
>
> Although it is not mandatory, I'd say this way of initializing structure array is more common:
>
> static struct omap_opp_def __initdata omap36xx_dsp_rate_table[] = {
> /*OPP1 - OPP50*/
> {
> .enabled = true,
> .freq = 260000000,
> .u_volt = 930000,
> },
> /*OPP2 - OPP100*/
> {
> .enabled = true,
> .freq = 520000000,
> .u_volt = 1100000,
> },
> /*OPP3 - OPP-Turbo*/
> {
> .enabled = false,
> .freq = 660000000,
> .u_volt = 1260000,
> },
> /*OPP4 - OPP-SB*/
> {
> .enabled = false,
> .freq = 875000000,
> .u_volt = 1310000,
> },
> /* Terminator */
> {
> .enabled = 0,
> .freq = 0,
> .u_volt = 0,
> }
> };
>
> and if you thing it is line consuming, you can always define a "INIT" macro:
> #define OMAP_OPP_DEF(_enabled, _freq, _uv) \
> { \
> .enabled = _enabled, \
> .freq = _freq, \
> .u_volt = _uv, \
> }
>
> and use it to initialize your array:
>
> /*OPP1 - OPP50*/
> static struct omap_opp_def __initdata omap36xx_dsp_rate_table[] = {
> OMAP_OPP_DEF(true, 260000000, 930000),
> OMAP_OPP_DEF(true, 520000000, 1100000),
> OMAP_OPP_DEF(false, 660000000, 1260000),
> OMAP_OPP_DEF(false, 875000000, 1310000},
> OMAP_OPP_DEF(0, 0, 0),
> };
>
Thanks. yep, I agree this looks cleaner. I vote for this. probably will
use OMAP_OPP_TERM to denote (0,0,0)
>
> Beside, although it should not hurt as they are not too big, these tables should
> be compiled only if omap3630 is the target right?
>
>
>> struct omap_opp *omap3_mpu_rate_table;
>> struct omap_opp *omap3_dsp_rate_table;
>> struct omap_opp *omap3_l3_rate_table;
>> @@ -1299,18 +1334,28 @@ static void __init configure_vc(void)
>> void __init omap3_pm_init_opp_table(void)
>> {
>> int ret, i;
>> + struct omap_opp_def **omap3_opp_def_list;
>> struct omap_opp_def *omap34xx_opp_def_list[] = {
>> omap34xx_mpu_rate_table,
>> omap34xx_l3_rate_table,
>> omap34xx_dsp_rate_table
>> };
>> + struct omap_opp_def *omap36xx_opp_def_list[] = {
>> + omap36xx_mpu_rate_table,
>> + omap36xx_l3_rate_table,
>> + omap36xx_dsp_rate_table
>> + };
>> struct omap_opp **omap3_rate_tables[] = {
>> &omap3_mpu_rate_table,
>> &omap3_l3_rate_table,
>> &omap3_dsp_rate_table
>> };
>> - for (i = 0; i < ARRAY_SIZE(omap34xx_opp_def_list); i++) {
>> - ret = opp_init(omap3_rate_tables[i], omap34xx_opp_def_list[i]);
>> +
>> + omap3_opp_def_list = cpu_is_omap3630() ? omap36xx_opp_def_list :
>> + omap34xx_opp_def_list;
>>
>
> here you cared for runtime target check, but tables above could be avoid if not omap3630.
>
If your concern is memory size: the tables are __initdata, they will get
freed once kernel boot is complete. the only representation of omap_opp
will be what the opp layer's definition of the same.
The intention was to be able to have a single uImage booting across
multiple boards with multiple silicon -> e.g. today same uImage with
omap_pm_defconfig will equally boot on sdp3430 as it does on sdp3630..
which is what we all prefer.. so no ways of a compile time inclusion- it
has to be runtime determined..
>
>> +
>> + for (i = 0; i < ARRAY_SIZE(omap3_rate_tables); i++) {
>> + ret = opp_init(omap3_rate_tables[i], omap3_opp_def_list[i]);
>> /* We dont want half configured system at the moment */
>> BUG_ON(ret);
>> }
>> --
>> 1.6.3.3
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
>
next prev parent reply other threads:[~2009-12-08 10:59 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-25 4:09 [PATCH 00/10 v3] omap3: pm: introduce support for 3630 OPPs Nishanth Menon
2009-11-25 4:09 ` [PATCH 01/10] omap3: pm: introduce enabled flag to omap_opp Nishanth Menon
2009-11-25 4:09 ` [PATCH 02/10 V3] omap3: pm: introduce opp accessor functions Nishanth Menon
2009-11-25 4:09 ` [PATCH 03/10 V3] omap3: pm: use opp accessor functions for omap34xx Nishanth Menon
2009-11-25 4:09 ` [PATCH 04/10 V3] omap3: pm: srf: use opp accessor functions Nishanth Menon
2009-11-25 4:09 ` [PATCH 05/10 V3] omap3: pm: sr: replace get_opp with freq_to_opp Nishanth Menon
2009-11-25 4:09 ` [PATCH 06/10 V3] omap3: pm: use opp accessor functions for omap-target Nishanth Menon
2009-11-25 4:09 ` [PATCH 07/10 V3] omap3: clk: use pm accessor functions for cpufreq table Nishanth Menon
2009-11-25 4:09 ` [PATCH 08/10] omap3: pm: remove VDDx_MIN/MAX macros Nishanth Menon
2009-11-25 4:09 ` [PATCH 09/10 V3] omap3: pm: introduce 3630 opps Nishanth Menon
2009-11-25 4:09 ` [PATCH 10/10] omap3: pm: omap3630 boards: enable 3630 opp tables Nishanth Menon
2009-12-08 7:49 ` [PATCH 09/10 V3] omap3: pm: introduce 3630 opps Eduardo Valentin
2009-12-08 10:59 ` Menon, Nishanth [this message]
2009-12-08 11:18 ` Eduardo Valentin
2009-12-08 11:31 ` Menon, Nishanth
2009-12-08 11:40 ` Eduardo Valentin
2009-12-08 14:15 ` Nishanth Menon
2009-12-07 16:54 ` [PATCH 07/10 V3] omap3: clk: use pm accessor functions for cpufreq table Tero.Kristo
2009-12-08 11:09 ` Menon, Nishanth
2009-12-08 7:54 ` Eduardo Valentin
2009-11-25 17:56 ` [PATCH 06/10 V3] omap3: pm: use opp accessor functions for omap-target Kevin Hilman
2009-12-08 7:59 ` Eduardo Valentin
2009-12-07 16:59 ` [PATCH 04/10 V3] omap3: pm: srf: use opp accessor functions Tero.Kristo
2009-12-08 11:14 ` Menon, Nishanth
2009-11-25 17:22 ` [PATCH 03/10 V3] omap3: pm: use opp accessor functions for omap34xx Kevin Hilman
2009-11-25 17:27 ` Kevin Hilman
2009-12-07 17:02 ` Tero.Kristo
2009-12-08 11:16 ` Menon, Nishanth
2009-12-08 8:08 ` Eduardo Valentin
2009-11-25 16:30 ` [PATCH 02/10 V3] omap3: pm: introduce opp accessor functions Kevin Hilman
2009-11-25 20:31 ` Nishanth Menon
2009-11-25 23:46 ` Kevin Hilman
2009-11-26 0:22 ` Menon, Nishanth
2009-12-08 8:23 ` Eduardo Valentin
2009-12-08 11:01 ` Menon, Nishanth
2009-11-25 15:24 ` [PATCH 00/10 v3] omap3: pm: introduce support for 3630 OPPs Kevin Hilman
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=4B1E31A5.10701@ti.com \
--to=nm@ti.com \
--cc=b-cousson@ti.com \
--cc=eduardo.valentin@nokia.com \
--cc=khilman@deeprootsystems.com \
--cc=linux-omap@vger.kernel.org \
--cc=madhu.cr@ti.com \
--cc=paul@pwsan.com \
--cc=premi@ti.com \
--cc=romit@ti.com \
--cc=saaguirre@ti.com \
--cc=santosh.shilimkar@ti.com \
--cc=thara@ti.com \
--cc=vishwanath.bs@ti.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 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.