diff mbox

[PATCHv5] omap3: Add basic support for 720MHz part

Message ID 1297239010-29683-1-git-send-email-premi@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sanjeev Premi Feb. 9, 2011, 8:10 a.m. UTC
None

Comments

Laurent Pinchart Feb. 6, 2014, 7:26 p.m. UTC | #1
Hi all,

On Friday 22 June 2012 11:33:51 Laurent Pinchart wrote:
> On Thursday 10 February 2011 08:45:00 Kevin Hilman wrote:
> > Sanjeev Premi <premi@ti.com> writes:
> > > This patch adds support for speed enhanced variant of OMAP35x
> > > processors. These parts allow ARM and IVA running at 720MHz
> > > and 520MHz respectively.
> > > 
> > > These parts can be detected at runtime by reading contents of
> > > PRODID.SKUID[3:0] at 0x4830A20C [1].
> > > 
> > > This patch specifically does following:
> > >  * Add new OPP to omap34xx_opp_def_list[] - disabled by default.
> > >  * Detect devices capable of running at new OPP.
> > >  * Enable new OPP only if device supports it.
> > >  * Check for presence of IVA before attempting to enable the
> > >  
> > >    corresponding OPP.
> > >   
> > >   [1] http://focus.ti.com/lit/ug/spruff1d/spruff1d.pdf
> > > 
> > > It appears from discussions (on this patch) that a variant of
> > > OMAP3430 supports this OPP but lacks runtime detection. This
> > > 
> > > OPP can be enabled for these device by either:
> > >  1) Setting the bit corresponding to OMAP3_HAS_720MHZ
> > >  
> > >     in 'omap3_features'. (Refer changes to id.c)
> > >  
> > >  2) Removing check for omap3_has_720mhz() before enabling
> > >  
> > >     the OPP. (Refer changes to opp3xxx_data.c)
> > >  
> > >  3) Calling opp_enable() for 720MHz/VDD1 and 520MHz/VDD2 in
> > >  
> > >     the board file. (Refer changes to opp3xxx_data.c).
> > >     This should, ideally, be done before omap3_opp_init() is
> > >     called during device_initcall().
> > > 
> > > CAUTION: This should be done for identified parts only.
> > > 
> > >          Else, the device could be damaged permanently.
> > > 
> > > Signed-off-by: Sanjeev Premi <premi@ti.com>
> > > Reviewed-by: G, Manjunath Kondaiah <manjugk@ti.com>
> > 
> > Acked-by: Kevin Hilman <khilman@ti.com>
> 
> This patch seems to never have made it upstream. Is there a reason for that
> ?

Ping ?
Nishanth Menon Feb. 7, 2014, 1:51 p.m. UTC | #2
Laurent,

On Thu, Feb 6, 2014 at 1:26 PM, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
> Hi all,
>
> On Friday 22 June 2012 11:33:51 Laurent Pinchart wrote:
>> On Thursday 10 February 2011 08:45:00 Kevin Hilman wrote:
>> > Sanjeev Premi <premi@ti.com> writes:
>> > > This patch adds support for speed enhanced variant of OMAP35x
>> > > processors. These parts allow ARM and IVA running at 720MHz
>> > > and 520MHz respectively.
>> > >
>> > > These parts can be detected at runtime by reading contents of
>> > > PRODID.SKUID[3:0] at 0x4830A20C [1].
>> > >
>> > > This patch specifically does following:
>> > >  * Add new OPP to omap34xx_opp_def_list[] - disabled by default.
>> > >  * Detect devices capable of running at new OPP.
>> > >  * Enable new OPP only if device supports it.
>> > >  * Check for presence of IVA before attempting to enable the
>> > >
>> > >    corresponding OPP.
>> > >
>> > >   [1] http://focus.ti.com/lit/ug/spruff1d/spruff1d.pdf
>> > >
>> > > It appears from discussions (on this patch) that a variant of
>> > > OMAP3430 supports this OPP but lacks runtime detection. This
>> > >
>> > > OPP can be enabled for these device by either:
>> > >  1) Setting the bit corresponding to OMAP3_HAS_720MHZ
>> > >
>> > >     in 'omap3_features'. (Refer changes to id.c)
>> > >
>> > >  2) Removing check for omap3_has_720mhz() before enabling
>> > >
>> > >     the OPP. (Refer changes to opp3xxx_data.c)
>> > >
>> > >  3) Calling opp_enable() for 720MHz/VDD1 and 520MHz/VDD2 in
>> > >
>> > >     the board file. (Refer changes to opp3xxx_data.c).
>> > >     This should, ideally, be done before omap3_opp_init() is
>> > >     called during device_initcall().
>> > >
>> > > CAUTION: This should be done for identified parts only.
>> > >
>> > >          Else, the device could be damaged permanently.
>> > >
>> > > Signed-off-by: Sanjeev Premi <premi@ti.com>
>> > > Reviewed-by: G, Manjunath Kondaiah <manjugk@ti.com>
>> >
>> > Acked-by: Kevin Hilman <khilman@ti.com>
>>
>> This patch seems to never have made it upstream. Is there a reason for that
>> ?
>
> Ping ?


We'd have to figure out a proper opp modifier logic with device tree.
considering that non-dt boot is slowly getting dismantled in
mach-omap2, to add new capabilities in non-dt is not really a good
idea at this point in time - Further, we do have equivalent
requirements in other TI SoCs as well -

Regards,
Nishanth Menon
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Laurent Pinchart Feb. 10, 2014, 12:17 p.m. UTC | #3
Hi Nishanth,

On Friday 07 February 2014 07:51:00 Nishanth Menon wrote:
> On Thu, Feb 6, 2014 at 1:26 PM, Laurent Pinchart wrote:
> > On Friday 22 June 2012 11:33:51 Laurent Pinchart wrote:
> >> On Thursday 10 February 2011 08:45:00 Kevin Hilman wrote:
> >> > Sanjeev Premi <premi@ti.com> writes:
> >> > > This patch adds support for speed enhanced variant of OMAP35x
> >> > > processors. These parts allow ARM and IVA running at 720MHz
> >> > > and 520MHz respectively.
> >> > > 
> >> > > These parts can be detected at runtime by reading contents of
> >> > > PRODID.SKUID[3:0] at 0x4830A20C [1].
> >> > > 
> >> > > This patch specifically does following:
> >> > >  * Add new OPP to omap34xx_opp_def_list[] - disabled by default.
> >> > >  * Detect devices capable of running at new OPP.
> >> > >  * Enable new OPP only if device supports it.
> >> > >  * Check for presence of IVA before attempting to enable the
> >> > >    corresponding OPP.
> >> > >   
> >> > >   [1] http://focus.ti.com/lit/ug/spruff1d/spruff1d.pdf
> >> > > 
> >> > > It appears from discussions (on this patch) that a variant of
> >> > > OMAP3430 supports this OPP but lacks runtime detection. This
> >> > > OPP can be enabled for these device by either:
> >> > >  1) Setting the bit corresponding to OMAP3_HAS_720MHZ
> >> > >     in 'omap3_features'. (Refer changes to id.c)
> >> > >  
> >> > >  2) Removing check for omap3_has_720mhz() before enabling
> >> > >     the OPP. (Refer changes to opp3xxx_data.c)
> >> > >  
> >> > >  3) Calling opp_enable() for 720MHz/VDD1 and 520MHz/VDD2 in
> >> > >     the board file. (Refer changes to opp3xxx_data.c).
> >> > >     This should, ideally, be done before omap3_opp_init() is
> >> > >     called during device_initcall().
> >> > > 
> >> > > CAUTION: This should be done for identified parts only.
> >> > >          Else, the device could be damaged permanently.
> >> > > 
> >> > > Signed-off-by: Sanjeev Premi <premi@ti.com>
> >> > > Reviewed-by: G, Manjunath Kondaiah <manjugk@ti.com>
> >> > 
> >> > Acked-by: Kevin Hilman <khilman@ti.com>
> >> 
> >> This patch seems to never have made it upstream. Is there a reason for
> >> that
> >> ?
> > 
> > Ping ?
> 
> We'd have to figure out a proper opp modifier logic with device tree.
> considering that non-dt boot is slowly getting dismantled in mach-omap2, to
> add new capabilities in non-dt is not really a good idea at this point in
> time - Further, we do have equivalent requirements in other TI SoCs as well 

Good point, but I'm not sure to see where this patch is specific to legacy 
boot. The two functions it modifies, and omap3xxx_check_features() and 
omap3_opp_init(), are called for DT boot as well.
Nishanth Menon Feb. 10, 2014, 2:46 p.m. UTC | #4
On Mon, Feb 10, 2014 at 6:17 AM, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>> On Thu, Feb 6, 2014 at 1:26 PM, Laurent Pinchart wrote:
>> > On Friday 22 June 2012 11:33:51 Laurent Pinchart wrote:
>> >> On Thursday 10 February 2011 08:45:00 Kevin Hilman wrote:
>> >> > Sanjeev Premi <premi@ti.com> writes:
>> >> > > This patch adds support for speed enhanced variant of OMAP35x
>> >> > > processors. These parts allow ARM and IVA running at 720MHz
>> >> > > and 520MHz respectively.
>> >> > >
>> >> > > These parts can be detected at runtime by reading contents of
>> >> > > PRODID.SKUID[3:0] at 0x4830A20C [1].
>> >> > >
>> >> > > This patch specifically does following:
>> >> > >  * Add new OPP to omap34xx_opp_def_list[] - disabled by default.
>> >> > >  * Detect devices capable of running at new OPP.
>> >> > >  * Enable new OPP only if device supports it.
>> >> > >  * Check for presence of IVA before attempting to enable the
>> >> > >    corresponding OPP.
>> >> > >
>> >> > >   [1] http://focus.ti.com/lit/ug/spruff1d/spruff1d.pdf
>> >> > >
>> >> > > It appears from discussions (on this patch) that a variant of
>> >> > > OMAP3430 supports this OPP but lacks runtime detection. This
>> >> > > OPP can be enabled for these device by either:
>> >> > >  1) Setting the bit corresponding to OMAP3_HAS_720MHZ
>> >> > >     in 'omap3_features'. (Refer changes to id.c)
>> >> > >
>> >> > >  2) Removing check for omap3_has_720mhz() before enabling
>> >> > >     the OPP. (Refer changes to opp3xxx_data.c)
>> >> > >
>> >> > >  3) Calling opp_enable() for 720MHz/VDD1 and 520MHz/VDD2 in
>> >> > >     the board file. (Refer changes to opp3xxx_data.c).
>> >> > >     This should, ideally, be done before omap3_opp_init() is
>> >> > >     called during device_initcall().
>> >> > >
>> >> > > CAUTION: This should be done for identified parts only.
>> >> > >          Else, the device could be damaged permanently.
>> >> > >
>> >> > > Signed-off-by: Sanjeev Premi <premi@ti.com>
>> >> > > Reviewed-by: G, Manjunath Kondaiah <manjugk@ti.com>
>> >> >
>> >> > Acked-by: Kevin Hilman <khilman@ti.com>
>> >>
>> >> This patch seems to never have made it upstream. Is there a reason for
>> >> that
>> >> ?
>> >
>> > Ping ?
>>
>> We'd have to figure out a proper opp modifier logic with device tree.
>> considering that non-dt boot is slowly getting dismantled in mach-omap2, to
>> add new capabilities in non-dt is not really a good idea at this point in
>> time - Further, we do have equivalent requirements in other TI SoCs as well
>
> Good point, but I'm not sure to see where this patch is specific to legacy
> boot. The two functions it modifies, and omap3xxx_check_features() and
> omap3_opp_init(), are called for DT boot as well.

omap3_opp_init() ->omap_init_opp_table returns if of_have_populated_dt().
check_features enable a flag for omap3_opp_init to pick the right OPPs
up -> this is precisely the intent of something like opp modifier
logic.

Regards,
Nishanth Menon
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h
index f0629ae..c338466 100644
--- a/arch/arm/mach-omap2/control.h
+++ b/arch/arm/mach-omap2/control.h
@@ -365,6 +365,12 @@ 
 #define		FEAT_NEON		0
 #define		FEAT_NEON_NONE		1
 
+/* Product ID register */
+#define OMAP3_PRODID			0x020C
+
+/* Mask to extract SKU ID from Product ID */
+#define OMAP3_SKUID_MASK		0x0f
+#define		OMAP3_SKUID_720MHZ	0x08
 
 #ifndef __ASSEMBLY__
 #ifdef CONFIG_ARCH_OMAP2PLUS
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index 5f9086c..8c4500f 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -191,6 +191,10 @@  static void __init omap3_check_features(void)
 	if (!cpu_is_omap3505() && !cpu_is_omap3517())
 		omap3_features |= OMAP3_HAS_IO_WAKEUP;
 
+	status = (OMAP3_SKUID_MASK & read_tap_reg(OMAP3_PRODID));
+	if (status & OMAP3_SKUID_720MHZ)
+		omap3_features |= OMAP3_HAS_720MHZ;
+
 	/*
 	 * TODO: Get additional info (where applicable)
 	 *       e.g. Size of L2 cache.
@@ -445,6 +449,7 @@  static void __init omap3_cpuinfo(void)
 	OMAP3_SHOW_FEATURE(neon);
 	OMAP3_SHOW_FEATURE(isp);
 	OMAP3_SHOW_FEATURE(192mhz_clk);
+	OMAP3_SHOW_FEATURE(720mhz);
 
 	printk(")\n");
 }
diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c
index 0486fce..cba17f7 100644
--- a/arch/arm/mach-omap2/opp3xxx_data.c
+++ b/arch/arm/mach-omap2/opp3xxx_data.c
@@ -17,8 +17,10 @@ 
  * GNU General Public License for more details.
  */
 #include <linux/module.h>
