From: Robin Gong Date: Thu, 14 Mar 2013 09:19:44 +0000 (+0800) Subject: ENGR00254267 MX6DL/MX6SL max freq: Fix max cpu freq at 1G on MX6DL ARD X-Git-Tag: v3.0.35-fsl~70 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=8ce4504bf2a8f79af776fc6c10b26fc3682eb660;p=karo-tx-linux.git ENGR00254267 MX6DL/MX6SL max freq: Fix max cpu freq at 1G on MX6DL ARD For MX6DL,align max cpufreq judge by SPEED_GRADING fuse bit with MX6DQ. For MX6SL without the fuse bit, we need add condition check, if found arm_max_freq set by default , change to1G. Else decided by 'arm_freq' setting by cmdline. Signed-off-by: Robin Gong --- diff --git a/arch/arm/mach-mx6/cpu_op-mx6.c b/arch/arm/mach-mx6/cpu_op-mx6.c index 541861832543..210fdd536c57 100644 --- a/arch/arm/mach-mx6/cpu_op-mx6.c +++ b/arch/arm/mach-mx6/cpu_op-mx6.c @@ -342,17 +342,25 @@ void mx6_cpu_op_init(void) { unsigned int reg; void __iomem *base; - if (cpu_is_mx6q()) { + if (!cpu_is_mx6sl()) { /*read fuse bit to know the max cpu freq : offset 0x440 - * bit[17:16]:SPEED_GRADING[1:0]*/ + * bit[17:16]:SPEED_GRADING[1:0],for mx6dq/dl*/ base = IO_ADDRESS(OCOTP_BASE_ADDR); reg = __raw_readl(base + 0x440); reg &= (0x3 << OCOTP_SPEED_BIT_OFFSET); reg >>= OCOTP_SPEED_BIT_OFFSET; /*choose the little value to run lower max cpufreq*/ arm_max_freq = (reg > arm_max_freq) ? arm_max_freq : reg; - } else - arm_max_freq = CPU_AT_1GHz;/*mx6dl/sl max freq is 1Ghz*/ + } else { + /* + * There is no SPEED_GRADING fuse bit on mx6sl,then do: + * If arm_max_freq set by default on CPU_AT_1_2GHz which mean + * there is no 'arm_freq' setting in cmdline from bootloader, + * force arm_max_freq to 1G. Else use 'arm_freq' setting. + */ + if (arm_max_freq == CPU_AT_1_2GHz) + arm_max_freq = CPU_AT_1GHz;/*mx6sl max freq is 1Ghz*/ + } printk(KERN_INFO "arm_max_freq=%s\n", (arm_max_freq == CPU_AT_1_2GHz) ? "1.2GHz" : ((arm_max_freq == CPU_AT_1GHz) ? "1GHz" : "800MHz")); get_cpu_op = mx6_get_cpu_op;