Message ID | 1297239010-29683-1-git-send-email-premi@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 ?
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
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.
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 --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