Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

2009-04-21 Thread Dirk Behme
Dear Premi,

Sanjeev Premi wrote:
> The function display_board_info() displays the silicon
> revision as 2 - based on the return value from get_cpu_rev().
> 
> This is incorrect as the current Si version is 3.1

Thanks for the patch and fixing this!

> This patch displays the correct version; but does not
> change get_cpu_rev() to minimize the code impact.

I wonder if it wouldn't be better (and cleaner) to fix get_cpu_rev()?

A quick grep resulted in 5 (?) locations which might be affected:

./cpu/arm_cortexa8/cpu.c:104:   if (get_cpu_rev() == CPU_3430_ES2) { 

./cpu/arm_cortexa8/cpu.c:134:   if (get_cpu_rev() == CPU_3430_ES2) { 

./cpu/arm_cortexa8/omap3/clock.c:173:   sil_index = get_cpu_rev() - 1; 

./cpu/arm_cortexa8/omap3/sys_info.c:144:if (get_cpu_rev() == 
CPU_3430_ES2)
./cpu/arm_cortexa8/omap3/sys_info.c:237:   sec_s, 
get_cpu_rev());

If we extend the existing macros

#define CPU_3430_ES11
#define CPU_3430_ES22

to e.g.

#define CPU_3430_ES10   1
#define CPU_3430_ES20   2
#define CPU_3430_ES21   3
#define CPU_3430_ES30   4
#define CPU_3430_ES31   5

then the three

== CPU_3430_ES2

will simply become

 >= CPU_3430_ES20

The sil_index = get_cpu_rev() - 1;  needs a deeper look, though.

Regarding the ASCII strings: With the numbers get_cpu_rev()  returns 
we then could index a const struct with the ASCII strings for the 
revision print. E.g.

printf(" ... %s ...", ... omap_revision[get_cpu_rev()] ...);

What do you think?

> Signed-off-by: Sanjeev Premi 
> ---
>  cpu/arm_cortexa8/omap3/sys_info.c |   37 
> +++--
>  1 files changed, 35 insertions(+), 2 deletions(-)
> 
> diff --git a/cpu/arm_cortexa8/omap3/sys_info.c 
> b/cpu/arm_cortexa8/omap3/sys_info.c
> index b385b91..8c6a4d6 100644
> --- a/cpu/arm_cortexa8/omap3/sys_info.c
> +++ b/cpu/arm_cortexa8/omap3/sys_info.c
> @@ -36,6 +36,8 @@ static gpmc_csx_t *gpmc_cs_base = (gpmc_csx_t 
> *)GPMC_CONFIG_CS0_BASE;
>  static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE;
>  static ctrl_t *ctrl_base = (ctrl_t *)OMAP34XX_CTRL_BASE;
>  
> +static char omap_revision[8] = "";
> +
>  /*
>   * dieid_num_r(void) - read and set die ID
>   */
> @@ -90,6 +92,36 @@ u32 get_cpu_rev(void)
>  
>  }
>  
> +/**
> + * Converts cpu revision into a string
> + */
> +void set_omap_revision(void)
> +{
> + u32 idcode;
> + ctrl_id_t *id_base;
> + char *str_rev = &omap_revision[0];
> +
> + if (get_cpu_rev() == CPU_3430_ES1) {
> + strcat (str_rev, "ES1.0");
> + }
> + else {
> + id_base = (ctrl_id_t *)OMAP34XX_ID_L4_IO_BASE;
> +
> + idcode = readl(&id_base->idcode);
> +
> + if (idcode == 0x1B7AE02F)
> + strcat (str_rev, "ES2.0");
> + else if (idcode == 0x2B7AE02F)
> + strcat (str_rev, "ES2.1");
> + else if (idcode == 0x3B7AE02F)
> + strcat (str_rev, "ES3.0");
> + else if (idcode == 0x4B7AE02F)

It looks to me that only the highest nibble of idcode changes here? 
Maybe we could better mask & shift it a little and create a nice macro 
for it?

Best regards

Dirk
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

2009-04-21 Thread Premi, Sanjeev

> -Original Message-
> From: Dirk Behme [mailto:dirk.be...@googlemail.com] 
> Sent: Tuesday, April 21, 2009 10:26 PM
> To: Premi, Sanjeev
> Cc: u-boot@lists.denx.de
> Subject: Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision
> 
> Dear Premi,
> 
> Sanjeev Premi wrote:
> > The function display_board_info() displays the silicon
> > revision as 2 - based on the return value from get_cpu_rev().
> > 
> > This is incorrect as the current Si version is 3.1
> 
> Thanks for the patch and fixing this!
> 
> > This patch displays the correct version; but does not
> > change get_cpu_rev() to minimize the code impact.
> 
> I wonder if it wouldn't be better (and cleaner) to fix get_cpu_rev()?

Yes. This is what I started with; but then this is where I felt that
fix may run 'deeper"

u32 get_board_type(void)
{
if (get_cpu_rev() == CPU_3430_ES2)
return sysinfo.board_type_v2;
else
return sysinfo.board_type_v1;
}

I couldn't figure out how this impacts boards other than the EVM.

> 
> A quick grep resulted in 5 (?) locations which might be affected:
> 
> ./cpu/arm_cortexa8/cpu.c:104:   if (get_cpu_rev() == CPU_3430_ES2) { 
> 
> ./cpu/arm_cortexa8/cpu.c:134:   if (get_cpu_rev() == CPU_3430_ES2) { 
> 
> ./cpu/arm_cortexa8/omap3/clock.c:173:   sil_index = 
> get_cpu_rev() - 1; 
> 
> ./cpu/arm_cortexa8/omap3/sys_info.c:144:if (get_cpu_rev() == 
> CPU_3430_ES2)
> ./cpu/arm_cortexa8/omap3/sys_info.c:237:   sec_s, 
> get_cpu_rev());
> 
> If we extend the existing macros
> 
> #define CPU_3430_ES1  1
> #define CPU_3430_ES2  2
> 
> to e.g.
> 
> #define CPU_3430_ES10 1
> #define CPU_3430_ES20 2
> #define CPU_3430_ES21 3
> #define CPU_3430_ES30 4
> #define CPU_3430_ES31 5
> 
> then the three
> 
> == CPU_3430_ES2
> 
> will simply become
> 
>  >= CPU_3430_ES20
> 
> The sil_index = get_cpu_rev() - 1;  needs a deeper look, though.
> 
> Regarding the ASCII strings: With the numbers get_cpu_rev()  returns 
> we then could index a const struct with the ASCII strings for the 
> revision print. E.g.
> 
> printf(" ... %s ...", ... omap_revision[get_cpu_rev()] ...);
> 
> What do you think?
> 
> > Signed-off-by: Sanjeev Premi 
> > ---
> >  cpu/arm_cortexa8/omap3/sys_info.c |   37 
> +++--
> >  1 files changed, 35 insertions(+), 2 deletions(-)
> > 
> > diff --git a/cpu/arm_cortexa8/omap3/sys_info.c 
> b/cpu/arm_cortexa8/omap3/sys_info.c
> > index b385b91..8c6a4d6 100644
> > --- a/cpu/arm_cortexa8/omap3/sys_info.c
> > +++ b/cpu/arm_cortexa8/omap3/sys_info.c
> > @@ -36,6 +36,8 @@ static gpmc_csx_t *gpmc_cs_base = 
> (gpmc_csx_t *)GPMC_CONFIG_CS0_BASE;
> >  static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE;
> >  static ctrl_t *ctrl_base = (ctrl_t *)OMAP34XX_CTRL_BASE;
> >  
> > +static char omap_revision[8] = "";
> > +
> >  /*
> >   * dieid_num_r(void) - read and set die ID
> >   */
> > @@ -90,6 +92,36 @@ u32 get_cpu_rev(void)
> >  
> >  }
> >  
> > +/**
> > + * Converts cpu revision into a string
> > + */
> > +void set_omap_revision(void)
> > +{
> > +   u32 idcode;
> > +   ctrl_id_t *id_base;
> > +   char *str_rev = &omap_revision[0];
> > +
> > +   if (get_cpu_rev() == CPU_3430_ES1) {
> > +   strcat (str_rev, "ES1.0");
> > +   }
> > +   else {
> > +   id_base = (ctrl_id_t *)OMAP34XX_ID_L4_IO_BASE;
> > +
> > +   idcode = readl(&id_base->idcode);
> > +
> > +   if (idcode == 0x1B7AE02F)
> > +   strcat (str_rev, "ES2.0");
> > +   else if (idcode == 0x2B7AE02F)
> > +   strcat (str_rev, "ES2.1");
> > +   else if (idcode == 0x3B7AE02F)
> > +   strcat (str_rev, "ES3.0");
> > +   else if (idcode == 0x4B7AE02F)
> 
> It looks to me that only the highest nibble of idcode changes here? 
> Maybe we could better mask & shift it a little and create a 
> nice macro 
> for it?
> 
> Best regards
> 
> Dirk
> 
> 
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

2009-04-21 Thread Dirk Behme
Premi, Sanjeev wrote:
>> -Original Message-
>> From: Dirk Behme [mailto:dirk.be...@googlemail.com] 
>> Sent: Tuesday, April 21, 2009 10:26 PM
>> To: Premi, Sanjeev
>> Cc: u-boot@lists.denx.de
>> Subject: Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision
>>
>> Dear Premi,
>>
>> Sanjeev Premi wrote:
>>> The function display_board_info() displays the silicon
>>> revision as 2 - based on the return value from get_cpu_rev().
>>>
>>> This is incorrect as the current Si version is 3.1
>> Thanks for the patch and fixing this!
>>
>>> This patch displays the correct version; but does not
>>> change get_cpu_rev() to minimize the code impact.
>> I wonder if it wouldn't be better (and cleaner) to fix get_cpu_rev()?
> 
> Yes. This is what I started with; but then this is where I felt that
> fix may run 'deeper"
> 
> u32 get_board_type(void)
> {
>   if (get_cpu_rev() == CPU_3430_ES2)
>   return sysinfo.board_type_v2;
>   else
>   return sysinfo.board_type_v1;
> }
> 
> I couldn't figure out how this impacts boards other than the EVM.

Maybe I missed something, but independent of what this function does, 
if we replace

if (get_cpu_rev() == CPU_3430_ES2)

with

if (get_cpu_rev() >= CPU_3430_ES20)

the functionality of this function (i.e. the value returned) wouldn't 
change compared to what it actually returns?

Best regards

Dirk

>> A quick grep resulted in 5 (?) locations which might be affected:
>>
>> ./cpu/arm_cortexa8/cpu.c:104:   if (get_cpu_rev() == CPU_3430_ES2) { 
>>
>> ./cpu/arm_cortexa8/cpu.c:134:   if (get_cpu_rev() == CPU_3430_ES2) { 
>>
>> ./cpu/arm_cortexa8/omap3/clock.c:173:   sil_index = 
>> get_cpu_rev() - 1; 
>>
>> ./cpu/arm_cortexa8/omap3/sys_info.c:144:if (get_cpu_rev() == 
>> CPU_3430_ES2)
>> ./cpu/arm_cortexa8/omap3/sys_info.c:237:   sec_s, 
>> get_cpu_rev());
>>
>> If we extend the existing macros
>>
>> #define CPU_3430_ES1 1
>> #define CPU_3430_ES2 2
>>
>> to e.g.
>>
>> #define CPU_3430_ES101
>> #define CPU_3430_ES202
>> #define CPU_3430_ES213
>> #define CPU_3430_ES304
>> #define CPU_3430_ES315
>>
>> then the three
>>
>> == CPU_3430_ES2
>>
>> will simply become
>>
>>  >= CPU_3430_ES20
>>
>> The sil_index = get_cpu_rev() - 1;  needs a deeper look, though.
>>
>> Regarding the ASCII strings: With the numbers get_cpu_rev()  returns 
>> we then could index a const struct with the ASCII strings for the 
>> revision print. E.g.
>>
>> printf(" ... %s ...", ... omap_revision[get_cpu_rev()] ...);
>>
>> What do you think?
>>
>>> Signed-off-by: Sanjeev Premi 
>>> ---
>>>  cpu/arm_cortexa8/omap3/sys_info.c |   37 
>> +++--
>>>  1 files changed, 35 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/cpu/arm_cortexa8/omap3/sys_info.c 
>> b/cpu/arm_cortexa8/omap3/sys_info.c
>>> index b385b91..8c6a4d6 100644
>>> --- a/cpu/arm_cortexa8/omap3/sys_info.c
>>> +++ b/cpu/arm_cortexa8/omap3/sys_info.c
>>> @@ -36,6 +36,8 @@ static gpmc_csx_t *gpmc_cs_base = 
>> (gpmc_csx_t *)GPMC_CONFIG_CS0_BASE;
>>>  static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE;
>>>  static ctrl_t *ctrl_base = (ctrl_t *)OMAP34XX_CTRL_BASE;
>>>  
>>> +static char omap_revision[8] = "";
>>> +
>>>  /*
>>>   * dieid_num_r(void) - read and set die ID
>>>   */
>>> @@ -90,6 +92,36 @@ u32 get_cpu_rev(void)
>>>  
>>>  }
>>>  
>>> +/**
>>> + * Converts cpu revision into a string
>>> + */
>>> +void set_omap_revision(void)
>>> +{
>>> +   u32 idcode;
>>> +   ctrl_id_t *id_base;
>>> +   char *str_rev = &omap_revision[0];
>>> +
>>> +   if (get_cpu_rev() == CPU_3430_ES1) {
>>> +   strcat (str_rev, "ES1.0");
>>> +   }
>>> +   else {
>>> +   id_base = (ctrl_id_t *)OMAP34XX_ID_L4_IO_BASE;
>>> +
>>> +   idcode = readl(&id_base->idcode);
>>> +
>>> +   if (idcode == 0x1B7AE02F)
>>> +   strcat (str_rev, "ES2.0");
>>> +   else if (idcode == 0x2B7AE02F)
>>> +   strcat (str_rev, "ES2.1");
>>> +   else if (idcode == 0x3B7AE02F)
>>> +   strcat (str_rev, "ES3.0");
>>> +   else if (idcode == 0x4B7AE02F)
>> It looks to me that only the highest nibble of idcode changes here? 
>> Maybe we could better mask & shift it a little and create a 
>> nice macro 
>> for it?
>>
>> Best regards
>>
>> Dirk
>>
>>

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

2009-04-21 Thread Premi, Sanjeev
> -Original Message-
> From: Premi, Sanjeev 
> Sent: Tuesday, April 21, 2009 11:37 PM
> To: 'Dirk Behme'
> Cc: u-boot@lists.denx.de
> Subject: RE: [U-Boot] [PATCH] OMAP3: Print correct silicon revision
> 
> 
> > -Original Message-
> > From: Dirk Behme [mailto:dirk.be...@googlemail.com] 
> > Sent: Tuesday, April 21, 2009 10:26 PM
> > To: Premi, Sanjeev
> > Cc: u-boot@lists.denx.de
> > Subject: Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision
> > 
> > Dear Premi,
> > 
> > Sanjeev Premi wrote:
> > > The function display_board_info() displays the silicon
> > > revision as 2 - based on the return value from get_cpu_rev().
> > > 
> > > This is incorrect as the current Si version is 3.1
> > 
> > Thanks for the patch and fixing this!
> > 
> > > This patch displays the correct version; but does not
> > > change get_cpu_rev() to minimize the code impact.
> > 
> > I wonder if it wouldn't be better (and cleaner) to fix 
> get_cpu_rev()?
> 
> Yes. This is what I started with; but then this is where I felt that
> fix may run 'deeper"
> 
> u32 get_board_type(void)
> {
>   if (get_cpu_rev() == CPU_3430_ES2)
>   return sysinfo.board_type_v2;
>   else
>   return sysinfo.board_type_v1;
> }
> 

...sorry, mail 'went' before I wanted to!

> I couldn't figure out how this impacts boards other than the EVM.

Though I admit not having much time looking for the impact. Beyond
this, I believe the fix could be straight forward.

> > 
> > A quick grep resulted in 5 (?) locations which might be affected:
> > 
> > ./cpu/arm_cortexa8/cpu.c:104:   if (get_cpu_rev() == 
> CPU_3430_ES2) { 
> > 
> > ./cpu/arm_cortexa8/cpu.c:134:   if (get_cpu_rev() == 
> CPU_3430_ES2) { 
> > 
> > ./cpu/arm_cortexa8/omap3/clock.c:173:   sil_index = 
> > get_cpu_rev() - 1; 
> > 
> > ./cpu/arm_cortexa8/omap3/sys_info.c:144:if 
> (get_cpu_rev() == 
> > CPU_3430_ES2)
> > ./cpu/arm_cortexa8/omap3/sys_info.c:237:   sec_s, 
> > get_cpu_rev());
> > 
> > If we extend the existing macros
> > 
> > #define CPU_3430_ES11
> > #define CPU_3430_ES22
> > 
> > to e.g.
> > 
> > #define CPU_3430_ES10   1
> > #define CPU_3430_ES20   2
> > #define CPU_3430_ES21   3
> > #define CPU_3430_ES30   4
> > #define CPU_3430_ES31   5
> > 
> > then the three
> > 
> > == CPU_3430_ES2
> > 
> > will simply become
> > 
> >  >= CPU_3430_ES20

There seems to be a slight differene between the silicon
revision between 34x and 35x for the highest nibble value
for early si revs - ES 1.0 and ES2.0.

> > 
> > The sil_index = get_cpu_rev() - 1;  needs a deeper look, though.
> > 
> > Regarding the ASCII strings: With the numbers get_cpu_rev() 
>  returns 
> > we then could index a const struct with the ASCII strings for the 
> > revision print. E.g.
> > 
> > printf(" ... %s ...", ... omap_revision[get_cpu_rev()] ...);
> > 
> > What do you think?
> > 
> > > Signed-off-by: Sanjeev Premi 
> > > ---
> > >  cpu/arm_cortexa8/omap3/sys_info.c |   37 
> > +++--
> > >  1 files changed, 35 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/cpu/arm_cortexa8/omap3/sys_info.c 
> > b/cpu/arm_cortexa8/omap3/sys_info.c
> > > index b385b91..8c6a4d6 100644
> > > --- a/cpu/arm_cortexa8/omap3/sys_info.c
> > > +++ b/cpu/arm_cortexa8/omap3/sys_info.c
> > > @@ -36,6 +36,8 @@ static gpmc_csx_t *gpmc_cs_base = 
> > (gpmc_csx_t *)GPMC_CONFIG_CS0_BASE;
> > >  static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE;
> > >  static ctrl_t *ctrl_base = (ctrl_t *)OMAP34XX_CTRL_BASE;
> > >  
> > > +static char omap_revision[8] = "";
> > > +
> > >  
> /*
> > >   * dieid_num_r(void) - read and set die ID
> > >   
> */
> > > @@ -90,6 +92,36 @@ u32 get_cpu_rev(void)
> > >  
> > >  }
> > >  
> > > +/**
> > > + * Converts cpu revision into a string
> > > + */
> > > +void set_omap_revision(void)
> > > +{
> > > + u32 idcode;
> > > + ctrl_id_t *id_base;
> > > + char *str_r

Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

2009-04-21 Thread Dirk Behme

Dear Premi,

Premi, Sanjeev wrote:

-Original Message-
From: Premi, Sanjeev 
Sent: Tuesday, April 21, 2009 11:37 PM

To: 'Dirk Behme'
Cc: u-boot@lists.denx.de
Subject: RE: [U-Boot] [PATCH] OMAP3: Print correct silicon revision



-Original Message-
From: Dirk Behme [mailto:dirk.be...@googlemail.com] 
Sent: Tuesday, April 21, 2009 10:26 PM

To: Premi, Sanjeev
Cc: u-boot@lists.denx.de
Subject: Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

Dear Premi,

Sanjeev Premi wrote:

The function display_board_info() displays the silicon
revision as 2 - based on the return value from get_cpu_rev().

This is incorrect as the current Si version is 3.1

Thanks for the patch and fixing this!


This patch displays the correct version; but does not
change get_cpu_rev() to minimize the code impact.
I wonder if it wouldn't be better (and cleaner) to fix 

get_cpu_rev()?

Yes. This is what I started with; but then this is where I felt that
fix may run 'deeper"

u32 get_board_type(void)
{
if (get_cpu_rev() == CPU_3430_ES2)
return sysinfo.board_type_v2;
else
return sysinfo.board_type_v1;
}



...sorry, mail 'went' before I wanted to!


I couldn't figure out how this impacts boards other than the EVM.


Though I admit not having much time looking for the impact. Beyond
this, I believe the fix could be straight forward.


What's about something like in the attachment? Compile tested only. Do 
you like to test it?


Best regards

Dirk


A quick grep resulted in 5 (?) locations which might be affected:

./cpu/arm_cortexa8/cpu.c:104:   if (get_cpu_rev() == 
CPU_3430_ES2) { 
./cpu/arm_cortexa8/cpu.c:134:   if (get_cpu_rev() == 
CPU_3430_ES2) { 
./cpu/arm_cortexa8/omap3/clock.c:173:   sil_index = 
get_cpu_rev() - 1; 

./cpu/arm_cortexa8/omap3/sys_info.c:144:if 
(get_cpu_rev() == 

CPU_3430_ES2)
./cpu/arm_cortexa8/omap3/sys_info.c:237:   sec_s, 
get_cpu_rev());


If we extend the existing macros

#define CPU_3430_ES11
#define CPU_3430_ES22

to e.g.

#define CPU_3430_ES10   1
#define CPU_3430_ES20   2
#define CPU_3430_ES21   3
#define CPU_3430_ES30   4
#define CPU_3430_ES31   5

then the three

== CPU_3430_ES2

will simply become

 >= CPU_3430_ES20


There seems to be a slight differene between the silicon
revision between 34x and 35x for the highest nibble value
for early si revs - ES 1.0 and ES2.0.


The sil_index = get_cpu_rev() - 1;  needs a deeper look, though.

Regarding the ASCII strings: With the numbers get_cpu_rev() 
 returns 
we then could index a const struct with the ASCII strings for the 
revision print. E.g.


printf(" ... %s ...", ... omap_revision[get_cpu_rev()] ...);

What do you think?


Signed-off-by: Sanjeev Premi 
---
 cpu/arm_cortexa8/omap3/sys_info.c |   37 

+++--

 1 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/cpu/arm_cortexa8/omap3/sys_info.c 

b/cpu/arm_cortexa8/omap3/sys_info.c

index b385b91..8c6a4d6 100644
--- a/cpu/arm_cortexa8/omap3/sys_info.c
+++ b/cpu/arm_cortexa8/omap3/sys_info.c
@@ -36,6 +36,8 @@ static gpmc_csx_t *gpmc_cs_base = 

(gpmc_csx_t *)GPMC_CONFIG_CS0_BASE;

 static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE;
 static ctrl_t *ctrl_base = (ctrl_t *)OMAP34XX_CTRL_BASE;
 
+static char omap_revision[8] = "";

+
 

/*

  * dieid_num_r(void) - read and set die ID
  

*/

@@ -90,6 +92,36 @@ u32 get_cpu_rev(void)
 
 }
 
+/**

+ * Converts cpu revision into a string
+ */
+void set_omap_revision(void)
+{
+   u32 idcode;
+   ctrl_id_t *id_base;
+   char *str_rev = &omap_revision[0];
+
+   if (get_cpu_rev() == CPU_3430_ES1) {
+   strcat (str_rev, "ES1.0");
+   }
+   else {
+   id_base = (ctrl_id_t *)OMAP34XX_ID_L4_IO_BASE;
+
+   idcode = readl(&id_base->idcode);
+
+   if (idcode == 0x1B7AE02F)
+   strcat (str_rev, "ES2.0");
+   else if (idcode == 0x2B7AE02F)
+   strcat (str_rev, "ES2.1");
+   else if (idcode == 0x3B7AE02F)
+   strcat (str_rev, "ES3.0");
+   else if (idcode == 0x4B7AE02F)
It looks to me that only the highest nibble of idcode changes here? 
Maybe we could better mask & shift it a little and create a 
nice macro 
for it?


It is already done in the kernel; but I am not sure if we could save
much - unless we use the index as you suggest above.


Best regards

Dirk





Signed-off-by: Dirk Behme 

---
 cpu/arm_cortexa8/cpu.c |4 ++--
 cpu/arm_cortexa8/omap3/clock.c |5 +++--
 cpu/arm_cortexa8/omap3/sys_info.c  |   31 +++-

Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

2009-04-21 Thread Premi, Sanjeev


> -Original Message-
> From: Dirk Behme [mailto:dirk.be...@googlemail.com] 
> Sent: Wednesday, April 22, 2009 1:04 AM
> To: Premi, Sanjeev
> Cc: u-boot@lists.denx.de
> Subject: Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision
> 
> Dear Premi,
> 
> Premi, Sanjeev wrote:
> >> -Original Message-
> >> From: Premi, Sanjeev 
> >> Sent: Tuesday, April 21, 2009 11:37 PM
> >> To: 'Dirk Behme'
> >> Cc: u-boot@lists.denx.de
> >> Subject: RE: [U-Boot] [PATCH] OMAP3: Print correct silicon revision
> >>
> >>
> >>> -Original Message-
> >>> From: Dirk Behme [mailto:dirk.be...@googlemail.com] 
> >>> Sent: Tuesday, April 21, 2009 10:26 PM
> >>> To: Premi, Sanjeev
> >>> Cc: u-boot@lists.denx.de
> >>> Subject: Re: [U-Boot] [PATCH] OMAP3: Print correct 
> silicon revision
> >>>
> >>> Dear Premi,
> >>>
> >>> Sanjeev Premi wrote:
> >>>> The function display_board_info() displays the silicon
> >>>> revision as 2 - based on the return value from get_cpu_rev().
> >>>>
> >>>> This is incorrect as the current Si version is 3.1
> >>> Thanks for the patch and fixing this!
> >>>
> >>>> This patch displays the correct version; but does not
> >>>> change get_cpu_rev() to minimize the code impact.
> >>> I wonder if it wouldn't be better (and cleaner) to fix 
> >> get_cpu_rev()?
> >>
> >> Yes. This is what I started with; but then this is where I 
> felt that
> >> fix may run 'deeper"
> >>
> >> u32 get_board_type(void)
> >> {
> >>if (get_cpu_rev() == CPU_3430_ES2)
> >>return sysinfo.board_type_v2;
> >>else
> >>return sysinfo.board_type_v1;
> >> }
> >>
> > 
> > ...sorry, mail 'went' before I wanted to!
> > 
> >> I couldn't figure out how this impacts boards other than the EVM.
> > 
> > Though I admit not having much time looking for the impact. Beyond
> > this, I believe the fix could be straight forward.
> 
> What's about something like in the attachment? Compile tested 
> only. Do 
> you like to test it?

Sure. Will do it in the morning...

I did make few changes since your last mail as well.
Will post the updates later in the day.

~sanjeev

> 
> Best regards
> 
> Dirk

> 
> >>> A quick grep resulted in 5 (?) locations which might be affected:
> >>>
> >>> ./cpu/arm_cortexa8/cpu.c:104:   if (get_cpu_rev() == 
> >> CPU_3430_ES2) { 
> >>> ./cpu/arm_cortexa8/cpu.c:134:   if (get_cpu_rev() == 
> >> CPU_3430_ES2) { 
> >>> ./cpu/arm_cortexa8/omap3/clock.c:173:   sil_index = 
> >>> get_cpu_rev() - 1; 
> >>>
> >>> ./cpu/arm_cortexa8/omap3/sys_info.c:144:if 
> >> (get_cpu_rev() == 
> >>> CPU_3430_ES2)
> >>> ./cpu/arm_cortexa8/omap3/sys_info.c:237:   sec_s, 
> >>> get_cpu_rev());
> >>>
> >>> If we extend the existing macros
> >>>
> >>> #define CPU_3430_ES1  1
> >>> #define CPU_3430_ES2  2
> >>>
> >>> to e.g.
> >>>
> >>> #define CPU_3430_ES10 1
> >>> #define CPU_3430_ES20 2
> >>> #define CPU_3430_ES21 3
> >>> #define CPU_3430_ES30 4
> >>> #define CPU_3430_ES31 5
> >>>
> >>> then the three
> >>>
> >>> == CPU_3430_ES2
> >>>
> >>> will simply become
> >>>
> >>>  >= CPU_3430_ES20
> > 
> > There seems to be a slight differene between the silicon
> > revision between 34x and 35x for the highest nibble value
> > for early si revs - ES 1.0 and ES2.0.
> > 
> >>> The sil_index = get_cpu_rev() - 1;  needs a deeper look, though.
> >>>
> >>> Regarding the ASCII strings: With the numbers get_cpu_rev() 
> >>  returns 
> >>> we then could index a const struct with the ASCII strings for the 
> >>> revision print. E.g.
> >>>
> >>> printf(" ... %s ...", ... omap_revision[get_cpu_rev()] ...);
> >>>
> >>> What do you think?
> >>>
> >>>> Signed-off-by: Sanjeev Premi 
> >>>> ---
> >>>>  cpu/arm_cortexa8/om

Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

2009-04-22 Thread Premi, Sanjeev
> -Original Message-
> From: Dirk Behme [mailto:dirk.be...@googlemail.com] 
> Sent: Wednesday, April 22, 2009 1:04 AM
> To: Premi, Sanjeev
> Cc: u-boot@lists.denx.de
> Subject: Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision
> 
> Dear Premi,
> 
> Premi, Sanjeev wrote:
> >> -Original Message-
> >> From: Premi, Sanjeev 
> >> Sent: Tuesday, April 21, 2009 11:37 PM
> >> To: 'Dirk Behme'
> >> Cc: u-boot@lists.denx.de
> >> Subject: RE: [U-Boot] [PATCH] OMAP3: Print correct silicon revision
> >>
> >>
> >>> -Original Message-
> >>> From: Dirk Behme [mailto:dirk.be...@googlemail.com] 
> >>> Sent: Tuesday, April 21, 2009 10:26 PM
> >>> To: Premi, Sanjeev
> >>> Cc: u-boot@lists.denx.de
> >>> Subject: Re: [U-Boot] [PATCH] OMAP3: Print correct 
> silicon revision
> >>>
> >>> Dear Premi,
> >>>
> >>> Sanjeev Premi wrote:
> >>>> The function display_board_info() displays the silicon
> >>>> revision as 2 - based on the return value from get_cpu_rev().
> >>>>
> >>>> This is incorrect as the current Si version is 3.1
> >>> Thanks for the patch and fixing this!
> >>>
> >>>> This patch displays the correct version; but does not
> >>>> change get_cpu_rev() to minimize the code impact.
> >>> I wonder if it wouldn't be better (and cleaner) to fix 
> >> get_cpu_rev()?
> >>
> >> Yes. This is what I started with; but then this is where I 
> felt that
> >> fix may run 'deeper"
> >>
> >> u32 get_board_type(void)
> >> {
> >>if (get_cpu_rev() == CPU_3430_ES2)
> >>return sysinfo.board_type_v2;
> >>else
> >>return sysinfo.board_type_v1;
> >> }
> >>
> > 
> > ...sorry, mail 'went' before I wanted to!
> > 
> >> I couldn't figure out how this impacts boards other than the EVM.
> > 
> > Though I admit not having much time looking for the impact. Beyond
> > this, I believe the fix could be straight forward.
> 
> What's about something like in the attachment? Compile tested 
> only. Do 
> you like to test it?

Yes, this works on the EVM.

I did spend some more time & fouund that value from get_board_type is
ignored in the display_board_info().

I will submit a patch to remove this function if it is really not needed.

Best regards,
Sanjeev

> 
> Best regards
> 
> Dirk
> 
[...snip...]
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

2009-04-22 Thread Dirk Behme

Premi, Sanjeev wrote:

-Original Message-
From: Dirk Behme [mailto:dirk.be...@googlemail.com] 
Sent: Wednesday, April 22, 2009 1:04 AM

To: Premi, Sanjeev
Cc: u-boot@lists.denx.de
Subject: Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

Dear Premi,

Premi, Sanjeev wrote:

-Original Message-
From: Premi, Sanjeev 
Sent: Tuesday, April 21, 2009 11:37 PM

To: 'Dirk Behme'
Cc: u-boot@lists.denx.de
Subject: RE: [U-Boot] [PATCH] OMAP3: Print correct silicon revision



-Original Message-
From: Dirk Behme [mailto:dirk.be...@googlemail.com] 
Sent: Tuesday, April 21, 2009 10:26 PM

To: Premi, Sanjeev
Cc: u-boot@lists.denx.de
Subject: Re: [U-Boot] [PATCH] OMAP3: Print correct 

silicon revision

Dear Premi,

Sanjeev Premi wrote:

The function display_board_info() displays the silicon
revision as 2 - based on the return value from get_cpu_rev().

This is incorrect as the current Si version is 3.1

Thanks for the patch and fixing this!


This patch displays the correct version; but does not
change get_cpu_rev() to minimize the code impact.
I wonder if it wouldn't be better (and cleaner) to fix 

get_cpu_rev()?

Yes. This is what I started with; but then this is where I 

felt that

fix may run 'deeper"

u32 get_board_type(void)
{
if (get_cpu_rev() == CPU_3430_ES2)
return sysinfo.board_type_v2;
else
return sysinfo.board_type_v1;
}


...sorry, mail 'went' before I wanted to!


I couldn't figure out how this impacts boards other than the EVM.

Though I admit not having much time looking for the impact. Beyond
this, I believe the fix could be straight forward.
What's about something like in the attachment? Compile tested 
only. Do 
you like to test it?


Yes, this works on the EVM.


Great, thanks for testing!


I did spend some more time & fouund that value from get_board_type is
ignored in the display_board_info().


Hmm, yes, good catch.


I will submit a patch to remove this function if it is really not needed.


Ok.

Best regards

Dirk

Btw.: Updated patch in attachment, maybe it helps you. Tested on Beagle.

Signed-off-by: Dirk Behme 

---
 board/omap3/beagle/beagle.h|2 -
 board/omap3/evm/evm.h  |2 -
 board/omap3/overo/overo.h  |2 -
 board/omap3/pandora/pandora.h  |2 -
 board/omap3/zoom1/zoom1.h  |2 -
 cpu/arm_cortexa8/cpu.c |4 +-
 cpu/arm_cortexa8/omap3/board.c |5 ---
 cpu/arm_cortexa8/omap3/clock.c |5 ++-
 cpu/arm_cortexa8/omap3/sys_info.c  |   48 +++--
 include/asm-arm/arch-omap3/omap3.h |   18 +---
 include/asm-arm/arch-omap3/sys_proto.h |5 ---
 11 files changed, 38 insertions(+), 57 deletions(-)

Index: u-boot-main/cpu/arm_cortexa8/cpu.c
===
--- u-boot-main.orig/cpu/arm_cortexa8/cpu.c
+++ u-boot-main/cpu/arm_cortexa8/cpu.c
@@ -101,7 +101,7 @@ void l2cache_enable()
volatile unsigned int j;
 
/* ES2 onwards we can disable/enable L2 ourselves */
-   if (get_cpu_rev() == CPU_3430_ES2) {
+   if (get_cpu_rev() >= CPU_3XX_ES20) {
__asm__ __volatile__("mrc p15, 0, %0, c1, c0, 1":"=r"(i));
__asm__ __volatile__("orr %0, %0, #0x2":"=r"(i));
__asm__ __volatile__("mcr p15, 0, %0, c1, c0, 1":"=r"(i));
@@ -131,7 +131,7 @@ void l2cache_disable()
volatile unsigned int j;
 
/* ES2 onwards we can disable/enable L2 ourselves */
-   if (get_cpu_rev() == CPU_3430_ES2) {
+   if (get_cpu_rev() >= CPU_3XX_ES20) {
__asm__ __volatile__("mrc p15, 0, %0, c1, c0, 1":"=r"(i));
__asm__ __volatile__("bic %0, %0, #0x2":"=r"(i));
__asm__ __volatile__("mcr p15, 0, %0, c1, c0, 1":"=r"(i));
Index: u-boot-main/cpu/arm_cortexa8/omap3/clock.c
===
--- u-boot-main.orig/cpu/arm_cortexa8/omap3/clock.c
+++ u-boot-main/cpu/arm_cortexa8/omap3/clock.c
@@ -132,7 +132,7 @@ void prcm_init(void)
void (*f_lock_pll) (u32, u32, u32, u32);
int xip_safe, p0, p1, p2, p3;
u32 osc_clk = 0, sys_clkin_sel;
-   u32 clk_index, sil_index;
+   u32 clk_index, sil_index = 0;
prm_t *prm_base = (prm_t *)PRM_BASE;
prcm_t *prcm_base = (prcm_t *)PRCM_BASE;
dpll_param *dpll_param_p;
@@ -170,7 +170,8 @@ void prcm_init(void)
 * and sil_index will get the values for that SysClk for the
 * appropriate silicon rev.
 */
-   sil_index = get_cpu_rev() - 1;
+   if(get_cpu_rev())
+   sil_index = 1;
 
/* Unlock MPU DPLL (slows things down, and needed later) */
sr32(&prcm_base->clken_p

Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

2009-04-22 Thread Jean-Christophe PLAGNIOL-VILLARD
On 21:53 Tue 21 Apr , Sanjeev Premi wrote:
> The function display_board_info() displays the silicon
> revision as 2 - based on the return value from get_cpu_rev().
> 
> This is incorrect as the current Si version is 3.1
> 
> This patch displays the correct version; but does not
> change get_cpu_rev() to minimize the code impact.
> 
> Signed-off-by: Sanjeev Premi 
> ---
>  cpu/arm_cortexa8/omap3/sys_info.c |   37 
> +++--
>  1 files changed, 35 insertions(+), 2 deletions(-)
> 
> diff --git a/cpu/arm_cortexa8/omap3/sys_info.c 
> b/cpu/arm_cortexa8/omap3/sys_info.c
> index b385b91..8c6a4d6 100644
> --- a/cpu/arm_cortexa8/omap3/sys_info.c
> +++ b/cpu/arm_cortexa8/omap3/sys_info.c
> @@ -36,6 +36,8 @@ static gpmc_csx_t *gpmc_cs_base = (gpmc_csx_t 
> *)GPMC_CONFIG_CS0_BASE;
>  static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE;
>  static ctrl_t *ctrl_base = (ctrl_t *)OMAP34XX_CTRL_BASE;
>  
> +static char omap_revision[8] = "";
why 8?
you only have 5 chars
so
static char omap_revision[6] = "";
will be enough
> +
>  /*
>   * dieid_num_r(void) - read and set die ID
>   */
> @@ -90,6 +92,36 @@ u32 get_cpu_rev(void)
>  
>  }
>  
why not this
in the cpu header

#define ES201
#define ES212
#define ES303
#define ES314
> +/**
> + * Converts cpu revision into a string
> + */
> +void set_omap_revision(void)
char* get_str_omap_revision(void)
{
u32 idcode;
ctrl_id_t *id_base;

if (omap_revision[0] != '\0')
return omap_revision;

if (get_cpu_rev() == CPU_3430_ES1) {
strcat (omap_revision, "ES1.0");
}
else {
id_base = (ctrl_id_t *)OMAP34XX_ID_L4_IO_BASE;

idcode = readl(&id_base->idcode) >> 28;

switch(idcode) {
case ES20:
strcat (omap_revision, "ES2.0");
break;
case ES21:
strcat (omap_revision, "ES2.1");
break;
case ES30:
strcat (omap_revision, "ES3.0");
break;
case ES31:
strcat (omap_revision, "ES3.1");
break;
default:
strcat (str_rev, "ES??");
}
return omap_revision;
}

Best Regards,
J.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] OMAP3: Print correct silicon revision

2009-04-23 Thread Dirk Behme
Dear Jean-Christophe,

Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 21:53 Tue 21 Apr , Sanjeev Premi wrote:
>> The function display_board_info() displays the silicon
>> revision as 2 - based on the return value from get_cpu_rev().
>>
>> This is incorrect as the current Si version is 3.1
>>
>> This patch displays the correct version; but does not
>> change get_cpu_rev() to minimize the code impact.
>>
>> Signed-off-by: Sanjeev Premi 
>> ---
>>  cpu/arm_cortexa8/omap3/sys_info.c |   37 
>> +++--
>>  1 files changed, 35 insertions(+), 2 deletions(-)
>>
>> diff --git a/cpu/arm_cortexa8/omap3/sys_info.c 
>> b/cpu/arm_cortexa8/omap3/sys_info.c
>> index b385b91..8c6a4d6 100644
>> --- a/cpu/arm_cortexa8/omap3/sys_info.c
>> +++ b/cpu/arm_cortexa8/omap3/sys_info.c
>> @@ -36,6 +36,8 @@ static gpmc_csx_t *gpmc_cs_base = (gpmc_csx_t 
>> *)GPMC_CONFIG_CS0_BASE;
>>  static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE;
>>  static ctrl_t *ctrl_base = (ctrl_t *)OMAP34XX_CTRL_BASE;
>>  
>> +static char omap_revision[8] = "";
> why 8?
> you only have 5 chars
> so
> static char omap_revision[6] = "";
> will be enough
>> +
>>  /*
>>   * dieid_num_r(void) - read and set die ID
>>   */
>> @@ -90,6 +92,36 @@ u32 get_cpu_rev(void)
>>  
>>  }
>>  
> why not this
> in the cpu header
> 
> #define ES20  1
> #define ES21  2
> #define ES30  3
> #define ES31  4
>> +/**
>> + * Converts cpu revision into a string
>> + */
>> +void set_omap_revision(void)
> char* get_str_omap_revision(void)
> {
>   u32 idcode;
>   ctrl_id_t *id_base;
> 
>   if (omap_revision[0] != '\0')
>   return omap_revision;
> 
>   if (get_cpu_rev() == CPU_3430_ES1) {
>   strcat (omap_revision, "ES1.0");
>   }
>   else {
>   id_base = (ctrl_id_t *)OMAP34XX_ID_L4_IO_BASE;
> 
>   idcode = readl(&id_base->idcode) >> 28;
> 
>   switch(idcode) {
>   case ES20:
>   strcat (omap_revision, "ES2.0");
>   break;
>   case ES21:
>   strcat (omap_revision, "ES2.1");
>   break;
>   case ES30:
>   strcat (omap_revision, "ES3.0");
>   break;
>   case ES31:
>   strcat (omap_revision, "ES3.1");
>   break;
>   default:
>   strcat (str_rev, "ES??");
>   }
>   return omap_revision;
> }

Did you notice that we had some discussion about this and that Premi 
will send an completely redone patch, soon?

http://lists.denx.de/pipermail/u-boot/2009-April/051186.html
http://lists.denx.de/pipermail/u-boot/2009-April/051187.html
http://lists.denx.de/pipermail/u-boot/2009-April/051191.html
http://lists.denx.de/pipermail/u-boot/2009-April/051189.html
http://lists.denx.de/pipermail/u-boot/2009-April/051193.html
http://lists.denx.de/pipermail/u-boot/2009-April/051194.html
http://lists.denx.de/pipermail/u-boot/2009-April/051228.html
http://lists.denx.de/pipermail/u-boot/2009-April/051241.html

Dirk


___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot