ARM: OMAP: Improve 34xx detection
authorTony Lindgren <tony@atomide.com>
Thu, 25 Sep 2008 12:34:00 +0000 (15:34 +0300)
committerTony Lindgren <tony@atomide.com>
Thu, 25 Sep 2008 12:37:34 +0000 (15:37 +0300)
Fix it for ES3.0. Also use ES3.0 now as the default for unknown
future revision, and make the code easier to follow.

Also fixed omap detection for ES2.1 and ES3.0 with a patch from
Tero Kristo.

Signed-off-by: Tero Kristo <tero.kristo@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/id.c

index ab7a6e9..7a7ad18 100644 (file)
@@ -150,45 +150,49 @@ void __init omap34xx_check_revision(void)
        char *rev_name;
 
        /*
+        * We cannot access revision registers on ES1.0.
         * If the processor type is Cortex-A8 and the revision is 0x0
-        * it means its Cortex r0p0 which is 3430 ES1
+        * it means its Cortex r0p0 which is 3430 ES1.0.
         */
        cpuid = read_cpuid(CPUID_ID);
        if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) {
                system_rev = OMAP3430_REV_ES1_0;
+               rev_name = "ES1.0";
                goto out;
        }
 
        /*
         * Detection for 34xx ES2.0 and above can be done with just
         * hawkeye and rev. See TRM 1.5.2 Device Identification.
-        * Note that rev cannot be used directly as ES1.0 uses value 0.
+        * Note that rev does not map directly to our defined processor
+        * revision numbers as ES1.0 uses value 0.
         */
        idcode = read_tap_reg(OMAP_TAP_IDCODE);
        hawkeye = (idcode >> 12) & 0xffff;
        rev = (idcode >> 28) & 0xff;
 
-       if (hawkeye == 0xb7ae)
-               system_rev = 0x34300034 | ((1 + rev) << 12);
-
-out:
-       switch (system_rev) {
-       case OMAP3430_REV_ES1_0:
-               rev_name = "ES1.0";
-               break;
-       case OMAP3430_REV_ES2_0:
-               rev_name = "ES2.0";
-               break;
-       case OMAP3430_REV_ES2_1:
-               rev_name = "ES2.1";
-               break;
-       case OMAP3430_REV_ES3_0:
-               rev_name = "ES3.0";
-               break;
-       default:
-               rev_name = "Unknown revision\n";
+       if (hawkeye == 0xb7ae) {
+               switch (rev) {
+               case 0:
+                       system_rev = OMAP3430_REV_ES2_0;
+                       rev_name = "ES2.0";
+                       break;
+               case 2:
+                       system_rev = OMAP3430_REV_ES2_1;
+                       rev_name = "ES2.1";
+                       break;
+               case 3:
+                       system_rev = OMAP3430_REV_ES3_0;
+                       rev_name = "ES3.0";
+                       break;
+               default:
+                       /* Use the latest known revision as default */
+                       system_rev = OMAP3430_REV_ES3_0;
+                       rev_name = "Unknown revision\n";
+               }
        }
 
+out:
        pr_info("OMAP%04x %s\n", system_rev >> 16, rev_name);
 }