Re: [U-Boot] [PATCH 1/8] mach-stm32: Add get_cpu_id support

2018-02-01 Thread Patrice CHOTARD
Hi Vikas

On 01/31/2018 07:20 PM, Vikas Manocha wrote:
> Hi Patrice,
> 
> On 01/31/2018 08:09 AM, patrice.chot...@st.com wrote:
>> From: Patrice Chotard 
>>
>> This allows to read the CPU ID into STM32 DBGMCU_IDCODE register
>> and create an environment variable which contains the soc name.
>>
>> Signed-off-by: Christophe Priouzeau 
>> Signed-off-by: Patrice Chotard 
>> ---
>>   arch/arm/include/asm/arch-stm32f4/stm32.h |  2 ++
>>   arch/arm/include/asm/arch-stm32f7/stm32.h |  2 ++
>>   arch/arm/include/asm/arch-stm32h7/stm32.h |  4 +++
>>   arch/arm/mach-stm32/soc.c | 46 
>> +++
>>   4 files changed, 54 insertions(+)
>>
>> diff --git a/arch/arm/include/asm/arch-stm32f4/stm32.h 
>> b/arch/arm/include/asm/arch-stm32f4/stm32.h
>> index 0449fcecede0..87fd0fa893e5 100644
>> --- a/arch/arm/include/asm/arch-stm32f4/stm32.h
>> +++ b/arch/arm/include/asm/arch-stm32f4/stm32.h
>> @@ -50,5 +50,7 @@ static const u32 sect_sz_kb[CONFIG_SYS_MAX_FLASH_SECT] = {
>>   };
>>   
>>   void stm32_flash_latency_cfg(int latency);
>> +int get_cpu_id(void);
>> +void set_env_soc_name(int cpu_id);
>>   
>>   #endif /* _MACH_STM32_H_ */
>> diff --git a/arch/arm/include/asm/arch-stm32f7/stm32.h 
>> b/arch/arm/include/asm/arch-stm32f7/stm32.h
>> index f54e6f195575..dade6e9661ac 100644
>> --- a/arch/arm/include/asm/arch-stm32f7/stm32.h
>> +++ b/arch/arm/include/asm/arch-stm32f7/stm32.h
>> @@ -63,5 +63,7 @@ static const u32 sect_sz_kb[CONFIG_SYS_MAX_FLASH_SECT] = {
>>   
>>   
>>   void stm32_flash_latency_cfg(int latency);
>> +int get_cpu_id(void);
>> +void set_env_soc_name(int cpu_id);
>>   
>>   #endif /* _ASM_ARCH_HARDWARE_H */
>> diff --git a/arch/arm/include/asm/arch-stm32h7/stm32.h 
>> b/arch/arm/include/asm/arch-stm32h7/stm32.h
>> index f2922aa3237e..e520c7ea0dbd 100644
>> --- a/arch/arm/include/asm/arch-stm32h7/stm32.h
>> +++ b/arch/arm/include/asm/arch-stm32h7/stm32.h
> 
> how about creating one common header file for stm32.

It will be done in another series which is in preparation :
_ factorize arch/arm/include/asm/arch-stm32xx/stm32.h and all others
  acrh files (gpio.h, stm32_defs.h, stm32_periph.h )
_ add a common stm32_timer driver and remove arch/arm/mach-
  stm32/stm32f4/timer.c and arch/arm/mach-stm32/stm32f7/timer.c

> 
>> @@ -18,4 +18,8 @@
>>* arch/arm/include/asm/arch-stm32f4/stm32.h
>>* arch/arm/include/asm/arch-stm32f7/stm32.h
>>*/
>> +
>> +int get_cpu_id(void);
>> +void set_env_soc_name(int cpu_id);
>> +
>>   #endif /* _ASM_ARCH_HARDWARE_H */
>> diff --git a/arch/arm/mach-stm32/soc.c b/arch/arm/mach-stm32/soc.c
>> index df20d547c500..0933dfce656d 100644
>> --- a/arch/arm/mach-stm32/soc.c
>> +++ b/arch/arm/mach-stm32/soc.c
>> @@ -9,6 +9,30 @@
>>   #include 
>>   #include 
>>   
>> +#define STM32_DBGMCU_IDCODE_DEV_ID  GENMASK(11, 0)
> 
> to make it clear it is MASK macro, pls replace xx_DEV_D with xx_MASK.

ok

> 
>> +
>> +#if !defined(CONFIG_STM32H7)
>> +#define STM32_DBGMCU_IDCODE 0xE0042000
>> +#else
>> +#define STM32_DBGMCU_IDCODE 0x5C001000
>> +#endif
> 
> move it to arch/soc register definitions like to 
> arch/arm/include/asm/arch-stm32f7/stm32.h

ok

> 
>> +
>> +struct cpu_id_table {
>> +unsigned intid;
>> +const char  *name;
>> +};
>> +
>> +const struct cpu_id_table stm32_cpu_id_table[] = {
>> +{ 0x413, "stm32f4" },
>> +{ 0x419, "stm32f4" },
>> +{ 0x434, "stm32f4" },
>> +{ 0x449, "stm32f7" },
>> +{ 0x451, "stm32f7" },
>> +{ 0x450, "stm32h7" },
>> +{ 0x452, "stm32f7" },
>> +{ 0 },
>> +};
>> +
>>   int arch_cpu_init(void)
>>   {
>>  int i;
>> @@ -54,3 +78,25 @@ int arch_cpu_init(void)
>>   
>>  return 0;
>>   }
>> +
>> +int get_cpu_id(void)
>> +{
>> +return readl(STM32_DBGMCU_IDCODE) & STM32_DBGMCU_IDCODE_DEV_ID;
>> +}
>> +
>> +void set_env_soc_name(int cpu_id)
>> +{
>> +char soc[16];
>> +int i;
>> +
>> +memset(soc, '\0', sizeof(soc));
> 
> do we need it ?

No, i will remove it

Thanks

Patrice
> 
> Cheers,
> Vikas
> 
>> +
>> +for (i = 0; i < sizeof(stm32_cpu_id_table); i++) {
>> +if (stm32_cpu_id_table[i].id == cpu_id) {
>> +snprintf(soc, sizeof(soc), stm32_cpu_id_table[i].name);
>> +break;
>> +}
>> +}
>> +
>> +env_set("soc_name", soc);
>> +}
>>
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


Re: [U-Boot] [PATCH 1/8] mach-stm32: Add get_cpu_id support

2018-01-31 Thread Vikas Manocha
Hi Patrice,

On 01/31/2018 08:09 AM, patrice.chot...@st.com wrote:
> From: Patrice Chotard 
> 
> This allows to read the CPU ID into STM32 DBGMCU_IDCODE register
> and create an environment variable which contains the soc name.
> 
> Signed-off-by: Christophe Priouzeau 
> Signed-off-by: Patrice Chotard 
> ---
>  arch/arm/include/asm/arch-stm32f4/stm32.h |  2 ++
>  arch/arm/include/asm/arch-stm32f7/stm32.h |  2 ++
>  arch/arm/include/asm/arch-stm32h7/stm32.h |  4 +++
>  arch/arm/mach-stm32/soc.c | 46 
> +++
>  4 files changed, 54 insertions(+)
> 
> diff --git a/arch/arm/include/asm/arch-stm32f4/stm32.h 
> b/arch/arm/include/asm/arch-stm32f4/stm32.h
> index 0449fcecede0..87fd0fa893e5 100644
> --- a/arch/arm/include/asm/arch-stm32f4/stm32.h
> +++ b/arch/arm/include/asm/arch-stm32f4/stm32.h
> @@ -50,5 +50,7 @@ static const u32 sect_sz_kb[CONFIG_SYS_MAX_FLASH_SECT] = {
>  };
>  
>  void stm32_flash_latency_cfg(int latency);
> +int get_cpu_id(void);
> +void set_env_soc_name(int cpu_id);
>  
>  #endif /* _MACH_STM32_H_ */
> diff --git a/arch/arm/include/asm/arch-stm32f7/stm32.h 
> b/arch/arm/include/asm/arch-stm32f7/stm32.h
> index f54e6f195575..dade6e9661ac 100644
> --- a/arch/arm/include/asm/arch-stm32f7/stm32.h
> +++ b/arch/arm/include/asm/arch-stm32f7/stm32.h
> @@ -63,5 +63,7 @@ static const u32 sect_sz_kb[CONFIG_SYS_MAX_FLASH_SECT] = {
>  
>  
>  void stm32_flash_latency_cfg(int latency);
> +int get_cpu_id(void);
> +void set_env_soc_name(int cpu_id);
>  
>  #endif /* _ASM_ARCH_HARDWARE_H */
> diff --git a/arch/arm/include/asm/arch-stm32h7/stm32.h 
> b/arch/arm/include/asm/arch-stm32h7/stm32.h
> index f2922aa3237e..e520c7ea0dbd 100644
> --- a/arch/arm/include/asm/arch-stm32h7/stm32.h
> +++ b/arch/arm/include/asm/arch-stm32h7/stm32.h

how about creating one common header file for stm32.

> @@ -18,4 +18,8 @@
>   * arch/arm/include/asm/arch-stm32f4/stm32.h
>   * arch/arm/include/asm/arch-stm32f7/stm32.h
>   */
> +
> +int get_cpu_id(void);
> +void set_env_soc_name(int cpu_id);
> +
>  #endif /* _ASM_ARCH_HARDWARE_H */
> diff --git a/arch/arm/mach-stm32/soc.c b/arch/arm/mach-stm32/soc.c
> index df20d547c500..0933dfce656d 100644
> --- a/arch/arm/mach-stm32/soc.c
> +++ b/arch/arm/mach-stm32/soc.c
> @@ -9,6 +9,30 @@
>  #include 
>  #include 
>  
> +#define STM32_DBGMCU_IDCODE_DEV_ID   GENMASK(11, 0)

to make it clear it is MASK macro, pls replace xx_DEV_D with xx_MASK.

> +
> +#if !defined(CONFIG_STM32H7)
> +#define STM32_DBGMCU_IDCODE  0xE0042000
> +#else
> +#define STM32_DBGMCU_IDCODE  0x5C001000
> +#endif

move it to arch/soc register definitions like to 
arch/arm/include/asm/arch-stm32f7/stm32.h

> +
> +struct cpu_id_table {
> + unsigned intid;
> + const char  *name;
> + };
> +
> +const struct cpu_id_table stm32_cpu_id_table[] = {
> + { 0x413, "stm32f4" },
> + { 0x419, "stm32f4" },
> + { 0x434, "stm32f4" },
> + { 0x449, "stm32f7" },
> + { 0x451, "stm32f7" },
> + { 0x450, "stm32h7" },
> + { 0x452, "stm32f7" },
> + { 0 },
> +};
> +
>  int arch_cpu_init(void)
>  {
>   int i;
> @@ -54,3 +78,25 @@ int arch_cpu_init(void)
>  
>   return 0;
>  }
> +
> +int get_cpu_id(void)
> +{
> + return readl(STM32_DBGMCU_IDCODE) & STM32_DBGMCU_IDCODE_DEV_ID;
> +}
> +
> +void set_env_soc_name(int cpu_id)
> +{
> + char soc[16];
> + int i;
> +
> + memset(soc, '\0', sizeof(soc));

do we need it ?

Cheers,
Vikas

> +
> + for (i = 0; i < sizeof(stm32_cpu_id_table); i++) {
> + if (stm32_cpu_id_table[i].id == cpu_id) {
> + snprintf(soc, sizeof(soc), stm32_cpu_id_table[i].name);
> + break;
> + }
> + }
> +
> + env_set("soc_name", soc);
> +}
> 
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH 1/8] mach-stm32: Add get_cpu_id support

2018-01-31 Thread patrice.chotard
From: Patrice Chotard 

This allows to read the CPU ID into STM32 DBGMCU_IDCODE register
and create an environment variable which contains the soc name.

Signed-off-by: Christophe Priouzeau 
Signed-off-by: Patrice Chotard 
---
 arch/arm/include/asm/arch-stm32f4/stm32.h |  2 ++
 arch/arm/include/asm/arch-stm32f7/stm32.h |  2 ++
 arch/arm/include/asm/arch-stm32h7/stm32.h |  4 +++
 arch/arm/mach-stm32/soc.c | 46 +++
 4 files changed, 54 insertions(+)

diff --git a/arch/arm/include/asm/arch-stm32f4/stm32.h 
b/arch/arm/include/asm/arch-stm32f4/stm32.h
index 0449fcecede0..87fd0fa893e5 100644
--- a/arch/arm/include/asm/arch-stm32f4/stm32.h
+++ b/arch/arm/include/asm/arch-stm32f4/stm32.h
@@ -50,5 +50,7 @@ static const u32 sect_sz_kb[CONFIG_SYS_MAX_FLASH_SECT] = {
 };
 
 void stm32_flash_latency_cfg(int latency);
+int get_cpu_id(void);
+void set_env_soc_name(int cpu_id);
 
 #endif /* _MACH_STM32_H_ */
diff --git a/arch/arm/include/asm/arch-stm32f7/stm32.h 
b/arch/arm/include/asm/arch-stm32f7/stm32.h
index f54e6f195575..dade6e9661ac 100644
--- a/arch/arm/include/asm/arch-stm32f7/stm32.h
+++ b/arch/arm/include/asm/arch-stm32f7/stm32.h
@@ -63,5 +63,7 @@ static const u32 sect_sz_kb[CONFIG_SYS_MAX_FLASH_SECT] = {
 
 
 void stm32_flash_latency_cfg(int latency);
+int get_cpu_id(void);
+void set_env_soc_name(int cpu_id);
 
 #endif /* _ASM_ARCH_HARDWARE_H */
diff --git a/arch/arm/include/asm/arch-stm32h7/stm32.h 
b/arch/arm/include/asm/arch-stm32h7/stm32.h
index f2922aa3237e..e520c7ea0dbd 100644
--- a/arch/arm/include/asm/arch-stm32h7/stm32.h
+++ b/arch/arm/include/asm/arch-stm32h7/stm32.h
@@ -18,4 +18,8 @@
  * arch/arm/include/asm/arch-stm32f4/stm32.h
  * arch/arm/include/asm/arch-stm32f7/stm32.h
  */
+
+int get_cpu_id(void);
+void set_env_soc_name(int cpu_id);
+
 #endif /* _ASM_ARCH_HARDWARE_H */
diff --git a/arch/arm/mach-stm32/soc.c b/arch/arm/mach-stm32/soc.c
index df20d547c500..0933dfce656d 100644
--- a/arch/arm/mach-stm32/soc.c
+++ b/arch/arm/mach-stm32/soc.c
@@ -9,6 +9,30 @@
 #include 
 #include 
 
+#define STM32_DBGMCU_IDCODE_DEV_ID GENMASK(11, 0)
+
+#if !defined(CONFIG_STM32H7)
+#define STM32_DBGMCU_IDCODE0xE0042000
+#else
+#define STM32_DBGMCU_IDCODE0x5C001000
+#endif
+
+struct cpu_id_table {
+   unsigned intid;
+   const char  *name;
+   };
+
+const struct cpu_id_table stm32_cpu_id_table[] = {
+   { 0x413, "stm32f4" },
+   { 0x419, "stm32f4" },
+   { 0x434, "stm32f4" },
+   { 0x449, "stm32f7" },
+   { 0x451, "stm32f7" },
+   { 0x450, "stm32h7" },
+   { 0x452, "stm32f7" },
+   { 0 },
+};
+
 int arch_cpu_init(void)
 {
int i;
@@ -54,3 +78,25 @@ int arch_cpu_init(void)
 
return 0;
 }
+
+int get_cpu_id(void)
+{
+   return readl(STM32_DBGMCU_IDCODE) & STM32_DBGMCU_IDCODE_DEV_ID;
+}
+
+void set_env_soc_name(int cpu_id)
+{
+   char soc[16];
+   int i;
+
+   memset(soc, '\0', sizeof(soc));
+
+   for (i = 0; i < sizeof(stm32_cpu_id_table); i++) {
+   if (stm32_cpu_id_table[i].id == cpu_id) {
+   snprintf(soc, sizeof(soc), stm32_cpu_id_table[i].name);
+   break;
+   }
+   }
+
+   env_set("soc_name", soc);
+}
-- 
1.9.1

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