omap: Add chip id recognition for OMAP4 ES2.1 and ES2.2
authorNishant Kamat <nskamat@ti.com>
Thu, 17 Feb 2011 17:55:03 +0000 (09:55 -0800)
committerTony Lindgren <tony@atomide.com>
Fri, 18 Feb 2011 00:16:35 +0000 (16:16 -0800)
Allow OMAP4 ES2.1 and ES2.2 revisions to be recognized in the
omap4_check_revision() function.

Mainly, ES2.1 has fixes that allow LPDDR to be used at 100% OPP (400MHz).
ES2.2 additionally has a couple of power management fixes (to reduce
leakage), an I2C1 SDA line state fix, and a floating point write
corruption fix (cortex erratum).

Even though the current mainline support doesn't need to distinguish
between ES2.X versions, it's still useful to know the correct silicon
rev when issues are reported. Moreover, these id checks can be used by
power management code that selects suitable OPPs considering the
memory speed limitation on ES2.0.

For details about the silicon errata on OMAP4430, refer
http://focus.ti.com/pdfs/wtbu/SWPZ009A_OMAP4430_Errata_Public_vA.pdf

Signed-off-by: Nishant Kamat <nskamat@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/id.c
arch/arm/plat-omap/include/plat/cpu.h

index 5c25f1b552357dec1830eda820ab8efa47421fb3..3168b17bc264c604315a4d0a4f68e66dcbe1eecd 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (C) 2005 Nokia Corporation
  * Written by Tony Lindgren <tony@atomide.com>
  *
- * Copyright (C) 2009 Texas Instruments
+ * Copyright (C) 2009-11 Texas Instruments
  * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -328,7 +328,7 @@ static void __init omap4_check_revision(void)
         */
        idcode = read_tap_reg(OMAP_TAP_IDCODE);
        hawkeye = (idcode >> 12) & 0xffff;
-       rev = (idcode >> 28) & 0xff;
+       rev = (idcode >> 28) & 0xf;
 
        /*
         * Few initial ES2.0 samples IDCODE is same as ES1.0
@@ -347,22 +347,31 @@ static void __init omap4_check_revision(void)
                        omap_chip.oc |= CHIP_IS_OMAP4430ES1;
                        break;
                case 1:
+               default:
                        omap_revision = OMAP4430_REV_ES2_0;
                        omap_chip.oc |= CHIP_IS_OMAP4430ES2;
+               }
+               break;
+       case 0xb95c:
+               switch (rev) {
+               case 3:
+                       omap_revision = OMAP4430_REV_ES2_1;
+                       omap_chip.oc |= CHIP_IS_OMAP4430ES2_1;
                        break;
+               case 4:
                default:
-                       omap_revision = OMAP4430_REV_ES2_0;
-                       omap_chip.oc |= CHIP_IS_OMAP4430ES2;
-       }
-       break;
+                       omap_revision = OMAP4430_REV_ES2_2;
+                       omap_chip.oc |= CHIP_IS_OMAP4430ES2_2;
+               }
+               break;
        default:
-               /* Unknown default to latest silicon rev as default*/
-               omap_revision = OMAP4430_REV_ES2_0;
-               omap_chip.oc |= CHIP_IS_OMAP4430ES2;
+               /* Unknown default to latest silicon rev as default */
+               omap_revision = OMAP4430_REV_ES2_2;
+               omap_chip.oc |= CHIP_IS_OMAP4430ES2_2;
        }
 
-       pr_info("OMAP%04x ES%d.0\n",
-                       omap_rev() >> 16, ((omap_rev() >> 12) & 0xf) + 1);
+       pr_info("OMAP%04x ES%d.%d\n", omap_rev() >> 16,
+               ((omap_rev() >> 12) & 0xf), ((omap_rev() >> 8) & 0xf));
 }
 
 #define OMAP3_SHOW_FEATURE(feat)               \
index be99438d385e00a26be2f83469d7f984d6bc1f55..8198bb6cdb5efe81bd1ca32d6633a427a1323e7e 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright (C) 2004, 2008 Nokia Corporation
  *
- * Copyright (C) 2009 Texas Instruments.
+ * Copyright (C) 2009-11 Texas Instruments.
  *
  * Written by Tony Lindgren <tony.lindgren@nokia.com>
  *
@@ -405,8 +405,10 @@ IS_OMAP_TYPE(3517, 0x3517)
 #define TI8168_REV_ES1_1       (TI816X_CLASS | (OMAP_REVBITS_01 << 8))
 
 #define OMAP443X_CLASS         0x44300044
-#define OMAP4430_REV_ES1_0     OMAP443X_CLASS
-#define OMAP4430_REV_ES2_0     0x44301044
+#define OMAP4430_REV_ES1_0     (OMAP443X_CLASS | (0x10 << 8))
+#define OMAP4430_REV_ES2_0     (OMAP443X_CLASS | (0x20 << 8))
+#define OMAP4430_REV_ES2_1     (OMAP443X_CLASS | (0x21 << 8))
+#define OMAP4430_REV_ES2_2     (OMAP443X_CLASS | (0x22 << 8))
 
 /*
  * omap_chip bits
@@ -434,12 +436,16 @@ IS_OMAP_TYPE(3517, 0x3517)
 #define CHIP_IS_OMAP3630ES1_1           (1 << 9)
 #define CHIP_IS_OMAP3630ES1_2           (1 << 10)
 #define CHIP_IS_OMAP4430ES2            (1 << 11)
+#define CHIP_IS_OMAP4430ES2_1          (1 << 12)
+#define CHIP_IS_OMAP4430ES2_2          (1 << 13)
 #define CHIP_IS_TI816X                 (1 << 14)
 
 #define CHIP_IS_OMAP24XX               (CHIP_IS_OMAP2420 | CHIP_IS_OMAP2430)
 
-#define CHIP_IS_OMAP4430               (CHIP_IS_OMAP4430ES1 | \
-                                                CHIP_IS_OMAP4430ES2)
+#define CHIP_IS_OMAP4430               (CHIP_IS_OMAP4430ES1 |          \
+                                        CHIP_IS_OMAP4430ES2 |          \
+                                        CHIP_IS_OMAP4430ES2_1 |        \
+                                        CHIP_IS_OMAP4430ES2_2)
 
 /*
  * "GE" here represents "greater than or equal to" in terms of ES