Re: [PATCH v2 2/6] OMAP4: ID: add omap_has_feature for max freq supported

2011-08-04 Thread Menon, Nishanth
On Fri, Jul 1, 2011 at 21:30, Rajendra Nayak rna...@ti.com wrote:

[...]

 +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;
I have seen http://www.mail-archive.com/linux-omap@vger.kernel.org/msg51988.html
and I disagree with this.

We are setting up a standard for all future silicon that omap_features
if it contains a higher frequency will always support all lower
frequencies in omap_feature. This may be convinent for the moment,
BUT, I disagree with the approach as we cannot guarantee that this
will be the approach for all silica in the future and approach taken
here could be considered short-sighted. if 1.2GHz will be supported
then a check for omap_has_1_2GHz should be true as well - which this
patch will fail to support. E.g. on 4460 has_1GHz should'nt return
true as it is 920MHz, but the check for 1_2GHz should be true - which
it wont as return omap_features  OMAP3_HAS_ ##flag; will not have
BIT(9) set.


Regards,
Nishanth Menon
 +               case 1:
 +               default:
 +                       /* Standard device */
 +                       omap_features |= OMAP4_HAS_MPU_1_2GHZ;
 +                       break;
 +               }
 +       }
 +}
[...]
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 2/6] OMAP4: ID: add omap_has_feature for max freq supported

2011-07-08 Thread Paul Walmsley
On Sat, 2 Jul 2011, Rajendra Nayak wrote:

 From: Aneesh V ane...@ti.com
 
 Macros for identifying the max frequency supported by various
 OMAP4 variants - Expanding along the lines of OMAP3's feature
 handling.
 
 [n...@ti.com: minor fixes for checks that should only for 443x|446x]
 Signed-off-by: Nishanth Menon n...@ti.com
 Signed-off-by: Aneesh V ane...@ti.com
 Signed-off-by: Rajendra Nayak rna...@ti.com
 Reviewed-by: Kevin Hilman khil...@ti.com

The use of the id.c 'features' code to specify MPU speed limits doesn't 
look right to me, but I don't have a better solution in mind at the 
moment, so:

Reviewed-by: Paul Walmsley p...@pwsan.com


- Paul
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 2/6] OMAP4: ID: add omap_has_feature for max freq supported

2011-07-01 Thread Rajendra Nayak
From: Aneesh V ane...@ti.com

Macros for identifying the max frequency supported by various
OMAP4 variants - Expanding along the lines of OMAP3's feature
handling.

[n...@ti.com: minor fixes for checks that should only for 443x|446x]
Signed-off-by: Nishanth Menon n...@ti.com
Signed-off-by: Aneesh V ane...@ti.com
Signed-off-by: Rajendra Nayak rna...@ti.com
Reviewed-by: Kevin Hilman khil...@ti.com
---
V2:
* Replaced 'omap3_features' and 'omap4_features' with a single
  variable 'omap_features'
---
 arch/arm/mach-omap2/id.c  |   40 +++-
 arch/arm/plat-omap/include/plat/cpu.h |   23 +-
 2 files changed, 54 insertions(+), 9 deletions(-)

diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index 743889a..37efb86 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -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);
diff --git a/arch/arm/plat-omap/include/plat/cpu.h 
b/arch/arm/plat-omap/include/plat/cpu.h
index 86b1420..0690f1a 100644
--- a/arch/arm/plat-omap/include/plat/cpu.h
+++ b/arch/arm/plat-omap/include/plat/cpu.h
@@ -481,7 +481,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)
@@ -491,11 +491,15 @@ extern u32 omap3_features;
 #define OMAP3_HAS_192MHZ_CLK   BIT(5)
 #define OMAP3_HAS_IO_WAKEUPBIT(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)
@@ -507,4 +511,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;
+