From 245cbc583db7c1ca52aa32428b8e86f3449d4af2 Mon Sep 17 00:00:00 2001 From: Wenyou Yang Date: Wed, 13 Sep 2017 14:58:53 +0800 Subject: [PATCH] ARM: at91: Get the Chip ID of SAMA5D2 SiP The SAMA5D2 SiP(System in Package) has different Chip IDs in the CHIPID and CHIP_EXID registers. Signed-off-by: Wenyou Yang Reviewed-by: Simon Glass --- arch/arm/mach-at91/armv7/sama5d2_devices.c | 26 ++++++++++++++++++++-- arch/arm/mach-at91/include/mach/sama5d2.h | 7 +++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-at91/armv7/sama5d2_devices.c b/arch/arm/mach-at91/armv7/sama5d2_devices.c index 978eac29bd..de1d9b5bfb 100644 --- a/arch/arm/mach-at91/armv7/sama5d2_devices.c +++ b/arch/arm/mach-at91/armv7/sama5d2_devices.c @@ -10,11 +10,20 @@ #include #include -char *get_cpu_name() +int cpu_is_sama5d2(void) { + unsigned int chip_id = get_chip_id(); + + return ((chip_id == ARCH_ID_SAMA5D2) || + (chip_id == ARCH_ID_SAMA5D2_SIP)) ? 1 : 0; +} + +char *get_cpu_name(void) +{ + unsigned int chip_id = get_chip_id(); unsigned int extension_id = get_extension_chip_id(); - if (cpu_is_sama5d2()) { + if (chip_id == ARCH_ID_SAMA5D2) { switch (extension_id) { case ARCH_EXID_SAMA5D21CU: return "SAMA5D21"; @@ -41,6 +50,19 @@ char *get_cpu_name() } } + if ((chip_id == ARCH_ID_SAMA5D2) || (chip_id == ARCH_ID_SAMA5D2_SIP)) { + switch (extension_id) { + case ARCH_EXID_SAMA5D225C_D1M: + return "SAMA5D225 128M bits DDR2 SDRAM"; + case ARCH_EXID_SAMA5D27C_D5M: + return "SAMA5D27 512M bits DDR2 SDRAM"; + case ARCH_EXID_SAMA5D27C_D1G: + return "SAMA5D27 1G bits DDR2 SDRAM"; + case ARCH_EXID_SAMA5D28C_D1G: + return "SAMA5D28 1G bits DDR2 SDRAM"; + } + } + return "Unknown CPU type"; } diff --git a/arch/arm/mach-at91/include/mach/sama5d2.h b/arch/arm/mach-at91/include/mach/sama5d2.h index 25c85411e5..49283ed86b 100644 --- a/arch/arm/mach-at91/include/mach/sama5d2.h +++ b/arch/arm/mach-at91/include/mach/sama5d2.h @@ -222,7 +222,11 @@ #define ARCH_EXID_SAMA5D28CU 0x00000010 #define ARCH_EXID_SAMA5D28CN 0x00000020 -#define cpu_is_sama5d2() (get_chip_id() == ARCH_ID_SAMA5D2) +#define ARCH_ID_SAMA5D2_SIP 0x8a5c08c2 +#define ARCH_EXID_SAMA5D225C_D1M 0x00000053 +#define ARCH_EXID_SAMA5D27C_D5M 0x00000032 +#define ARCH_EXID_SAMA5D27C_D1G 0x00000033 +#define ARCH_EXID_SAMA5D28C_D1G 0x00000013 /* PIT Timer(PIT_PIIR) */ #define CONFIG_SYS_TIMER_COUNTER 0xf804803c @@ -233,6 +237,7 @@ #ifndef __ASSEMBLY__ unsigned int get_chip_id(void); unsigned int get_extension_chip_id(void); +int cpu_is_sama5d2(void); unsigned int has_lcdc(void); char *get_cpu_name(void); #endif -- 2.39.5