Re: [U-Boot] [PATCH 1/8] mach-stm32: Add get_cpu_id support
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
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
From: Patrice ChotardThis 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