[U-Boot] [PATCH] Updated code to print OMAP4 cpu info.

Asad Akbar asadakbar at gmail.com
Tue Mar 15 12:59:56 CET 2011


---
 arch/arm/cpu/armv7/omap4/sys_
info.c |  150 +++++++++++++++++++++++++++++++++--
 1 files changed, 144 insertions(+), 6 deletions(-)

diff --git a/arch/arm/cpu/armv7/omap4/sys_info.c
b/arch/arm/cpu/armv7/omap4/sys_info.c
index b9e5765..14145fb 100644
--- a/arch/arm/cpu/armv7/omap4/sys_info.c
+++ b/arch/arm/cpu/armv7/omap4/sys_info.c
@@ -3,8 +3,9 @@
 * Texas Instruments, <www.ti.com>
 *
 * Author :
- *     Aneesh V        <aneesh at ti.com>
- *     Steve Sakoman   <steve at sakoman.com>
+ *  Aneesh V    <aneesh at ti.com>
+ *  Steve Sakoman   <steve at sakoman.com>
+ *  Asad Akbar      <asadakbar at gmail.com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
@@ -25,12 +26,40 @@
 #include <common.h>
 #include <asm/arch/sys_proto.h>

+/**
+ * Registers addresses.
+ */
+#define DEVICE_IDENTIFICATION_BASE      0x4A002000
+#define DIE_ID_0                        0x200
+#define ID_CODE                         0x204
+#define DIE_ID_1                        0x208
+#define DIE_ID_2                        0x20C
+#define DIE_ID_3                        0x210
+#define PROD_ID_0                       0x214
+#define PROD_ID_1                       0x218
+
+/**
+ * Device types
+ */
+#define DEVICE_TYPE_GP                  0xF0
+#define DEVICE_TYPE_HS                  0xF1    /* TODO: It has to be
updated. */
+#define DEVICE_TYPE_EMU                 0xF2    /* TODO: It has to be
updated. */
+#define DEVICE_TYPE_TST                 0xF3    /* TODO: It has to be
updated. */
+
 /*
 *  get_device_type(): tell if GP/HS/EMU/TST
 */
 u32 get_device_type(void)
 {
-       return 0;
+    u32 val32;
+
+    /* Reader PROD_ID_0 register. */
+    val32 = __raw_readl (DEVICE_IDENTIFICATION_BASE + PROD_ID_0);
+
+    /* Get only device type bits. */
+    val32 &= 0xFF;
+
+    return (val32);
 }

 /*
@@ -38,7 +67,7 @@ u32 get_device_type(void)
 */
 u32 get_board_rev(void)
 {
-       return 0x20;
+    return 0x20;
 }

 /*
@@ -46,8 +75,117 @@ u32 get_board_rev(void)
 */
 int print_cpuinfo(void)
 {
+    u32 val32;
+    u32 id[4] = { 0 };
+
+    /* Reader ID_CODE register. */
+    val32 = __raw_readl (DEVICE_IDENTIFICATION_BASE + ID_CODE);
+
+    /* Make sure that it is as per documentation. */
+    if (val32 & 0x1)
+    {
+        /**
+         * Get silicon type.
+         */
+        if (val32 == 0x0B85202F)
+        {
+            printf("Silicon Type:               OMAP4430 ES1.0\n");
+        }
+        else if (val32 == 0x1B85202F)
+        {
+            printf("Silicon Type:               OMAP4430 ES2.0\n");
+        }
+        else if (val32 == 0x3B95C02F)
+        {
+            printf("Silicon Type:               OMAP4430 ES2.1\n");
+        }
+        else
+        {
+            printf("Silicon Type:               Unknown\n");
+        }
+
+        /**
+         * Get version.
+         */
+        u8 version = (val32 >> 28) & 0xFF;
+
+        switch(version)
+        {
+        case 0:
+            printf("Version:                    OMAP4430 ES1.0\n");
+            break;
+
+        case 1:
+            printf("Version:                    OMAP4430 ES2.0\n");
+            break;
+
+        case 3:
+            printf("Version:                    OMAP4430 ES2.1\n");
+            break;
+
+        default:
+            printf("Version:                    Unknown\n");
+            break;
+        }
+
+        /**
+         * Get Hawkeye
+         */
+        u16 hawkeye = (val32 >> 12) & 0xFFFFF;
+
+        if (hawkeye == 0xB852)
+        {
+            printf("Hawkeye:                    OMAP4430 ES1.0 and
ES2.0\n");
+        }
+        else if (hawkeye == 0xB95C)
+        {
+            printf("Hawkeye:                    OMAP4430 ES2.1\n");
+        }
+
+        /**
+         * Get TI IDM.
+         */
+        printf("Manufacturer Identity (TI): 0x%X\n", (val32 >> 1));
+    }
+    else
+    {
+        printf("%s\n", "omap_silicon_revision: TI_IDM bit is not found.");
+    }
+
+    /* Get device type. */
+    u8 device_type = get_device_type();
+
+    switch (device_type)
+    {
+        case DEVICE_TYPE_TST:
+            printf("Device Type:                %s\n", "TST");
+            break;
+        case DEVICE_TYPE_EMU:
+            printf("Device Type:                %s\n", "EMU");
+            break;
+        case DEVICE_TYPE_HS:
+            printf("Device Type:                %s\n", "HS");
+            break;
+        case DEVICE_TYPE_GP:
+            printf("Device Type:                %s\n", "GP");
+            break;
+        default:
+            printf("Device Type:                %s\n", "???");
+    }
+
+    /* Get Die-id */
+    id[0] = __raw_readl(DEVICE_IDENTIFICATION_BASE + DIE_ID_0);
+    id[1] = __raw_readl(DEVICE_IDENTIFICATION_BASE + DIE_ID_1);
+    id[2] = __raw_readl(DEVICE_IDENTIFICATION_BASE + DIE_ID_2);
+    id[3] = __raw_readl(DEVICE_IDENTIFICATION_BASE + DIE_ID_3);
+
+    printf("Die-ID:                     %08X-%08X-%08X-%08X\n", id[3],
id[2], id[1], id[0]);
+
+    /* Get prod-id */
+    id[0] = __raw_readl(DEVICE_IDENTIFICATION_BASE + PROD_ID_0);
+    id[1] = __raw_readl(DEVICE_IDENTIFICATION_BASE + PROD_ID_1);

-       puts("CPU  : OMAP4430\n");
+    printf("Prod-id:                    %08X-%08X\n", id[1], id[0]);

-       return 0;
+    return 0;
 }
--
1.7.4.1


More information about the U-Boot mailing list