From cb675508ac4936dee6000f652ad7177e5c1e0f5f Mon Sep 17 00:00:00 2001 From: flar2 Date: Mon, 23 May 2016 12:54:33 -0400 Subject: [PATCH] msm8996: Overclocking with cmdline option --- arch/arm/boot/dts/qcom/msm8996-v3.dtsi | 23 +++++++++----- drivers/cpufreq/qcom-cpufreq.c | 43 ++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 8 deletions(-) diff --git a/arch/arm/boot/dts/qcom/msm8996-v3.dtsi b/arch/arm/boot/dts/qcom/msm8996-v3.dtsi index 8e46ce527..c593793fa 100644 --- a/arch/arm/boot/dts/qcom/msm8996-v3.dtsi +++ b/arch/arm/boot/dts/qcom/msm8996-v3.dtsi @@ -482,7 +482,8 @@ < 1324800000 13 >, < 1401600000 14 >, < 1478400000 15 >, - < 1593600000 16 >; + < 1593600000 16 >, + < 1728000000 16 >; qcom,pwrcl-speedbin1-v0 = < 0 0 >, < 307200000 1 >, @@ -541,7 +542,8 @@ < 1920000000 22 >, < 1996800000 23 >, < 2073600000 24 >, - < 2150400000 25 >; + < 2150400000 25 >, + < 2265600000 25 >; qcom,perfcl-speedbin1-v0 = < 0 0 >, < 307200000 1 >, @@ -663,7 +665,8 @@ < 1324800 >, < 1401600 >, < 1478400 >, - < 1593600 >; + < 1593600 >, + < 1728000 >; qcom,cpufreq-table-2 = < 307200 >, < 403200 >, @@ -689,7 +692,8 @@ < 1920000 >, < 1996800 >, < 2073600 >, - < 2150400 >; + < 2150400 >, + < 2265600 >; }; &m4m_cache { @@ -733,7 +737,8 @@ < 1324800 1056000 >, < 1401600 1132800 >, < 1478400 1190400 >, - < 1593600 1382400 >; + < 1593600 1382400 >, + < 1728000 1382400 >; cpu-to-dev-map-2 = < 480000 307200 >, < 556800 307200 >, @@ -757,15 +762,17 @@ < 1920000 1459200 >, < 1996800 1593600 >, < 2073600 1593600 >, - < 2150400 1593600 >; + < 2150400 1593600 >, + < 2265600 1593600 >; }; mincpubw-cpufreq { cpu-to-dev-map-0 = - < 1593600 1525 >; + < 1728000 1525 >; cpu-to-dev-map-2 = < 2073600 1525 >, - < 2150400 5195 >; + < 2150400 5195 >, + < 2265600 5195 >; }; }; diff --git a/drivers/cpufreq/qcom-cpufreq.c b/drivers/cpufreq/qcom-cpufreq.c index 1a8bd4a8f..a967e3346 100644 --- a/drivers/cpufreq/qcom-cpufreq.c +++ b/drivers/cpufreq/qcom-cpufreq.c @@ -35,6 +35,42 @@ static DEFINE_MUTEX(l2bw_lock); + +static unsigned long arg_cpu_max_c1 = 1593600; + +static int __init cpufreq_read_cpu_max_c1(char *cpu_max_c1) +{ + unsigned long ui_khz; + int ret; + + ret = kstrtoul(cpu_max_c1, 0, &ui_khz); + if (ret) + return -EINVAL; + + arg_cpu_max_c1 = ui_khz; + printk("cpu_max_c1=%lu\n", arg_cpu_max_c1); + return ret; +} +__setup("cpu_max_c1=", cpufreq_read_cpu_max_c1); + +static unsigned long arg_cpu_max_c2 = 2150400; + +static int __init cpufreq_read_cpu_max_c2(char *cpu_max_c2) +{ + unsigned long ui_khz; + int ret; + + ret = kstrtoul(cpu_max_c2, 0, &ui_khz); + if (ret) + return -EINVAL; + + arg_cpu_max_c2 = ui_khz; + printk("cpu_max_c2=%lu\n", arg_cpu_max_c2); + return ret; +} +__setup("cpu_max_c2=", cpufreq_read_cpu_max_c2); + + static struct clk *cpu_clk[NR_CPUS]; static struct clk *l2_clk; static DEFINE_PER_CPU(struct cpufreq_frequency_table *, freq_table); @@ -400,6 +436,13 @@ static struct cpufreq_frequency_table *cpufreq_parse_dt(struct device *dev, if (i > 0 && f <= ftbl[i-1].frequency) break; + //Custom max freq + if ((cpu < 2 && f > arg_cpu_max_c1) || + (cpu >= 2 && f > arg_cpu_max_c2)) { + nf = i; + break; + } + ftbl[i].driver_data = i; ftbl[i].frequency = f; }