"Cousson, Benoit" <b-cous...@ti.com> writes:

> Hi Kevin,
>
>> -----Original Message-----
>> From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
>> ow...@vger.kernel.org] On Behalf Of Nishanth Menon
>> Sent: Monday, October 05, 2009 7:19 PM
>> To: linux-omap@vger.kernel.org
>> Cc: Premi, Sanjeev; Kevin H
>> Subject: Re: Question on OPP table handling
>> 
>> Kevin Hilman had written, on 10/05/2009 11:56 AM, the following:
>> > "Premi, Sanjeev" <pr...@ti.com> writes:
>> >
>> >>> -----Original Message-----
>> >>> From: Nishanth Menon [mailto:menon.nisha...@gmail.com]
>> >>> Sent: Saturday, October 03, 2009 8:35 PM
>> >>> To: Premi, Sanjeev
>> >>> Cc: linux-omap@vger.kernel.org
>> >>> Subject: Question on OPP table handling
>> >>>
>> >>> Sanjeev Premi said the following on 10/01/2009 01:03 PM:
>> >>>> +struct omap_opp omap3_mpu_rate_table[] = {
>> >>>> +       {0, 0, 0},
>> >>>> +       /*OPP1*/
>> >>>> +       {S125M, VDD1_OPP1, 0x1E},
>> >>>> +       /*OPP2*/
>> >>>> +       {S250M, VDD1_OPP2, 0x26},
>> >>>> +       /*OPP3*/
>> >>>> +       {S500M, VDD1_OPP3, 0x30},
>> >>>> +       /*OPP4*/
>> >>>> +       {S550M, VDD1_OPP4, 0x36},
>> >>>> +       /*OPP5*/
>> >>>> +       {S600M, VDD1_OPP5, 0x3C},
>> >>>> +};
>> >>>>
>> >>> For those involved,
>> >>> if we wanted to convert omap3_mpu_table[] into
>> >>> *omap3_mpu_table so that
>> >>> we dynamically initialize it based on cpu type - what would be the
>> >>> recommendations?
>> >> Nishanth,
>> >>
>> >> Good idea!
>> >>
>> >> As a table, previous patch enables it (not as intent, but due to
>> syntax):
>> >>
>> >>   >  +/* struct omap_opp_table - View OPP table as an object
>> >>   > + * @min: Minimum OPP id
>> >>   > + * @max: Maximim OPP id
>> >>   > + * @opps: Pointer to array defining the OPPs.
>> >>   > + *
>> >>   > + * An OPP table has varied length. Knowing minimum and maximum
>> >>   > + * OPP ids allow easy traversal.
>> >>   > + */
>> >>   > +struct omap_opp_table {
>> >>   > +       u8      min;
>> >>   > +       u8      max;
>> >>   > +       struct omap_opp* opps;
>> >>   > +};
>> >>
>> >> But now, I think it would be good to have an API that can fill an
>> opp_table:
>> >>
>> >> int add_opp_definition(u8 id, u32 freq, u16 vsel);
>> >>
>> >> ...and, if an array is preferred, length can be set as:
>> >> int set_opp_table_length (u8 max);
>> >
>> > I'm all for dynamic OPP setting, but not as an array.  A list should
>> > probably be used.
>> 
>> Won't a list implementation cause more than necessary overhead? I agree
>> that something like set_opp_table_length probably might be redundant in
>> that case.
>
> I'm aligned with Nishanth. I think a static table with the possibility to 
> disable some entry is good enough to deal with most of the OPPs we have on 
> OMAP3 and we will have to handle on OMAP4.
>
> OPPs are defined during silicon characterization, and should not be changed 
> dynamically (in theory).
>
> Do you have something in mind that might justify a dynamic management?
>

Ultimately, I don't really care what the data structure used is.

My primary concern is that at run-time (not just boot time) OPPs can
be disabled/invalidated so that they are not available to DVFS.

There are many reasons for this

- chip bugs
- CPUfreq policies can disable/enable certain OPPs
- speed-rated silicon
- thermal management
- etc.

Kevin
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to