ARM: tegra: fix balanced throttling behaviour
Hyungwoo Yang [Wed, 30 Jan 2013 02:42:12 +0000 (18:42 -0800)]
This change enables balanced throttling to throttle
frequencies of components individually.

Reviewed-on: http://git-master/r/195368
(cherry picked from commit aa2e22edbbecf8621ab2c0d56a05c967101aae12)
Change-Id: If260229387127d29aba6bfd02cd505597f992921
Signed-off-by: Hyungwoo Yang <hyungwooy@nvidia.com>
Reviewed-on: http://git-master/r/197152
Reviewed-by: Riham Haidar <rhaidar@nvidia.com>
Tested-by: Riham Haidar <rhaidar@nvidia.com>

12 files changed:
arch/arm/mach-tegra/board-cardhu-sensors.c
arch/arm/mach-tegra/board-dalmore-sensors.c
arch/arm/mach-tegra/board-enterprise-sensors.c
arch/arm/mach-tegra/board-kai-sensors.c
arch/arm/mach-tegra/board-macallan-sensors.c
arch/arm/mach-tegra/board-pluto-sensors.c
arch/arm/mach-tegra/board-roth-sensors.c
arch/arm/mach-tegra/include/mach/thermal.h
arch/arm/mach-tegra/tegra11_clocks.c
arch/arm/mach-tegra/tegra30_clocks.c
arch/arm/mach-tegra/tegra3_throttle.c
arch/arm/mach-tegra/tegra3_tsensor.c

