-Original Message-
From: Menon, Nishanth
Sent: Friday, November 13, 2009 11:35 AM
To: linux-omap
Cc: Menon, Nishanth; Cousson, Benoit; Hunter, Jon; Kevin Hilman; Chikkature
Rajashekar, Madhusudhan; Paul Walmsley; Dasgupta, Romit; Premi, Sanjeev;
Shilimkar, Santosh; Aguirre, Sergio; Lam, SuiLun; Gopinath, Thara; Sripathy,
Vishwanath
Subject: [PATCH 9/9 v2] omap3: pm: introduce 3630 opps
Introduce the OMAP3630 OPPs including the defined OPP tuples.
Further information on OMAP3630 can be found here:
http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123nav
igationId=12836contentId=52606
OMAP36xx family introduces:
VDD1 with 4 OPPs, of which OPP3 4 are available only on devices yet
to be introduced in 36xx family. Meanwhile, VDD2 has 2 opps.
Range of OPPs supported by Devices(tentative)-
|-3630-600-| (default)
|- 3630-800 -| (device: TBD)
|- 3630-1000 -| (device: TBD)
H/w OPP- OPP50 OPP100 OPP-Turbo OPP1G-SB
VDD1 OPP1 OPP2 OPP3OPP4
VDD2 OPP1 OPP2 OPP2OPP2
Note:
a) TI h/w naming for OPPs are now standardized in terms of OPP50, 100,
Turbo and SB. This maps as shown above to the opp IDs (s/w term).
b) For boards which need custom VDD1/2 OPPs, the opp table can be
updated by the board file on a need basis after the
omap3_pm_init_opp_table call. The OPPs introduced here are the
official OPP table at this point in time.
Tested on: SDP3430, SDP3630
Cc: Benoit Cousson b-cous...@ti.com
Cc: Jon Hunter jon-hun...@ti.com
Cc: Kevin Hilman khil...@deeprootsystems.com
Cc: Madhusudhan Chikkature Rajashekar madhu...@ti.com
Cc: Paul Walmsley p...@pwsan.com
Cc: Romit Dasgupta ro...@ti.com
Cc: Sanjeev Premi pr...@ti.com
Cc: Santosh Shilimkar santosh.shilim...@ti.com
Cc: Sergio Alberto Aguirre Rodriguez saagui...@ti.com
Cc: SuiLun Lam s-...@ti.com
Cc: Thara Gopinath th...@ti.com
Cc: Vishwanath Sripathy vishwanath...@ti.com
Signed-off-by: Nishanth Menon n...@ti.com
---
arch/arm/mach-omap2/omap3-opp.h |9
arch/arm/mach-omap2/pm34xx.c| 87
+++---
2 files changed, 80 insertions(+), 16 deletions(-)
diff --git a/arch/arm/mach-omap2/omap3-opp.h b/arch/arm/mach-omap2/omap3-
opp.h
index 7f27f44..a5880b8 100644
--- a/arch/arm/mach-omap2/omap3-opp.h
+++ b/arch/arm/mach-omap2/omap3-opp.h
@@ -4,22 +4,31 @@
#include plat/omap-pm.h
/* MPU speeds */
+#define S1000M 10
+#define S800M 8
#define S600M 6
#define S550M 55000
#define S500M 5
+#define S300M 3
#define S250M 25000
#define S125M 12500
/* DSP speeds */
+#define S875M 87500
+#define S660M 66000
+#define S520M 52000
#define S430M 43000
#define S400M 4
#define S360M 36000
+#define S260M 26000
#define S180M 18000
#define S90M9000
/* L3 speeds */
#define S83M8300
+#define S100M 1
#define S166M 16600
+#define S200M 2
extern struct omap_opp *omap3_mpu_rate_table;
extern struct omap_opp *omap3_dsp_rate_table;
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 14131f8..86137bb 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -141,6 +141,41 @@ static __initdata struct omap_opp
omap34xx_dsp_rate_table[] = {
{0, 0, 0, 0},
};
+static __initdata struct omap_opp omap36xx_mpu_rate_table[] = {
+ {0, 0, 0, 0},
+ /*OPP1 - 930mV - OPP50*/
+ {true, S300M, VDD1_OPP1, 0x1a},
+ /*OPP2 - 1.100V - OPP100*/
+ {true, S600M, VDD1_OPP2, 0x28},
+ /*OPP3 - 1.260V - OPP-Turbo*/
+ {false, S800M, VDD1_OPP3, 0x34},
+ /*OPP4 - 1.310V - OPP-SB*/
+ {false, S1000M, VDD1_OPP4, 0x38},
+ {0, 0, 0, 0},
+};
OPP Table vsel values seem to be wrong. Eg: for OPP1 to get 930mV, vsel should
be 0x1b. vsel=Ceiling((930-600)/12.5)
+
+static __initdata struct omap_opp omap36xx_l3_rate_table[] = {
+ {0, 0, 0, 0},
+ /*OPP1 - 930mV - OPP50 */
+ {true, S100M, VDD2_OPP1, 0x1a},
+ /*OPP2 - 1.375V - OPP100, OPP-Turbo, OPP-SB*/
+ {true, S200M, VDD2_OPP2, 0x2b},
+ {0, 0, 0, 0},
+};
+
Same case
+static __initdata struct omap_opp omap36xx_dsp_rate_table[] = {
+ {0, 0, 0, 0},
+ /*OPP1 - OPP50*/
+ {true, S260M, VDD1_OPP1, 0x1a},
+ /*OPP2 - OPP100*/
+ {true, S520M, VDD1_OPP2, 0x28},
+ /*OPP3 - OPP-Turbo*/
+ {false, S660M, VDD1_OPP3, 0x34},
+ /*OPP4 - OPP-SB*/
+ {false, S875M, VDD1_OPP4, 0x38},
+ {0, 0, 0, 0},
+};
+
Same case
struct omap_opp *omap3_mpu_rate_table;
struct omap_opp *omap3_dsp_rate_table;
struct omap_opp *omap3_l3_rate_table;
@@ -1287,22 +1322,42 @@ static void __init configure_vc(void)
void __init omap3_pm_init_opp_table(void)
{