[U-Boot] [PATCH 2/4] OMAP3, AM35x: Detect exact CPU in arch_cpu_init()

Sanjeev Premi premi at ti.com
Tue Dec 15 19:37:44 CET 2009


This patch identifies exact cpu in function arch_cpu_init().

It does the following:
- It consolidates all related #defines into omap3.h.
- Prefixes CTRL_ to #defines used in comparison against
  contents of Control Status Register returned by the
  function get_cpu_type().
- Adds new #defines to identify exact CPU id.

Signed-off-by: Sanjeev Premi <premi at ti.com>
---
 cpu/arm_cortexa8/omap3/sys_info.c  |   55 ++++++++++++++++++++++++++++++++++-
 include/asm-arm/arch-omap3/cpu.h   |    6 ----
 include/asm-arm/arch-omap3/omap3.h |   26 +++++++++++++++-
 3 files changed, 77 insertions(+), 10 deletions(-)

diff --git a/cpu/arm_cortexa8/omap3/sys_info.c b/cpu/arm_cortexa8/omap3/sys_info.c
index 6206e17..3544d26 100644
--- a/cpu/arm_cortexa8/omap3/sys_info.c
+++ b/cpu/arm_cortexa8/omap3/sys_info.c
@@ -45,14 +45,17 @@ static u16 cpu_family;
 static u16 cpu_id;
 static u8  cpu_revision;
 
+static u32 get_cpu_type(void);
+
 /**
  * Identify the silicon
  *
- * Currently, it identifies the cpu family and silicon revision.
+ * It identifies the cpu family, exact cpu and silicon revision.
  */
 void identify_cpu (void)
 {
 	u32 cpuid = 0;
+	u32 cputype;
 	u16 hawkeye;
 	struct ctrl_id *id_base;
 
@@ -73,6 +76,9 @@ void identify_cpu (void)
 		hawkeye  = (cpuid >> HAWKEYE_SHIFT) & 0xffff;
 		cpu_revision = (cpuid >> CPU_3XX_ID_SHIFT) & 0xf;
 
+		/*
+		 * Identify cpu family and revision
+		 */
 		switch (hawkeye) {
 		case HAWKEYE_OMAP34XX:
 			cpu_family = CPU_OMAP34XX;
@@ -90,6 +96,51 @@ void identify_cpu (void)
 			cpu_family = CPU_OMAP34XX;
 			break;
 		}
+
+		cputype = get_cpu_type();
+		switch (cpu_family)
+		{
+		case CPU_OMAP34XX:
+			switch (cputype) {
+			case CTRL_OMAP3503:
+				cpu_id = OMAP3503;
+				break;
+			case CTRL_OMAP3515:
+				cpu_id = OMAP3515;
+				break;
+			case CTRL_OMAP3525:
+				cpu_id = OMAP3525;
+				break;
+			case CTRL_OMAP3530:
+				cpu_id = OMAP3430;	/* Same as OMAP3530 */
+				break;
+			default:
+				cpu_id = OMAP3430;
+				break;
+			}
+			break;
+
+		case CPU_AM35XX:
+			switch (cputype) {
+			case CTRL_AM3505:
+				cpu_id = AM3505;
+				break;
+			case CTRL_AM3517:
+				cpu_id = AM3517;
+				break;
+			default:
+				cpu_id = AM3505;
+				break;
+			}
+			break;
+
+		default:
+			/*
+			 * Fall back to most common device
+			 */
+			cpu_id = OMAP3430;
+			break;
+		}
 	}
 }
 
@@ -150,7 +201,7 @@ void dieid_num_r(void)
 /******************************************
  * get_cpu_type(void) - extract cpu info
  ******************************************/
-u32 get_cpu_type(void)
+static u32 get_cpu_type(void)
 {
 	return readl(&ctrl_base->ctrl_omap_stat);
 }
diff --git a/include/asm-arm/arch-omap3/cpu.h b/include/asm-arm/arch-omap3/cpu.h
index 8ab2e39..088a342 100644
--- a/include/asm-arm/arch-omap3/cpu.h
+++ b/include/asm-arm/arch-omap3/cpu.h
@@ -60,12 +60,6 @@ struct ctrl {
 #endif /* __ASSEMBLY__ */
 #endif /* __KERNEL_STRICT_NAMES */
 
-/* cpu type */
-#define OMAP3503		0x5c00
-#define OMAP3515		0x1c00
-#define OMAP3525		0x4c00
-#define OMAP3530		0x0c00
-
 #ifndef __KERNEL_STRICT_NAMES
 #ifndef __ASSEMBLY__
 struct ctrl_id {
diff --git a/include/asm-arm/arch-omap3/omap3.h b/include/asm-arm/arch-omap3/omap3.h
index 86df1f2..af23e5d 100644
--- a/include/asm-arm/arch-omap3/omap3.h
+++ b/include/asm-arm/arch-omap3/omap3.h
@@ -161,8 +161,6 @@ struct gpio {
 #define DDR_133		133	/* most combo, some mem d-boards */
 #define DDR_165		165	/* future parts */
 
-#define CPU_3430	0x3430
-
 /*
  * 343x real hardware:
  *  ES1     = rev 0
@@ -197,4 +195,28 @@ struct gpio {
 #define CPU_OMAP34XX		0x3400	/* OMAP34xx/OMAP35 devices */
 #define CPU_AM35XX		0x3500	/* AM35xx devices          */
 
+/*
+ * Define CPUs
+ */
+#define OMAP3430		0x3430
+
+#define OMAP3503		0x3503
+#define OMAP3515		0x3515
+#define OMAP3525		0x3525
+#define OMAP3530		0x3530
+
+#define AM3505			0x3505
+#define AM3517			0x3517
+
+/*
+ * Control status register values corresponding to cpu variants
+ */
+#define CTRL_OMAP3503		0x5c00
+#define CTRL_OMAP3515		0x1c00
+#define CTRL_OMAP3525		0x4c00
+#define CTRL_OMAP3530		0x0c00
+
+#define CTRL_AM3505		0x5c00
+#define CTRL_AM3517		0x1c00
+
 #endif
-- 
1.6.2.2



More information about the U-Boot mailing list