OMAP4: ID: add omap_has_feature for max freq supported
authorAneesh V <aneesh@ti.com>
Sat, 2 Jul 2011 02:30:22 +0000 (08:00 +0530)
committerTony Lindgren <tony@atomide.com>
Fri, 8 Jul 2011 09:11:45 +0000 (02:11 -0700)
Macros for identifying the max frequency supported by various
OMAP4 variants - Expanding along the lines of OMAP3's feature
handling.

[nm@ti.com: minor fixes for checks that should only for 443x|446x]
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Aneesh V <aneesh@ti.com>
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Reviewed-by: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/id.c
arch/arm/plat-omap/include/plat/cpu.h

index 743889a..37efb86 100644 (file)
@@ -31,7 +31,7 @@
 static struct omap_chip_id omap_chip;
 static unsigned int omap_revision;
 
-u32 omap3_features;
+u32 omap_features;
 
 unsigned int omap_rev(void)
 {
@@ -183,14 +183,14 @@ static void __init omap24xx_check_revision(void)
 #define OMAP3_CHECK_FEATURE(status,feat)                               \
        if (((status & OMAP3_ ##feat## _MASK)                           \
                >> OMAP3_ ##feat## _SHIFT) != FEAT_ ##feat## _NONE) {   \
-               omap3_features |= OMAP3_HAS_ ##feat;                    \
+               omap_features |= OMAP3_HAS_ ##feat;                     \
        }
 
 static void __init omap3_check_features(void)
 {
        u32 status;
 
-       omap3_features = 0;
+       omap_features = 0;
 
        status = omap_ctrl_readl(OMAP3_CONTROL_OMAP_STATUS);
 
@@ -200,11 +200,11 @@ static void __init omap3_check_features(void)
        OMAP3_CHECK_FEATURE(status, NEON);
        OMAP3_CHECK_FEATURE(status, ISP);
        if (cpu_is_omap3630())
-               omap3_features |= OMAP3_HAS_192MHZ_CLK;
+               omap_features |= OMAP3_HAS_192MHZ_CLK;
        if (!cpu_is_omap3505() && !cpu_is_omap3517())
-               omap3_features |= OMAP3_HAS_IO_WAKEUP;
+               omap_features |= OMAP3_HAS_IO_WAKEUP;
 
-       omap3_features |= OMAP3_HAS_SDRC;
+       omap_features |= OMAP3_HAS_SDRC;
 
        /*
         * TODO: Get additional info (where applicable)
@@ -212,9 +212,34 @@ static void __init omap3_check_features(void)
         */
 }
 
+static void __init omap4_check_features(void)
+{
+       u32 si_type;
+
+       if (cpu_is_omap443x())
+               omap_features |= OMAP4_HAS_MPU_1GHZ;
+
+
+       if (cpu_is_omap446x()) {
+               si_type =
+                       read_tap_reg(OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_1);
+               switch ((si_type & (3 << 16)) >> 16) {
+               case 2:
+                       /* High performance device */
+                       omap_features |= OMAP4_HAS_MPU_1_5GHZ;
+                       break;
+               case 1:
+               default:
+                       /* Standard device */
+                       omap_features |= OMAP4_HAS_MPU_1_2GHZ;
+                       break;
+               }
+       }
+}
+
 static void __init ti816x_check_features(void)
 {
-       omap3_features = OMAP3_HAS_NEON;
+       omap_features = OMAP3_HAS_NEON;
 }
 
 static void __init omap3_check_revision(void)
@@ -527,6 +552,7 @@ void __init omap2_check_revision(void)
                return;
        } else if (cpu_is_omap44xx()) {
                omap4_check_revision();
+               omap4_check_features();
                return;
        } else {
                pr_err("OMAP revision unknown, please fix!\n");
index a2cec99..67b3d75 100644 (file)
@@ -478,7 +478,7 @@ void omap2_check_revision(void);
 /*
  * Runtime detection of OMAP3 features
  */
-extern u32 omap3_features;
+extern u32 omap_features;
 
 #define OMAP3_HAS_L2CACHE              BIT(0)
 #define OMAP3_HAS_IVA                  BIT(1)
@@ -488,11 +488,15 @@ extern u32 omap3_features;
 #define OMAP3_HAS_192MHZ_CLK           BIT(5)
 #define OMAP3_HAS_IO_WAKEUP            BIT(6)
 #define OMAP3_HAS_SDRC                 BIT(7)
+#define OMAP4_HAS_MPU_1GHZ             BIT(8)
+#define OMAP4_HAS_MPU_1_2GHZ           BIT(9)
+#define OMAP4_HAS_MPU_1_5GHZ           BIT(10)
+
 
 #define OMAP3_HAS_FEATURE(feat,flag)                   \
 static inline unsigned int omap3_has_ ##feat(void)     \
 {                                                      \
-       return (omap3_features & OMAP3_HAS_ ##flag);    \
+       return omap_features & OMAP3_HAS_ ##flag;       \
 }                                                      \
 
 OMAP3_HAS_FEATURE(l2cache, L2CACHE)
@@ -504,4 +508,19 @@ OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK)
 OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP)
 OMAP3_HAS_FEATURE(sdrc, SDRC)
 
+/*
+ * Runtime detection of OMAP4 features
+ */
+extern u32 omap_features;
+
+#define OMAP4_HAS_FEATURE(feat, flag)                  \
+static inline unsigned int omap4_has_ ##feat(void)     \
+{                                                      \
+       return omap_features & OMAP4_HAS_ ##flag;       \
+}                                                      \
+
+OMAP4_HAS_FEATURE(mpu_1ghz, MPU_1GHZ)
+OMAP4_HAS_FEATURE(mpu_1_2ghz, MPU_1_2GHZ)
+OMAP4_HAS_FEATURE(mpu_1_5ghz, MPU_1_5GHZ)
+
 #endif