[U-Boot] [PATCH v2] TI: DaVinci DA850 EVM: support passing device speed grade information to kernel
Detlev Zundel
dzu at denx.de
Fri Aug 13 10:30:21 CEST 2010
Hi Nori,
>> > The TI DA850/OMAP-L138/AM18x EVM can be populated with devices
>> > of different speed grades.
>> >
>> > The maximum speed the chip can support can only be determined from
>> > the label on the package (not software readable).
>> >
>> > Introduce a method to pass the speed grade information to kernel
>> > using ATAG_REVISION. The kernel uses this information to determine
>> > the maximum speed reachable using cpufreq.
>>
>> Do I understand you correctly that you _misuses_ an atag defined to
>> carry the revision of a CPU to carry the maximum allowed clock
>> frequency?
>
> The EVM can be populated with devices of different speed grades and this
> patch treats those as different revisions of the EVM. Why would this be
> treated as a misuse of ATAG_REVISION?
A revision for me is attached to certain bugs/problems which we may need
to work around in software. Think about something like "we can enable
caching only on rev2 CPUs". For all I know, the ATAG_REVISION tag seems
to capture this aspect. The maximum speed of a CPU is orthogonal for
me, i.e. there can still be a fast and a slow rev 1 CPU but still we
cannot enable cache. Do you see my point? If you want to express a
maximum speed, then use an ATAG which supports such a usage. Reading
the name ATAG_REVISION in code I would _never_ think that this
transports the maximum clock frequency.
>> Is this really a good idea? I can easily imagine different
>> CPU revisions with different maximum clock frequencies. How will you
>> handle that?
>
> I don't think I understood you. This patch _is_ meant to handle
> different revisions of DA850 EVMs populated with DA850 devices
> of differing speed grades.
I hope I explained my point better this time.
>> > Note that U-Boot itself does not set the CPU rate. The CPU
>> > speed is setup by a primary bootloader ("UBL"). The rate setup
>> > by UBL could be different from the maximum speed grade of the
>> > device.
>>
>> I do not understand how the UBL gets to set the _U-Boot_ environment
>> variable "maxspeed". Can you please explain how this is done?
>
> UBL does not (cannot) set the maxspeed variable. The user of U-Boot is
> expected to set it based on what he sees on the packaging. Alternately
> he can also change the U-Boot configuration file and re-build U-Boot.
> UBL will setup the board to work at the common frequency of 300 MHz.
I see, so please write in the documentation that the user is supposed to
set this variable correctly for his chip. I did not read this from the
text.
>> > Signed-off-by: Sekhar Nori <nsekhar at ti.com>
>> > ---
>> > v2: removed unnecessary logical OR while constructing revision value
>> >
>> > board/davinci/da8xxevm/da850evm.c | 38 +++++++++++++++++++++++++++++++++++++
>> > include/configs/da850evm.h | 1 +
>> > 2 files changed, 39 insertions(+), 0 deletions(-)
>> >
>> > diff --git a/board/davinci/da8xxevm/da850evm.c b/board/davinci/da8xxevm/da850evm.c
>> > index eeb456c..0eb3608 100644
>> > --- a/board/davinci/da8xxevm/da850evm.c
>> > +++ b/board/davinci/da8xxevm/da850evm.c
>> > @@ -70,6 +70,44 @@ static const struct lpsc_resource lpsc[] = {
>> > { DAVINCI_LPSC_GPIO },
>> > };
>> >
>> > +#ifndef CONFIG_DA850_EVM_MAX_SPEED
>> > +#define CONFIG_DA850_EVM_MAX_SPEED 300000
>> > +#endif
>> > +
>> > +/*
>> > + * get_board_rev() - setup to pass kernel board revision information
>> > + * Returns:
>> > + * bit[0-3] Maximum speed supported by the DA850/OMAP-L138/AM18x part
>> > + * 0 - 300 MHz
>> > + * 1 - 372 MHz
>> > + * 2 - 408 MHz
>> > + * 3 - 456 MHz
>>
>> The description says it returns "bit[0-3]" which may seem that those
>> canstants are encoded by a single bit each, whereas the code uses
>> integer values. Change either the comment or the code.
>
> [0-3] usually indicates the range the range 0 to 3. Do you have
> suggestions on how else this might be documented?
As I said, "bit[0-3]" denotes the 4 bits 0-3, i.e. a range from 0-15.
(In this context the numbers below would actually translate into
individual bits.) Just drop this "bit[0-3]" and it is clear.
>> Moreover I do not like that you call the variable "maxpseed" but
>> interpret the value in kHz. Maybe the variable should be called
>> "maxspeed_khz"?
>
> I am hoping the documentation promised in the response above
> will help clarify its usage. I wanted to keep the variable name
> short.
Shortness is a worthwhile goal but clearness even more so. Those 4
characters would prevent anyone from ever looking into the documentation
on deciding what unit the value is in. Personally I believe this is
worth it. I still remember old times when the Linux kernel for PowerPC
switched from its interpretation of clock frequencies from hz to mhz and
the many support questions it generated....
Cheers
Detlev
--
Of course my password is the same as my pet's name
My macaw's name was Q47pY!3 and I change it every 90 days
-- Trevor Linton
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de
More information about the U-Boot
mailing list