+#include <linux/opp.h>
 
 #include <plat/cpu.h>
+#include <plat/omap_device.h>
 
 #include "omap_opp_data.h"
 
@@ -33,6 +35,8 @@  static struct omap_opp_def __initdata omap34xx_opp_def_list[] = {
 	OPP_INITIALIZER("mpu", true, 550000000, 1270000),
 	/* MPU OPP5 */
 	OPP_INITIALIZER("mpu", true, 600000000, 1350000),
+	/* MPU OPP6 */
+	OPP_INITIALIZER("mpu", false, 720000000, 1350000),
 
 	/*
 	 * L3 OPP1 - 41.5 MHz is disabled because: The voltage for that OPP is
@@ -58,6 +62,8 @@  static struct omap_opp_def __initdata omap34xx_opp_def_list[] = {
 	OPP_INITIALIZER("iva", true, 400000000, 1270000),
 	/* DSP OPP5 */
 	OPP_INITIALIZER("iva", true, 430000000, 1350000),
+	/* DSP OPP6 */
+	OPP_INITIALIZER("iva", false, 520000000, 1350000),
 };
 
 static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
@@ -85,6 +91,57 @@  static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
 	OPP_INITIALIZER("iva", false, 800000000, 1375000),
 };
 
+
+/**
+ * omap3_opp_enable_720Mhz() - Enable the OPP corresponding to 720MHz
+ *
+ * This function would be executed only if the silicon is capable of
+ * running at the 720MHz.
+ */
+static int __init omap3_opp_enable_720Mhz(void)
+{
+	int r = -ENODEV;
+	struct omap_hwmod *oh_mpu = omap_hwmod_lookup("mpu");
+	struct omap_hwmod *oh_iva;
+	struct platform_device *pdev;
+
+	if (!oh_mpu || !oh_mpu->od) {
+		goto err;
+	} else {
+		pdev = &oh_mpu->od->pdev;
+
+		r = opp_enable(&pdev->dev, 720000000);
+		if (r < 0) {
+			dev_err(&pdev->dev,
+				"opp_enable() failed for mpu@720MHz");
+			goto err;
+		}
+	}
+
+	if (omap3_has_iva()) {
+		oh_iva = omap_hwmod_lookup("iva");
+
+		if (!oh_iva || !oh_iva->od) {
+			r = -ENODEV;
+			goto err;
+		} else {
+			pdev = &oh_iva->od->pdev;
+
+			r = opp_enable(&pdev->dev, 520000000);
+			if (r < 0) {
+				dev_err(&pdev->dev,
+					"opp_enable() failed for iva@520MHz");
+				goto err;
+			}
+		}
+	}
+
+	dev_info(&pdev->dev, "Enabled OPP corresponding to 720MHz\n");
+
+err:
+	return r;
+}
+
 /**
  * omap3_opp_init() - initialize omap3 opp table
  */
@@ -98,10 +155,14 @@  static int __init omap3_opp_init(void)
 	if (cpu_is_omap3630())
 		r = omap_init_opp_table(omap36xx_opp_def_list,
 			ARRAY_SIZE(omap36xx_opp_def_list));
-	else
+	else {
 		r = omap_init_opp_table(omap34xx_opp_def_list,
 			ARRAY_SIZE(omap34xx_opp_def_list));
 
+		if (omap3_has_720mhz())
+			r = omap3_opp_enable_720Mhz();
+	}
+
 	return r;
 }
 device_initcall(omap3_opp_init);
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
index 73d91ee..e624ee1 100644
--- a/arch/arm/plat-omap/include/plat/cpu.h
+++ b/arch/arm/plat-omap/include/plat/cpu.h
@@ -455,6 +455,7 @@  extern u32 omap3_features;
 #define OMAP3_HAS_ISP			BIT(4)
 #define OMAP3_HAS_192MHZ_CLK		BIT(5)
 #define OMAP3_HAS_IO_WAKEUP		BIT(6)
+#define OMAP3_HAS_720MHZ		BIT(7)
 
 #define OMAP3_HAS_FEATURE(feat,flag)			\
 static inline unsigned int omap3_has_ ##feat(void)	\
@@ -469,5 +470,6 @@  OMAP3_HAS_FEATURE(neon, NEON)
 OMAP3_HAS_FEATURE(isp, ISP)
 OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK)
 OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP)
+OMAP3_HAS_FEATURE(720mhz, 720MHZ)
 
 #endif