index fde7f2b..7b6f8fd 100644 (file)
@@ -685,16 +685,24 @@ static struct i2c_board_info cardhu_i2c8_board_info[] = {
 };
 
 static struct throttle_table tj_throttle_table[] = {
-       {      0, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 760000, 1000 },
-       { 760000, 1050 },
-       {1000000, 1050 },
-       {1000000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,    CBUS,    SCLK,     EMC */
+               { { 1000000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  760000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  760000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  437000,  NO_CAP,  NO_CAP } },
+               { {  620000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  250000,  375000 } },
+               { {  475000,  352000,  250000,  375000 } },
+               { {  475000,  247000,  204000,  375000 } },
+               { {  475000,  247000,  204000,  204000 } },
+               { {  475000,  247000,  204000,  204000 } },
+         { { CPU_THROT_LOW,  247000,  204000,  102000 } },
 };
 
 static struct balanced_throttle tj_throttle = {
@@ -844,16 +852,24 @@ static struct therm_est_data skin_data = {
 };
 
 static struct throttle_table skin_throttle_table[] = {
-       {      0, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 760000, 1000 },
-       { 760000, 1050 },
-       {1000000, 1050 },
-       {1000000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,    CBUS,    SCLK,     EMC */
+               { { 1000000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  760000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  760000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  437000,  NO_CAP,  NO_CAP } },
+               { {  620000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  250000,  375000 } },
+               { {  475000,  352000,  250000,  375000 } },
+               { {  475000,  247000,  204000,  375000 } },
+               { {  475000,  247000,  204000,  204000 } },
+               { {  475000,  247000,  204000,  204000 } },
+         { { CPU_THROT_LOW,  247000,  204000,  102000 } },
 };
 
 static struct balanced_throttle skin_throttle = {
index d9f9bf8..f051e9a 100644 (file)
@@ -65,25 +65,35 @@ static struct nvc_gpio_pdata imx091_gpio_pdata[] = {
 static struct board_info board_info;
 
 static struct throttle_table tj_throttle_table[] = {
-       {      0, 1000 },
-       {  51000, 1000 },
-       { 102000, 1000 },
-       { 204000, 1000 },
-       { 252000, 1000 },
-       { 288000, 1000 },
-       { 372000, 1000 },
-       { 468000, 1000 },
-       { 510000, 1000 },
-       { 612000, 1000 },
-       { 714000, 1050 },
-       { 816000, 1050 },
-       { 918000, 1050 },
-       {1020000, 1100 },
-       {1122000, 1100 },
-       {1224000, 1100 },
-       {1326000, 1100 },
-       {1428000, 1100 },
-       {1530000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,   C2BUS,   C3BUS,    SCLK,     EMC */
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1428000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1224000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  102000,  276000,  228000,  208000,  102000 } },
+         { { CPU_THROT_LOW,  276000,  228000,  208000,  102000 } },
 };
 
 static struct balanced_throttle tj_throttle = {
@@ -643,25 +653,86 @@ static struct therm_est_data skin_data = {
 };
 
 static struct throttle_table skin_throttle_table[] = {
-       {      0, 1000 },
-       {  51000, 1000 },
-       { 102000, 1000 },
-       { 204000, 1000 },
-       { 252000, 1000 },
-       { 288000, 1000 },
-       { 372000, 1000 },
-       { 468000, 1000 },
-       { 510000, 1000 },
-       { 612000, 1000 },
-       { 714000, 1050 },
-       { 816000, 1050 },
-       { 918000, 1050 },
-       {1020000, 1100 },
-       {1122000, 1100 },
-       {1224000, 1100 },
-       {1326000, 1100 },
-       {1428000, 1100 },
-       {1530000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,   C2BUS,   C3BUS,    SCLK,     EMC */
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  102000,  276000,  228000,  208000,  102000 } },
+         { { CPU_THROT_LOW,  276000,  228000,  208000,  102000 } },
 };
 
 static struct balanced_throttle skin_throttle = {
index e86dcc8..7db0902 100644 (file)
 static struct board_info board_info;
 
 static struct throttle_table tj_throttle_table[] = {
-       {      0, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 760000, 1000 },
-       { 760000, 1050 },
-       {1000000, 1050 },
-       {1000000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,    CBUS,    SCLK,     EMC */
+               { { 1000000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  760000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  760000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  437000,  NO_CAP,  NO_CAP } },
+               { {  620000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  250000,  375000 } },
+               { {  475000,  352000,  250000,  375000 } },
+               { {  475000,  247000,  204000,  375000 } },
+               { {  475000,  247000,  204000,  204000 } },
+               { {  475000,  247000,  204000,  204000 } },
+         { { CPU_THROT_LOW,  247000,  204000,  102000 } },
 };
 
 static struct balanced_throttle tj_throttle = {
index 69c41d5..65986ec 100644 (file)
@@ -41,16 +41,24 @@ static struct regulator *kai_1v8_cam3;
 static struct regulator *kai_vdd_cam3;
 
 static struct throttle_table tj_throttle_table[] = {
-       {      0, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 760000, 1000 },
-       { 760000, 1050 },
-       {1000000, 1050 },
-       {1000000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,    CBUS,    SCLK,     EMC */
+               { { 1000000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  760000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  760000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  437000,  NO_CAP,  NO_CAP } },
+               { {  620000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  250000,  375000 } },
+               { {  475000,  352000,  250000,  375000 } },
+               { {  475000,  247000,  204000,  375000 } },
+               { {  475000,  247000,  204000,  204000 } },
+               { {  475000,  247000,  204000,  204000 } },
+         { { CPU_THROT_LOW,  247000,  204000,  102000 } },
 };
 
 static struct balanced_throttle tj_throttle = {
index 5e448e4..a218906 100644 (file)
@@ -66,25 +66,35 @@ static struct nvc_gpio_pdata imx091_gpio_pdata[] = {
 static struct board_info board_info;
 
 static struct throttle_table tj_throttle_table[] = {
-       {      0, 1000 },
-       {  51000, 1000 },
-       { 102000, 1000 },
-       { 204000, 1000 },
-       { 252000, 1000 },
-       { 288000, 1000 },
-       { 372000, 1000 },
-       { 468000, 1000 },
-       { 510000, 1000 },
-       { 612000, 1000 },
-       { 714000, 1050 },
-       { 816000, 1050 },
-       { 918000, 1050 },
-       {1020000, 1100 },
-       {1122000, 1100 },
-       {1224000, 1100 },
-       {1326000, 1100 },
-       {1428000, 1100 },
-       {1530000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,   C2BUS,   C3BUS,    SCLK,     EMC */
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1428000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1224000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  102000,  276000,  228000,  208000,  102000 } },
+         { { CPU_THROT_LOW,  276000,  228000,  208000,  102000 } },
 };
 
 static struct balanced_throttle tj_throttle = {
@@ -634,25 +644,86 @@ static struct therm_est_data skin_data = {
 };
 
 static struct throttle_table skin_throttle_table[] = {
-        {      0, 1000 },
-        {  51000, 1000 },
-        { 102000, 1000 },
-        { 204000, 1000 },
-        { 252000, 1000 },
-        { 288000, 1000 },
-        { 372000, 1000 },
-        { 468000, 1000 },
-        { 510000, 1000 },
-        { 612000, 1000 },
-        { 714000, 1050 },
-        { 816000, 1050 },
-        { 918000, 1050 },
-        {1020000, 1100 },
-        {1122000, 1100 },
-        {1224000, 1100 },
-        {1326000, 1100 },
-        {1428000, 1100 },
-        {1530000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,   C2BUS,   C3BUS,    SCLK,     EMC */
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  102000,  276000,  228000,  208000,  102000 } },
+         { { CPU_THROT_LOW,  276000,  228000,  208000,  102000 } },
 };
 
 static struct balanced_throttle skin_throttle = {
index ab912e6..f842951 100644 (file)
@@ -284,25 +284,35 @@ static struct i2c_board_info pluto_i2c1_isl_board_info[] = {
 };
 
 static struct throttle_table tj_throttle_table[] = {
-       {      0, 1000 },
-       {  51000, 1000 },
-       { 102000, 1000 },
-       { 204000, 1000 },
-       { 252000, 1000 },
-       { 288000, 1000 },
-       { 372000, 1000 },
-       { 468000, 1000 },
-       { 510000, 1000 },
-       { 612000, 1000 },
-       { 714000, 1050 },
-       { 816000, 1050 },
-       { 918000, 1050 },
-       {1020000, 1100 },
-       {1122000, 1100 },
-       {1224000, 1100 },
-       {1326000, 1100 },
-       {1428000, 1100 },
-       {1530000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,   C2BUS,   C3BUS,    SCLK,     EMC */
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1428000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1224000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  102000,  276000,  228000,  208000,  102000 } },
+         { { CPU_THROT_LOW,  276000,  228000,  208000,  102000 } },
 };
 
 static struct balanced_throttle tj_throttle = {
@@ -980,25 +990,86 @@ static struct therm_est_data skin_data = {
 };
 
 static struct throttle_table skin_throttle_table[] = {
-       {      0, 1000 },
-       {  51000, 1000 },
-       { 102000, 1000 },
-       { 204000, 1000 },
-       { 252000, 1000 },
-       { 288000, 1000 },
-       { 372000, 1000 },
-       { 468000, 1000 },
-       { 510000, 1000 },
-       { 612000, 1000 },
-       { 714000, 1050 },
-       { 816000, 1050 },
-       { 918000, 1050 },
-       {1020000, 1100 },
-       {1122000, 1100 },
-       {1224000, 1100 },
-       {1326000, 1100 },
-       {1428000, 1100 },
-       {1530000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,   C2BUS,   C3BUS,    SCLK,     EMC */
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  102000,  276000,  228000,  208000,  102000 } },
+         { { CPU_THROT_LOW,  276000,  228000,  208000,  102000 } },
 };
 
 static struct balanced_throttle skin_throttle = {
index 65ee95e..807951f 100644 (file)
 static struct board_info board_info;
 
 static struct throttle_table tj_throttle_table[] = {
-       {      0, 1000 },
-       {  51000, 1000 },
-       { 102000, 1000 },
-       { 204000, 1000 },
-       { 252000, 1000 },
-       { 288000, 1000 },
-       { 372000, 1000 },
-       { 468000, 1000 },
-       { 510000, 1000 },
-       { 612000, 1000 },
-       { 714000, 1050 },
-       { 816000, 1050 },
-       { 918000, 1050 },
-       {1020000, 1100 },
-       {1122000, 1100 },
-       {1224000, 1100 },
-       {1326000, 1100 },
-       {1428000, 1100 },
-       {1530000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,   C2BUS,   C3BUS,    SCLK,     EMC */
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1428000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1224000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  102000,  276000,  228000,  208000,  102000 } },
+         { { CPU_THROT_LOW,  276000,  228000,  208000,  102000 } },
 };
 
 static struct balanced_throttle tj_throttle = {
@@ -79,7 +89,7 @@ static struct balanced_throttle tj_throttle = {
 };
 
 static struct throttle_table tj_heavy_throttle_table[] = {
-       { 204000, 1000 },
+       { {  204000,  420000,  360000,  208000,  204000 } },
 };
 
 static struct balanced_throttle tj_heavy_throttle = {
@@ -331,25 +341,86 @@ static struct therm_est_data skin_data = {
 };
 
 static struct throttle_table skin_throttle_table[] = {
-       {      0, 1000 },
-       {  51000, 1000 },
-       { 102000, 1000 },
-       { 204000, 1000 },
-       { 252000, 1000 },
-       { 288000, 1000 },
-       { 372000, 1000 },
-       { 468000, 1000 },
-       { 510000, 1000 },
-       { 612000, 1000 },
-       { 714000, 1050 },
-       { 816000, 1050 },
-       { 918000, 1050 },
-       {1020000, 1100 },
-       {1122000, 1100 },
-       {1224000, 1100 },
-       {1326000, 1100 },
-       {1428000, 1100 },
-       {1530000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,   C2BUS,   C3BUS,    SCLK,     EMC */
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  102000,  276000,  228000,  208000,  102000 } },
+         { { CPU_THROT_LOW,  276000,  228000,  208000,  102000 } },
 };
 
 static struct balanced_throttle skin_throttle = {
index 1e3cb14..3db19a7 100644 (file)
@@ -27,18 +27,25 @@ struct tegra_cooling_device {
 };
 
 #define MAX_THROT_TABLE_SIZE   (64)
+#define NO_CAP                 0 /* no cap. cannot be used for CPU */
+#define CPU_THROT_LOW          0 /* lowest throttle freq. only used for CPU */
+
+#ifdef CONFIG_TEGRA_DUAL_CBUS
+#define NUM_OF_CAP_FREQS       5 /* cpu, c2bus, c3bus, sclk, emc */
+#else
+#define NUM_OF_CAP_FREQS       4 /* cpu, cbus, sclk, emc */
+#endif
 
 struct throttle_table {
-       unsigned int cpu_freq;
-       int core_cap_level;
+       unsigned long cap_freqs[NUM_OF_CAP_FREQS];
 };
 
 struct balanced_throttle {
        struct thermal_cooling_device *cdev;
        struct list_head node;
-       int is_throttling;
+       unsigned long cur_state;
+       unsigned long cpu_cap_freq;
        int throttle_count;
-       int throttle_index;
        int throt_tab_size;
        struct throttle_table *throt_tab;
 };
index 2cfa438..093958b 100644 (file)
@@ -6584,6 +6584,7 @@ struct clk tegra_list_clks[] = {
        SHARED_CLK("wake.sclk", "wake_sclk",            "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0),
        SHARED_CLK("mon.avp",   "tegra_actmon",         "avp",  &tegra_clk_sbus_cmplx, NULL, 0, 0),
        SHARED_CLK("cap.sclk",  "cap_sclk",             NULL,   &tegra_clk_sbus_cmplx, NULL, 0, SHARED_CEILING),
+       SHARED_CLK("cap.throttle.sclk", "cap_throttle", NULL,   &tegra_clk_sbus_cmplx, NULL, 0, SHARED_CEILING),
        SHARED_CLK("floor.sclk", "floor_sclk",          NULL,   &tegra_clk_sbus_cmplx, NULL, 0, 0),
        SHARED_CLK("override.sclk", "override_sclk",    NULL,   &tegra_clk_sbus_cmplx, NULL, 0, SHARED_OVERRIDE),
        SHARED_CLK("sbc1.sclk", "tegra11-spi.0",        "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0),
@@ -6604,6 +6605,7 @@ struct clk tegra_list_clks[] = {
        SHARED_CLK("usb3.emc",  "tegra-ehci.2",         "emc",  &tegra_clk_emc, NULL, 0, 0),
        SHARED_CLK("mon.emc",   "tegra_actmon",         "emc",  &tegra_clk_emc, NULL, 0, 0),
        SHARED_CLK("cap.emc",   "cap.emc",              NULL,   &tegra_clk_emc, NULL, 0, SHARED_CEILING),
+       SHARED_CLK("cap.throttle.emc", "cap_throttle",  NULL,   &tegra_clk_emc, NULL, 0, SHARED_CEILING),
        SHARED_CLK("3d.emc",    "tegra_gr3d",           "emc",  &tegra_clk_emc, NULL, 0, 0),
        SHARED_CLK("2d.emc",    "tegra_gr2d",           "emc",  &tegra_clk_emc, NULL, 0, 0),
        SHARED_CLK("msenc.emc", "tegra_msenc",          "emc",  &tegra_clk_emc, NULL, 0, SHARED_BW),
@@ -6620,6 +6622,7 @@ struct clk tegra_list_clks[] = {
        DUAL_CBUS_CLK("2d.cbus",        "tegra_gr2d",           "gr2d", &tegra_clk_c2bus, "2d",  0, 0),
        DUAL_CBUS_CLK("epp.cbus",       "tegra_gr2d",           "epp",  &tegra_clk_c2bus, "epp", 0, 0),
        SHARED_CLK("cap.c2bus",         "cap.c2bus",            NULL,   &tegra_clk_c2bus, NULL,  0, SHARED_CEILING),
+       SHARED_CLK("cap.throttle.c2bus", "cap_throttle",        NULL,   &tegra_clk_c2bus, NULL,  0, SHARED_CEILING),
        SHARED_CLK("floor.c2bus",       "floor.c2bus",          NULL,   &tegra_clk_c2bus, NULL,  0, 0),
        SHARED_CLK("override.c2bus",    "override.c2bus",       NULL,   &tegra_clk_c2bus, NULL,  0, SHARED_OVERRIDE),
        SHARED_CLK("edp.c2bus",         "edp.c2bus",            NULL,   &tegra_clk_c2bus, NULL,  0, SHARED_CEILING),
@@ -6629,6 +6632,7 @@ struct clk tegra_list_clks[] = {
        DUAL_CBUS_CLK("vde.cbus",       "tegra-avp",            "vde",    &tegra_clk_c3bus, "vde", 0, 0),
        DUAL_CBUS_CLK("se.cbus",        "tegra11-se",           NULL,     &tegra_clk_c3bus, "se",  0, 0),
        SHARED_CLK("cap.c3bus",         "cap.c3bus",            NULL,   &tegra_clk_c3bus, NULL,  0, SHARED_CEILING),
+       SHARED_CLK("cap.throttle.c3bus", "cap_throttle",        NULL,   &tegra_clk_c3bus, NULL,  0, SHARED_CEILING),
        SHARED_CLK("floor.c3bus",       "floor.c3bus",          NULL,   &tegra_clk_c3bus, NULL,  0, 0),
        SHARED_CLK("override.c3bus",    "override.c3bus",       NULL,   &tegra_clk_c3bus, NULL,  0, SHARED_OVERRIDE),
 #else
@@ -6640,6 +6644,7 @@ struct clk tegra_list_clks[] = {
        SHARED_CLK("vde.cbus",  "tegra-avp",            "vde",  &tegra_clk_cbus, "vde", 0, 0),
        SHARED_CLK("se.cbus",   "tegra11-se",           NULL,   &tegra_clk_cbus, "se",  0, 0),
        SHARED_CLK("cap.cbus",  "cap.cbus",             NULL,   &tegra_clk_cbus, NULL,  0, SHARED_CEILING),
+       SHARED_CLK("cap.throttle.cbus", "cap_throttle", NULL,   &tegra_clk_cbus, NULL,  0, SHARED_CEILING),
        SHARED_CLK("floor.cbus", "floor.cbus",          NULL,   &tegra_clk_cbus, NULL,  0, 0),
        SHARED_CLK("override.cbus", "override.cbus",    NULL,   &tegra_clk_cbus, NULL,  0, SHARED_OVERRIDE),
        SHARED_CLK("edp.cbus",  "edp.cbus",             NULL,   &tegra_clk_cbus, NULL,  0, SHARED_CEILING),
index 3392978..edb713b 100644 (file)
@@ -4421,6 +4421,7 @@ struct clk tegra_list_clks[] = {
        SHARED_CLK("wake.sclk", "wake_sclk",            "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0),
        SHARED_CLK("mon.avp",   "tegra_actmon",         "avp",  &tegra_clk_sbus_cmplx, NULL, 0, 0),
        SHARED_CLK("cap.sclk",  "cap_sclk",             NULL,   &tegra_clk_sbus_cmplx, NULL, 0, SHARED_CEILING),
+       SHARED_CLK("cap.throttle.sclk", "cap_throttle", NULL,   &tegra_clk_sbus_cmplx, NULL, 0, SHARED_CEILING),
        SHARED_CLK("floor.sclk", "floor_sclk",          NULL,   &tegra_clk_sbus_cmplx, NULL, 0, 0),
        SHARED_CLK("sbc1.sclk", "spi_tegra.0",          "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0),
        SHARED_CLK("sbc2.sclk", "spi_tegra.1",          "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0),
@@ -4440,6 +4441,7 @@ struct clk tegra_list_clks[] = {
        SHARED_CLK("usb3.emc",  "tegra-ehci.2",         "emc",  &tegra_clk_emc, NULL, 0, 0),
        SHARED_CLK("mon.emc",   "tegra_actmon",         "emc",  &tegra_clk_emc, NULL, 0, 0),
        SHARED_CLK("cap.emc",   "cap.emc",              NULL,   &tegra_clk_emc, NULL, 0, SHARED_CEILING),
+       SHARED_CLK("cap.throttle.emc", "cap_throttle",  NULL,   &tegra_clk_emc, NULL, 0, SHARED_CEILING),
        SHARED_CLK("3d.emc",    "tegra_gr3d",           "emc",  &tegra_clk_emc, NULL, 0, 0),
        SHARED_CLK("2d.emc",    "tegra_gr2d",           "emc",  &tegra_clk_emc, NULL, 0, 0),
        SHARED_CLK("mpe.emc",   "tegra_mpe",            "emc",  &tegra_clk_emc, NULL, 0, SHARED_BW),
@@ -4458,6 +4460,7 @@ struct clk tegra_list_clks[] = {
        SHARED_CLK("se.cbus",   "tegra-se",             NULL,   &tegra_clk_cbus, "se",  0, 0),
 #endif
        SHARED_CLK("cap.cbus",  "cap.cbus",             NULL,   &tegra_clk_cbus, NULL,  0, SHARED_CEILING),
+       SHARED_CLK("cap.throttle.cbus", "cap_throttle", NULL,   &tegra_clk_cbus, NULL,  0, SHARED_CEILING),
        SHARED_CLK("cap.profile.cbus", "profile.cbus",  NULL,   &tegra_clk_cbus, NULL,  0, SHARED_CEILING),
        SHARED_CLK("floor.cbus", "floor.cbus",          NULL,   &tegra_clk_cbus, NULL,  0, 0),
 };
index 6b058e7..937df62 100644 (file)
 #include <linux/uaccess.h>
 #include <linux/thermal.h>
 #include <linux/module.h>
+#include <mach/thermal.h>
 
 #include "clock.h"
 #include "cpu-tegra.h"
-#include "dvfs.h"
 
 static struct mutex *cpu_throttle_lock;
 static DEFINE_MUTEX(bthrot_list_lock);
 static LIST_HEAD(bthrot_list);
 static int num_throt;
 
+static struct {
+       const char *cap_name;
+       struct clk *cap_clk;
+       unsigned long cap_freq;
+} cap_freqs_table[] = {
+#ifdef CONFIG_TEGRA_DUAL_CBUS
+       { .cap_name = "cap.throttle.c2bus" },
+       { .cap_name = "cap.throttle.c3bus" },
+#else
+       { .cap_name = "cap.throttle.cbus" },
+#endif
+       { .cap_name = "cap.throttle.sclk" },
+       { .cap_name = "cap.throttle.emc" },
+};
+
+#define CAP_TBL_CAP_NAME(index)        (cap_freqs_table[index].cap_name)
+#define CAP_TBL_CAP_CLK(index) (cap_freqs_table[index].cap_clk)
+#define CAP_TBL_CAP_FREQ(index)        (cap_freqs_table[index].cap_freq)
+
 #ifndef CONFIG_TEGRA_THERMAL_THROTTLE_EXACT_FREQ
 static unsigned int clip_to_table(unsigned int cpu_freq)
 {
@@ -69,7 +88,6 @@ unsigned int tegra_throttle_governor_speed(unsigned int requested_speed)
 {
        struct balanced_throttle *bthrot;
        unsigned int throttle_speed = requested_speed;
-       int index;
        unsigned int bthrot_speed;
        unsigned int lowest_speed;
        struct cpufreq_frequency_table *cpu_freq_table;
@@ -79,18 +97,16 @@ unsigned int tegra_throttle_governor_speed(unsigned int requested_speed)
        if (!table_data)
                return requested_speed;
 
-
        cpu_freq_table = table_data->freq_table;
        lowest_speed = cpu_freq_table[table_data->throttle_lowest_index].frequency;
 
        mutex_lock(&bthrot_list_lock);
 
        list_for_each_entry(bthrot, &bthrot_list, node) {
-               if (bthrot->is_throttling) {
-                       index = bthrot->throttle_index;
-                       bthrot_speed = bthrot->throt_tab[index].cpu_freq;
+               if (bthrot->cur_state) {
+                       bthrot_speed = bthrot->cpu_cap_freq;
 
-                       if (bthrot_speed == 0)
+                       if (bthrot_speed == CPU_THROT_LOW)
                                bthrot_speed = lowest_speed;
                        else
                                bthrot_speed = clip_to_table(bthrot_speed);
@@ -103,24 +119,6 @@ unsigned int tegra_throttle_governor_speed(unsigned int requested_speed)
        return throttle_speed;
 }
 
-static void tegra_throttle_set_core_level(void)
-{
-       struct balanced_throttle *bthrot;
-       int core_level = INT_MAX;
-
-       mutex_lock(&bthrot_list_lock);
-       list_for_each_entry(bthrot, &bthrot_list, node) {
-               if (bthrot->is_throttling) {
-                       int idx = bthrot->throttle_index;
-                       core_level = min(core_level,
-                                        bthrot->throt_tab[idx].core_cap_level);
-               }
-       }
-       mutex_unlock(&bthrot_list_lock);
-
-       tegra_dvfs_core_cap_level_set(core_level);
-}
-
 bool tegra_is_throttling(int *count)
 {
        struct balanced_throttle *bthrot;
@@ -129,7 +127,7 @@ bool tegra_is_throttling(int *count)
 
        mutex_lock(&bthrot_list_lock);
        list_for_each_entry(bthrot, &bthrot_list, node) {
-               if (bthrot->is_throttling)
+               if (bthrot->cur_state)
                        is_throttling = true;
                lcount += bthrot->throttle_count;
        }
@@ -157,43 +155,86 @@ tegra_throttle_get_cur_state(struct thermal_cooling_device *cdev,
 {
        struct balanced_throttle *bthrot = cdev->devdata;
 
-       mutex_lock(cpu_throttle_lock);
-       *cur_state = bthrot->is_throttling ?
-                       (bthrot->throt_tab_size - bthrot->throttle_index) :
-                       0;
-       mutex_unlock(cpu_throttle_lock);
+       *cur_state = bthrot->cur_state;
 
        return 0;
 }
 
+static void tegra_throttle_set_cap_clk(struct throttle_table *throt_tab,
+                                       int cap_tbl_index,
+                                       int cap_clk_index)
+{
+       unsigned long cap_rate, clk_rate;
+
+       if (throt_tab == NULL && cap_tbl_index == -1) /* uncap fregs */
+               cap_rate = NO_CAP;
+       else
+               cap_rate = throt_tab[cap_tbl_index].cap_freqs[cap_clk_index];
+
+       if (cap_rate == NO_CAP)
+               clk_rate = clk_get_max_rate(CAP_TBL_CAP_CLK(cap_clk_index-1));
+       else
+               clk_rate = cap_rate * 1000UL;
+
+       if (CAP_TBL_CAP_FREQ(cap_clk_index-1) != clk_rate) {
+               clk_set_rate(CAP_TBL_CAP_CLK(cap_clk_index-1), clk_rate);
+               CAP_TBL_CAP_FREQ(cap_clk_index-1) = clk_rate;
+       }
+}
+
+static void
+tegra_throttle_cap_freqs_update(struct throttle_table *throt_tab,
+                               int cap_tbl_index,
+                               int direction)
+{
+       int i;
+       int num_of_cap_clocks = ARRAY_SIZE(cap_freqs_table);
+
+       if (direction == 1) { /* performance up : throttle less */
+               for (i = num_of_cap_clocks; i > 0; i--)
+                       tegra_throttle_set_cap_clk(throt_tab, cap_tbl_index, i);
+       } else { /* performance down : throotle more */
+               for (i = 1; i <= num_of_cap_clocks; i++)
+                       tegra_throttle_set_cap_clk(throt_tab, cap_tbl_index, i);
+       }
+}
+
 static int
 tegra_throttle_set_cur_state(struct thermal_cooling_device *cdev,
                                unsigned long cur_state)
 {
        struct balanced_throttle *bthrot = cdev->devdata;
+       int index;
+       int direction;
+
+       direction = bthrot->cur_state >= cur_state;
+       bthrot->cur_state = cur_state;
 
-       mutex_lock(cpu_throttle_lock);
        if (cur_state == 0) {
-               /* restore speed requested by governor */
-               if (bthrot->is_throttling) {
-                       tegra_dvfs_core_cap_enable(false);
-                       bthrot->is_throttling = false;
-               }
+               tegra_throttle_cap_freqs_update(NULL, -1, 1);/* uncap freqs */
+
+               mutex_lock(cpu_throttle_lock);
+               tegra_cpu_set_speed_cap(NULL);
+               mutex_unlock(cpu_throttle_lock);
        } else {
-               if (!bthrot->is_throttling) {
-                       tegra_dvfs_core_cap_enable(true);
-                       bthrot->is_throttling = true;
+               if (cur_state == 1 && direction == 0)
                        bthrot->throttle_count++;
+               index = cur_state - 1;
+               tegra_throttle_cap_freqs_update(bthrot->throt_tab,
+                                               index,
+                                               direction);
+
+               if (bthrot->cpu_cap_freq !=
+                                       bthrot->throt_tab[index].cap_freqs[0]) {
+                       bthrot->cpu_cap_freq =
+                                       bthrot->throt_tab[index].cap_freqs[0];
+
+                       mutex_lock(cpu_throttle_lock);
+                       tegra_cpu_set_speed_cap(NULL);
+                       mutex_unlock(cpu_throttle_lock);
                }
-
-               bthrot->throttle_index = bthrot->throt_tab_size - cur_state;
-               tegra_throttle_set_core_level();
        }
 
-       tegra_cpu_set_speed_cap(NULL);
-
-       mutex_unlock(cpu_throttle_lock);
-
        return 0;
 }
 
@@ -207,12 +248,19 @@ static struct thermal_cooling_device_ops tegra_throttle_cooling_ops = {
 static int table_show(struct seq_file *s, void *data)
 {
        struct balanced_throttle *bthrot = s->private;
-       int i;
-
-       for (i = 0; i < bthrot->throt_tab_size; i++)
-               seq_printf(s, "[%d] = %7u %4d\n",
-                       i, bthrot->throt_tab[i].cpu_freq,
-                       bthrot->throt_tab[i].core_cap_level);
+       int i, j;
+
+       for (i = 0; i < bthrot->throt_tab_size; i++) {
+               /* CPU FREQ */
+               seq_printf(s, "[%d] = %7lu",
+                       i, bthrot->throt_tab[i].cap_freqs[0]);
+
+               /* OTHER DVFS MODULE FREQS */
+               for (j = 1; j <= ARRAY_SIZE(cap_freqs_table); j++)
+                       seq_printf(s, " %7lu",
+                               bthrot->throt_tab[i].cap_freqs[j]);
+               seq_printf(s, "\n");
+       }
 
        return 0;
 }
@@ -225,11 +273,11 @@ static int table_open(struct inode *inode, struct file *file)
 static ssize_t table_write(struct file *file,
        const char __user *userbuf, size_t count, loff_t *ppos)
 {
-       struct balanced_throttle *bthrot = file->private_data;
-       char buf[80];
-       int table_idx;
-       unsigned int cpu_freq;
-       int core_cap_level;
+       struct balanced_throttle *bthrot =
+                       ((struct seq_file *)(file->private_data))->private;
+       char buf[80], temp_buf[10], *cur_pos;
+       int table_idx, i;
+       unsigned long cap_rate;
 
        if (sizeof(buf) <= count)
                return -EINVAL;
@@ -241,17 +289,25 @@ static ssize_t table_write(struct file *file,
         *  at the end when invoked from shell command line */
        buf[count] = '\0';
        strim(buf);
+       cur_pos = buf;
 
-       if (sscanf(buf, "[%d] = %u %d",
-                  &table_idx, &cpu_freq, &core_cap_level) != 3)
-               return -1;
-
+       /* get table index */
+       if (sscanf(cur_pos, "[%d] = ", &table_idx) != 1)
+               return -EINVAL;
+       sscanf(cur_pos, "[%s] = ", temp_buf);
+       cur_pos += strlen(temp_buf) + 4;
        if ((table_idx < 0) || (table_idx >= bthrot->throt_tab_size))
                return -EINVAL;
 
-       /* round new settings before updating table */
-       bthrot->throt_tab[table_idx].cpu_freq = clip_to_table(cpu_freq);
-       bthrot->throt_tab[table_idx].core_cap_level = (core_cap_level / 50) * 50;
+       /* CPU FREQ and DVFS FREQS == DVFS FREQS + 1(cpu) */
+       for (i = 0; i < ARRAY_SIZE(cap_freqs_table) + 1; i++) {
+               if (sscanf(cur_pos, "%lu", &cap_rate) != 1)
+                       return -EINVAL;
+               sscanf(cur_pos, "%s", temp_buf);
+               cur_pos += strlen(temp_buf) + 1;
+
+               bthrot->throt_tab[table_idx].cap_freqs[i] = cap_rate;
+       }
 
        return count;
 }
@@ -301,10 +357,27 @@ struct thermal_cooling_device *balanced_throttle_register(
 
 int __init tegra_throttle_init(struct mutex *cpu_lock)
 {
+       int i;
+       struct clk *c;
+
        cpu_throttle_lock = cpu_lock;
 #ifdef CONFIG_DEBUG_FS
        throttle_debugfs_root = debugfs_create_dir("tegra_throttle", 0);
 #endif
+
+       for (i = 0; i < ARRAY_SIZE(cap_freqs_table); i++) {
+               c = tegra_get_clock_by_name(CAP_TBL_CAP_NAME(i));
+               if (!c) {
+                       pr_err("tegra_throttle: cannot get clock %s\n",
+                               CAP_TBL_CAP_NAME(i));
+                       continue;
+               }
+
+               CAP_TBL_CAP_CLK(i) = c;
+               CAP_TBL_CAP_FREQ(i) = clk_get_max_rate(c);
+       }
+       pr_info("tegra_throttle : init done\n");
+
        return 0;
 }
 
index 5abed0c..e6f700f 100644 (file)
 #define TDIODE_OFFSET  (9000 + 1000)
 
 static struct throttle_table tj_throttle_table[] = {
-       {      0, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 640000, 1000 },
-       { 760000, 1000 },
-       { 760000, 1050 },
-       {1000000, 1050 },
-       {1000000, 1100 },
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,    CBUS,    SCLK,     EMC */
+               { { 1000000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  760000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  760000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  620000,  437000,  NO_CAP,  NO_CAP } },
+               { {  620000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  NO_CAP,  NO_CAP } },
+               { {  475000,  352000,  250000,  375000 } },
+               { {  475000,  352000,  250000,  375000 } },
+               { {  475000,  247000,  204000,  375000 } },
+               { {  475000,  247000,  204000,  204000 } },
+               { {  475000,  247000,  204000,  204000 } },
+         { { CPU_THROT_LOW,  247000,  204000,  102000 } },
 };
 
 static struct balanced_throttle tj_throttle = {