ARM: tegra12: set CPU rate to 2.2GHz for sku 0x87
[linux-3.10.git] / arch / arm / mach-tegra / tegra11_edp.c
index 2fd3504..281b05b 100644 (file)
 #include <linux/clk.h>
 #include <linux/kobject.h>
 #include <linux/err.h>
+#include <linux/tegra-fuse.h>
 
 #include <mach/edp.h>
 
 #include "clock.h"
-#include "fuse.h"
+#include "common.h"
 
 #define CORE_MODULES_STATES 1
 #define TEMPERATURE_RANGES 4
@@ -37,6 +38,7 @@
 
 struct core_edp_entry {
        int sku;
+       int process_id;
        unsigned int cap_mA;
        int mult;
        unsigned long cap_scpu_on[CORE_EDP_PROFILES_NUM][
@@ -55,8 +57,10 @@ static char *cap_clks_names[] = { "edp.emc", "edp.cbus" };
 static struct clk *cap_clks[CAP_CLKS_NUM];
 
 static struct core_edp_entry core_edp_table[] = {
+       /* SKU 3 */
        {
-               .sku            = 0x3,          /* SKU = 4 - T40X */
+               .sku            = 0x3,          /* SKU = 3 */
+               .process_id     = -1,           /* any process id */
                .cap_mA         = 6000,         /* 6A cap */
                .mult           = 1000000,      /* MHZ */
                .cap_scpu_on    = {
@@ -65,7 +69,7 @@ static struct core_edp_entry core_edp_table[] = {
                                {{ 924, 636 },
                                 { 924, 612 },
                                 { 924, 564 },
-                                { 924, 480 },
+                                { 924, 384 },
                                },
                        },
                        /* balanced profile */
@@ -73,7 +77,7 @@ static struct core_edp_entry core_edp_table[] = {
                                {{ 792, 636 },
                                 { 792, 636 },
                                 { 792, 636 },
-                                { 792, 552 },
+                                { 792, 384 },
                                },
                        },
                        /* favor gpu */
@@ -81,33 +85,675 @@ static struct core_edp_entry core_edp_table[] = {
                                {{ 624, 672 },
                                 { 624, 672 },
                                 { 528, 672 },
-                                { 408, 672 },
+                                { 528, 384 },
                                }
                        },
                },
                .cap_scpu_off   = {
                        /* favor emc */
                        {       /* core modules power state 0 (all ON) */
-                               {{1066, 700 },
+                               {{ 924, 672 },
                                 { 924, 648 },
                                 { 924, 636 },
+                                { 924, 516 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 792, 672 },
+                                { 792, 672 },
+                                { 792, 516 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 792, 672 },
+                                { 792, 672 },
+                                { 792, 516 },
+                               }
+                       },
+               },
+       },
+       {
+               .sku            = 0x3,          /* SKU = 3 */
+               .process_id     = -1,           /* any process id */
+               .cap_mA         = 8000,         /* 8A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
                                 { 924, 588 },
                                },
                        },
                        /* balanced profile */
                        {       /* core modules power state 0 (all ON) */
-                               {{1066, 700 },
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
+                                { 924, 588 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
+                                { 924, 588 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
+                                { 924, 588 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
+                                { 924, 588 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
+                                { 924, 588 },
+                               }
+                       },
+               },
+       },
+       /* SKU 4 */
+       {
+               .sku            = 0x4,          /* SKU = 4 */
+               .process_id     = -1,           /* any process id */
+               .cap_mA         = 6000,         /* 6A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 636 },
+                                { 924, 624 },
+                                { 924, 588 },
+                                { 924, 526 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 672 },
+                                { 792, 636 },
+                                { 792, 636 },
+                                { 792, 576 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 672 },
+                                { 624, 672 },
+                                { 624, 672 },
+                                { 624, 636 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 660 },
+                                { 924, 636 },
+                                { 924, 588 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
                                 { 792, 672 },
                                 { 792, 672 },
-                                { 792, 624 },
+                                { 792, 648 },
                                },
                        },
                        /* favor gpu */
                        {       /* core modules power state 0 (all ON) */
-                               {{1066, 700 },
+                               {{ 924, 672 },
                                 { 792, 672 },
                                 { 792, 672 },
+                                { 792, 648 },
+                               }
+                       },
+               },
+       },
+       {
+               .sku            = 0x4,          /* SKU = 4 */
+               .process_id     = -1,           /* any process id */
+               .cap_mA         = 8000,         /* 8A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
+                                { 924, 648 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
+                                { 924, 648 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
+                                { 924, 648 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
+                                { 924, 648 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 672 },
+                                { 924, 672 },
+                                { 924, 672 },
+                                { 924, 648 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 924, 828 },
+                                { 924, 816 },
+                                { 924, 804 },
+                                { 924, 648 },
+                               }
+                       },
+               },
+       },
+       /* SKU 5 */
+       {
+               .sku            = 0x5,          /* SKU = 5 */
+               .process_id     = 0,            /* bin 0 */
+               .cap_mA         = 4000,         /* 4A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 336 },
+                                { 792, 336 },
+                                { 792, 300 },
+                                { 792, 240 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 624, 396 },
+                                { 660, 372 },
+                                { 660, 324 },
+                                { 660, 288 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 408, 492 },
+                                { 408, 396 },
+                                { 408, 396 },
+                                { 408, 396 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 432 },
+                                { 792, 432 },
+                                { 792, 396 },
+                                { 792, 348 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 624, 492 },
+                                { 660, 492 },
+                                { 660, 444 },
+                                { 660, 384 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 408, 516 },
+                                { 408, 516 },
+                                { 408, 516 },
+                                { 408, 492 },
+                               }
+                       },
+               },
+       },
+       {
+               .sku            = 0x5,          /* SKU = 5 */
+               .process_id     = 1,            /* bin 1 */
+               .cap_mA         = 4000,         /* 4A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 348 },
+                                { 792, 336 },
+                                { 792, 300 },
+                                { 792, 240 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 624, 420 },
+                                { 660, 372 },
+                                { 660, 324 },
+                                { 660, 288 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 408, 528 },
+                                { 408, 492 },
+                                { 408, 420 },
+                                { 408, 420 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 432 },
+                                { 792, 432 },
+                                { 792, 396 },
+                                { 792, 348 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 624, 528 },
+                                { 660, 492 },
+                                { 660, 444 },
+                                { 660, 384 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 408, 564 },
+                                { 408, 564 },
+                                { 408, 528 },
+                                { 408, 528 },
+                               }
+                       },
+               },
+       },
+       {
+               .sku            = 0x5,          /* SKU = 5 */
+               .process_id     = -1,           /* any process id */
+               .cap_mA         = 6000,         /* 6A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                                { 792, 516 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 660, 600 },
+                                { 660, 564 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 660, 600 },
+                                { 528, 600 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                                { 624, 600 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                                { 624, 600 },
+                               }
+                       },
+               },
+       },
+       /* SKU 6 */
+       {
+               .sku            = 0x6,          /* SKU = 6 */
+               .process_id     = 0,            /* bin 0 */
+               .cap_mA         = 4000,         /* 4A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 348 },
+                                { 792, 348 },
+                                { 792, 312 },
+                                { 792, 264 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 660, 372 },
+                                { 660, 372 },
+                                { 660, 336 },
+                                { 660, 300 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 408, 492 },
+                                { 408, 396 },
+                                { 408, 396 },
+                                { 408, 396 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 444 },
+                                { 792, 444 },
+                                { 792, 408 },
+                                { 792, 372 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 660, 492 },
+                                { 660, 492 },
+                                { 660, 456 },
+                                { 660, 408 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 408, 552 },
+                                { 408, 516 },
+                                { 408, 516 },
+                                { 408, 516 },
+                               }
+                       },
+               },
+       },
+       {
+               .sku            = 0x6,          /* SKU = 6 */
+               .process_id     = 1,            /* bin 1 */
+               .cap_mA         = 4000,         /* 4A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 348 },
+                                { 792, 348 },
+                                { 792, 312 },
+                                { 792, 264 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 660, 420 },
+                                { 660, 372 },
+                                { 660, 336 },
+                                { 660, 300 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 408, 528 },
+                                { 408, 492 },
+                                { 408, 420 },
+                                { 408, 420 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 444 },
+                                { 792, 444 },
+                                { 792, 408 },
+                                { 792, 372 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 660, 492 },
+                                { 660, 492 },
+                                { 660, 456 },
+                                { 660, 408 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 408, 564 },
+                                { 408, 564 },
+                                { 408, 564 },
+                                { 408, 528 },
+                               }
+                       },
+               },
+       },
+       {
+               .sku            = 0x6,          /* SKU = 6 */
+               .process_id     = -1,           /* any process id */
+               .cap_mA         = 6000,         /* 6A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                                { 792, 516 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                                { 660, 600 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                                { 660, 600 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                                { 792, 600 },
+                               }
+                       },
+               },
+       },
+       /* SKU 8 */
+       {
+               .sku            = 0x8,          /* SKU = 8 */
+               .process_id     = -1,           /* any process id */
+               .cap_mA         = 6000,         /* 6A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 744, 636 },
+                                { 744, 636 },
+                                { 744, 576 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 744, 636 },
+                                { 744, 636 },
+                                { 744, 576 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 624, 672 },
                                 { 624, 672 },
+                                { 624, 636 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 744, 672 },
+                                { 744, 672 },
+                                { 744, 648 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 744, 672 },
+                                { 744, 672 },
+                                { 744, 648 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 744, 672 },
+                                { 744, 672 },
+                                { 744, 648 },
+                               }
+                       },
+               },
+       },
+       {
+               .sku            = 0x8,          /* SKU = 8 */
+               .process_id     = -1,           /* any process id */
+               .cap_mA         = 8000,         /* 8A cap */
+               .mult           = 1000000,      /* MHZ */
+               .cap_scpu_on    = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 744, 672 },
+                                { 744, 672 },
+                                { 744, 648 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 744, 672 },
+                                { 744, 672 },
+                                { 744, 648 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 744, 672 },
+                                { 744, 672 },
+                                { 744, 648 },
+                               }
+                       },
+               },
+               .cap_scpu_off   = {
+                       /* favor emc */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 744, 672 },
+                                { 744, 672 },
+                                { 744, 648 },
+                               },
+                       },
+                       /* balanced profile */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 744, 672 },
+                                { 744, 672 },
+                                { 744, 672 },
+                                { 744, 648 },
+                               },
+                       },
+                       /* favor gpu */
+                       {       /* core modules power state 0 (all ON) */
+                               {{ 792, 828 },
+                                { 792, 816 },
+                                { 792, 804 },
+                                { 792, 648 },
                                }
                        },
                },
@@ -157,16 +803,95 @@ static struct core_edp_entry core_edp_table[] = {
 static struct tegra_edp_cpu_leakage_params t11x_leakage_params[] = {
        {
                .cpu_speedo_id      = 0, /* A01 CPU */
+               .max_current_cap = { /* values are from tegra4 datasheet */
+                       { .max_cur = 9000, .max_temp = 60,
+                               { 1900000, 1900000, 1600000, 1600000 }
+                       },
+                       { .max_cur = 9000, .max_temp = 75,
+                               { 1900000, 1900000, 1530000, 1530000 }
+                       },
+                       { .max_cur = 9000, .max_temp = 90,
+                               { 1900000, 1900000, 1500000, 1500000 }
+                       },
+                       { .max_cur = 12000, .max_temp = 90,
+                               { 1900000, 1900000, 1700000, 1700000 }
+                       },
+                       { .max_cur = 15000, .max_temp = 90,
+                               { 1900000, 1900000, 1900000, 1900000 }
+                       },
+               },
                LEAKAGE_PARAMS_COMMON_PART,
        },
        {
                .cpu_speedo_id      = 1, /* A01P+ CPU */
                .safety_cap         = { 1810500, 1810500, 1606500, 1606500 },
+               .max_current_cap = { /* values are from tegra4 datasheet */
+                       { .max_cur = 7500, .max_temp = 90,
+                               { 1800000, 1700000, 1320000, 1320000 }
+                       },
+                       { .max_cur = 7500, .max_temp = 75,
+                               { 1800000, 1700000, 1420000, 1420000 }
+                       },
+                       { .max_cur = 7500, .max_temp = 60,
+                               { 1800000, 1800000, 1420000, 1420000 }
+                       },
+                       { .max_cur = 7500, .max_temp = 45,
+                               { 1800000, 1800000, 1530000, 1530000 }
+                       },
+                       { .max_cur = 9000, .max_temp = 90,
+                               { 1800000, 1800000, 1500000, 1500000 }
+                       },
+                       { .max_cur = 9000, .max_temp = 75,
+                               { 1800000, 1800000, 1530000, 1530000 }
+                       },
+                       { .max_cur = 9000, .max_temp = 60,
+                               { 1800000, 1800000, 1600000, 1600000 }
+                       },
+                       { .max_cur = 12000, .max_temp = 45,
+                               { 1800000, 1800000, 1600000, 1600000 }
+                       },
+               },
                LEAKAGE_PARAMS_COMMON_PART,
        },
        {
                .cpu_speedo_id      = 2, /* A01P+ fast CPU */
                .safety_cap         = { 1912500, 1912500, 1912500, 1912500 },
+               .max_current_cap = { /* values are from tegra4 datasheet */
+                       { .max_cur = 9000, .max_temp = 90,
+                               { 1900000, 1900000, 1500000, 1500000 }
+                       },
+                       { .max_cur = 9000, .max_temp = 75,
+                               { 1900000, 1900000, 1530000, 1530000 }
+                       },
+                       { .max_cur = 9000, .max_temp = 60,
+                               { 1900000, 1900000, 1600000, 1600000 }
+                       },
+                       { .max_cur = 12000, .max_temp = 90,
+                               { 1900000, 1900000, 1700000, 1700000 }
+                       },
+                       { .max_cur = 15000, .max_temp = 90,
+                               { 1900000, 1900000, 1900000, 1900000 }
+                       },
+               },
+               LEAKAGE_PARAMS_COMMON_PART,
+       },
+       {
+               .cpu_speedo_id      = 3,
+               .safety_cap = { 1810500, 1810500, 1810500, 1810500 },
+               .max_current_cap = { /* fixed values */
+                       { .max_cur = 9000, .max_temp = 105,
+                               { 1810500, 1810500, 1530000, 1530000 }
+                       },
+                       { .max_cur = 9000, .max_temp = 90,
+                               { 1810500, 1810500, 1606500, 1606500 }
+                       },
+                       { .max_cur = 12000, .max_temp = 105,
+                               { 1810500, 1810500, 1708500, 1708500 }
+                       },
+                       { .max_cur = 15000, .max_temp = 105,
+                               { 1810500, 1810500, 1810500, 1810500 }
+                       },
+               },
                LEAKAGE_PARAMS_COMMON_PART,
        },
 };
@@ -184,13 +909,25 @@ struct tegra_edp_cpu_leakage_params *tegra11x_get_leakage_params(int index,
 static struct core_edp_entry *find_edp_entry(int sku, unsigned int regulator_mA)
 {
        int i;
+       int pid = tegra_core_process_id();
+
+       if ((sku == 0x5) || (sku == 0x6)) {
+               if (regulator_mA >= 8000)
+                       return NULL;            /* no edp limits above 8A */
+       } else if ((sku == 0x3) || (sku == 0x4) || (sku == 0x8)) {
+               if (regulator_mA >= 8000)
+                       regulator_mA = 8000;    /* apply 8A table above 8A */
+       } else {
+               return NULL;                    /* no edp limits at all */
+       }
 
        for (i = 0; i < ARRAY_SIZE(core_edp_table); i++) {
                struct core_edp_entry *entry = &core_edp_table[i];
-               if ((entry->sku == sku) && (entry->cap_mA == regulator_mA))
+               if ((entry->sku == sku) && (entry->cap_mA == regulator_mA) &&
+                   ((entry->process_id == -1) || (entry->process_id == pid)))
                        return entry;
        }
-       return NULL;
+       return ERR_PTR(-ENOENT);
 }
 
 static unsigned long clip_cap_rate(struct clk *cap_clk, unsigned long rate)
@@ -230,7 +967,7 @@ int __init tegra11x_select_core_edp_table(unsigned int regulator_mA,
                                          struct tegra_core_edp_limits *limits)
 {
        int i;
-       int sku = tegra_sku_id;
+       int sku;
        unsigned long *cap_rates;
        struct core_edp_entry *edp_entry;
 
@@ -246,11 +983,16 @@ int __init tegra11x_select_core_edp_table(unsigned int regulator_mA,
                cap_clks[i] = c;
        }
 
+       sku = tegra_get_sku_id();
        edp_entry = find_edp_entry(sku, regulator_mA);
        if (!edp_entry) {
                pr_info("%s: no core edp table for sku %d, %d mA\n",
                       __func__, sku, regulator_mA);
                return -ENODATA;
+       } else if (IS_ERR(edp_entry)) {
+               WARN(1, "%s: missing core edp table for sku %d, %d mA\n",
+                      __func__, sku, regulator_mA);
+               return PTR_ERR(edp_entry);
        }
 
        limits->sku = sku;