public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
From: Nishanth Menon <nm@ti.com>
To: "eduardo.valentin@nokia.com" <eduardo.valentin@nokia.com>
Cc: linux-omap <linux-omap@vger.kernel.org>,
	"Cousson, Benoit" <b-cousson@ti.com>,
	Kevin Hilman <khilman@deeprootsystems.com>,
	"Chikkature Rajashekar, Madhusudhan" <madhu.cr@ti.com>,
	Paul Walmsley <paul@pwsan.com>, "Dasgupta, Romit" <romit@ti.com>,
	"Premi, Sanjeev" <premi@ti.com>,
	"Shilimkar, Santosh" <santosh.shilimkar@ti.com>,
	"Aguirre, Sergio" <saaguirre@ti.com>,
	"Gopinath, Thara" <thara@ti.com>,
	"Sripathy, Vishwanath" <vishwanath.bs@ti.com>
Subject: Re: [PATCH 09/10 V3] omap3: pm: introduce 3630 opps
Date: Tue, 8 Dec 2009 08:15:57 -0600	[thread overview]
Message-ID: <4B1E5F9D.9090403@ti.com> (raw)
In-Reply-To: <20091208114036.GC18549@esdhcp037198.research.nokia.com>

Eduardo Valentin had written, on 12/08/2009 05:40 AM, the following:
> On Tue, Dec 08, 2009 at 12:31:13PM +0100, ext Nishanth Menon wrote:
>> Eduardo Valentin said the following on 12/08/2009 05:18 AM:
>>> On Tue, Dec 08, 2009 at 11:59:49AM +0100, ext Nishanth Menon wrote:
>>>
>>>> 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)
>>>>
>>> Nice,
>>>
>>>
>>>>> 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..
>>>>
>>> Yeah, but if you have multiple board configuration, at compile time, your check
>>> should add all selected tables.
>>>
>>> I just pointed that because it is the way I see in current code. You check at
>>> compile time if you define tables or not, then at runtime you check which table
>>> to use. That should still work for multi board configuration (using same image
>>> for sdp3430 or sdp3630).
>>>
>>>
>>> Check  arch/arm/mach-omap2/mux.c or arch/arm/mach-omap2/mcbsp.c.
>>>
>>> There are other examples.  If you take a look on those you will see that it is
>>> same issue you are dealing, defining static tables for several omap versions and then
>>> just selecting which one to use at runtime. Besides, in mux.c you see that all are
>>> also __initdata_or_module.
>>>
>> I think I still dont understand your intention ->
>> a) pm34xx.c will not be a module -> it is meant to be built in, so
>> __module addition to __initdata does not make any sense to it.
> 
> Well, I just commented that those have the "init" flag you mention earlier.
> 
>> b) arch/arm/mach-omap2/pm34xx.c is omap3 series only build ONLY when OMAP3 is defined, there are only two of those families rt now, 34xx (of which 35xx is one), and 36xx series..
>> so I dont need an enormous array definition like mux.h http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=blob;f=arch/arm/mach-omap2/mux.c;h=c18a94eca641d61826fbad85322bc9f3d2cb4841;hb=HEAD#l257 where it is #ifdef OMAP3..
>>
>> I am not trying to define for various OMAP versions, I am trying to
>> define for various OMAP3 versions.. I hope this clarifies.
> 
> I still see as "a set of omap versions" support that is compiled in then
> and you choose which one to use at run time.
> 
As discussed on irc [1] and in l-o [2] previously, dropping the #ifdef 
proposal.

> 
>>>
>>>>>
>>>>>> +
>>>>>> +  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
>>>>>>
>>>>>>
>>>>>
>>>
> 
> --
> Eduardo Valentin


-- 
Regards,
Nishanth Menon
Ref:
[1] http://omapzoom.org/ozbotlogs/index.php?date=2009-12-08#T12:58:13
[2] http://marc.info/?t=125343303400003&r=1&w=2

  reply	other threads:[~2009-12-08 14:15 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
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 [this message]
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=4B1E5F9D.9090403@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox