summaryrefslogtreecommitdiff
path: root/arch/arm/mach-mx6
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-mx6')
-rw-r--r--arch/arm/mach-mx6/cpu.c5
-rw-r--r--arch/arm/mach-mx6/cpu_op-mx6.c50
-rw-r--r--arch/arm/mach-mx6/cpu_op-mx6.h7
3 files changed, 54 insertions, 8 deletions
diff --git a/arch/arm/mach-mx6/cpu.c b/arch/arm/mach-mx6/cpu.c
index 7b7668cf0a6a..d4850657f60c 100644
--- a/arch/arm/mach-mx6/cpu.c
+++ b/arch/arm/mach-mx6/cpu.c
@@ -167,7 +167,10 @@ early_param("enable_wait_mode", enable_wait);
static int __init arm_core_max(char *p)
{
- if (memcmp(p, "1000", 4) == 0) {
+ if (memcmp(p, "1200", 4) == 0) {
+ arm_max_freq = CPU_AT_1_2GHz;
+ p += 4;
+ } else if (memcmp(p, "1000", 4) == 0) {
arm_max_freq = CPU_AT_1GHz;
p += 4;
} else if (memcmp(p, "800", 3) == 0) {
diff --git a/arch/arm/mach-mx6/cpu_op-mx6.c b/arch/arm/mach-mx6/cpu_op-mx6.c
index f6e5af115226..6f030102c821 100644
--- a/arch/arm/mach-mx6/cpu_op-mx6.c
+++ b/arch/arm/mach-mx6/cpu_op-mx6.c
@@ -23,7 +23,35 @@ extern void (*set_num_cpu_op)(int num);
extern u32 arm_max_freq;
static int num_cpu_op;
-/* working point(wp): 0 - 1GHzMHz; 1 - 800MHz, 2 - 624MHz 3 - 400MHz, 4 - 200MHz */
+/* working point(wp): 0 - 1.2GHz; 1 - 800MHz, 2 - 624MHz 3 - 400MHz, 4 - 200MHz */
+static struct cpu_op mx6_cpu_op_1_2G[] = {
+ {
+ .pll_rate = 1200000000,
+ .cpu_rate = 1200000000,
+ .cpu_podf = 0,
+ .cpu_voltage = 1275000,},
+ {
+ .pll_rate = 792000000,
+ .cpu_rate = 792000000,
+ .cpu_podf = 0,
+ .cpu_voltage = 1100000,},
+ {
+ .pll_rate = 624000000,
+ .cpu_rate = 624000000,
+ .cpu_voltage = 1100000,},
+ {
+ .pll_rate = 792000000,
+ .cpu_rate = 396000000,
+ .cpu_podf = 1,
+ .cpu_voltage = 950000,},
+ {
+ .pll_rate = 792000000,
+ .cpu_rate = 198000000,
+ .cpu_podf = 3,
+ .cpu_voltage = 850000,},
+};
+
+/* working point(wp): 0 - 1GHz; 1 - 800MHz, 2 - 624MHz 3 - 400MHz, 4 - 200MHz */
static struct cpu_op mx6_cpu_op_1G[] = {
{
.pll_rate = 996000000,
@@ -111,10 +139,18 @@ static struct cpu_op mx6dl_cpu_op[] = {
.cpu_voltage = 1000000,},
};
+static struct dvfs_op dvfs_core_setpoint_1_2G[] = {
+ {33, 14, 33, 10, 128, 0x10}, /* 1.2GHz*/
+ {30, 12, 33, 100, 200, 0x10}, /* 800MHz */
+ {28, 12, 33, 100, 200, 0x10}, /* 624MHz */
+ {26, 8, 33, 100, 200, 0x10}, /* 400MHz */
+ {20, 0, 33, 20, 10, 0x10} }; /* 200MHz*/
+
static struct dvfs_op dvfs_core_setpoint_1G[] = {
{33, 14, 33, 10, 128, 0x10}, /* 1GHz*/
{30, 12, 33, 100, 200, 0x10}, /* 800MHz */
- {28, 8, 33, 100, 200, 0x10}, /* 400MHz */
+ {28, 12, 33, 100, 200, 0x10}, /* 624MHz */
+ {26, 8, 33, 100, 200, 0x10}, /* 400MHz */
{20, 0, 33, 20, 10, 0x10} }; /* 200MHz*/
static struct dvfs_op dvfs_core_setpoint[] = {
@@ -124,7 +160,10 @@ static struct dvfs_op dvfs_core_setpoint[] = {
static struct dvfs_op *mx6_get_dvfs_core_table(int *wp)
{
- if (arm_max_freq == CPU_AT_1GHz) {
+ if (arm_max_freq == CPU_AT_1_2GHz) {
+ *wp = ARRAY_SIZE(dvfs_core_setpoint_1_2G);
+ return dvfs_core_setpoint_1_2G;
+ } else if (arm_max_freq == CPU_AT_1GHz) {
*wp = ARRAY_SIZE(dvfs_core_setpoint_1G);
return dvfs_core_setpoint_1G;
} else {
@@ -144,7 +183,10 @@ struct cpu_op *mx6_get_cpu_op(int *op)
return mx6dl_cpu_op;
}
} else {
- if (arm_max_freq == CPU_AT_1GHz) {
+ if (arm_max_freq == CPU_AT_1_2GHz) {
+ *op = num_cpu_op = ARRAY_SIZE(mx6_cpu_op_1_2G);
+ return mx6_cpu_op_1_2G;
+ } else if (arm_max_freq == CPU_AT_1GHz) {
*op = num_cpu_op = ARRAY_SIZE(mx6_cpu_op_1G);
return mx6_cpu_op_1G;
} else {
diff --git a/arch/arm/mach-mx6/cpu_op-mx6.h b/arch/arm/mach-mx6/cpu_op-mx6.h
index 77e8222c5d38..b5ca58ecb3b3 100644
--- a/arch/arm/mach-mx6/cpu_op-mx6.h
+++ b/arch/arm/mach-mx6/cpu_op-mx6.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010-2011 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright (C) 2010-2012 Freescale Semiconductor, Inc. All Rights Reserved.
*/
/*
@@ -11,7 +11,8 @@
* http://www.gnu.org/copyleft/gpl.html
*/
-#define CPU_AT_800MHz 0
-#define CPU_AT_1GHz 1
+#define CPU_AT_800MHz 0
+#define CPU_AT_1GHz 1
+#define CPU_AT_1_2GHz 2
void mx6_cpu_op_init(void);