全志平台他Tina系统linux4.9打开调频策略cpufreq后编译错误问题

【适用范围】

全志平台他Tina系统linux4.9,Tina3.0.1-Tina3.0.3,再往后的版本应该修复了这个问题,此处以R331为例

 

【问题现象】

选中CPU Power Management 下的 CPU Frequency scaling和改目录下的CPU驱动SUNXI CPUFreq support

编译时报错:

drivers/built-in.o: In function `sunxi_cpufreq_set_vf':
/home/chenkunyao/workspace/tina2.0/atina/lichee/linux-4.9/drivers/cpufreq/sunxi-cpufreq.c:279: undefined reference to `arisc_dvfs_cfg_vf_table'
make[5]: *** [vmlinux] Error 1
make[5]: Leaving directory `/home/chenkunyao/workspace/tina2.0/atina/lichee/linux-4.9'
make[4]: *** [/home/chenkunyao/workspace/tina2.0/atina/out/bassoon-perf1/compile_dir/target/linux-bassoon-perf1/linux-4.9.56/.image] Error 2
make[4]: Leaving directory `/home/chenkunyao/workspace/tina2.0/atina/target/allwinner/bassoon-perf1'
make[3]: *** [install] Error 2
make[3]: Leaving directory `/home/chenkunyao/workspace/tina2.0/atina/target/allwinner'
make[2]: *** [target/allwinner/install] Error 2
make[2]: Leaving directory `/home/chenkunyao/workspace/tina2.0/atina'
make[1]: *** [/home/chenkunyao/workspace/tina2.0/atina/out/bassoon-perf1/staging_dir/target/stamp/.target_install] Error 2
make[1]: Leaving directory `/home/chenkunyao/workspace/tina2.0/atina'
make: *** [world] 错误 2
#### make failed to build some targets (14:35 (mm:ss)) ####

 

【问题原因】

没打patch,cpufreq接口没开

 

【解决方法】

linux4.9目录下打上patch:

From XXXXXXXXXXXXXXXXX Mon Sep 17 00:00:00 2001
From: XXXXXXX@allwinnertech.com
Date: Thu, 30 Aug 2018 09:45:55 +0800
Subject: [PATCH 89/92] sun8iw8p1: boobam_std: support dvfs

Change-Id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Signed-off-by: XXXXXX <XXXXXXX@allwinnertech.com>
---
 arch/arm/boot/dts/sun8iw8p1.dtsi | 74 ++++++++++++++++++++++++++++++++++++++++
 drivers/cpufreq/sunxi-cpufreq.c  |  9 ++---
 2 files changed, 79 insertions(+), 4 deletions(-)

diff --git a/arch/arm/boot/dts/sun8iw8p1.dtsi b/arch/arm/boot/dts/sun8iw8p1.dtsi
index fa53820..3e1a09a 100644
--- a/arch/arm/boot/dts/sun8iw8p1.dtsi
+++ b/arch/arm/boot/dts/sun8iw8p1.dtsi
@@ -37,6 +37,7 @@
 	};
 
 	cpus {
+		enable-method = "allwinner,sun8iw8p1";
 		#address-cells = <1>;
 		#size-cells    = <0>;
 
@@ -44,10 +45,83 @@
 			device_type = "cpu";
 			compatible  = "arm,cortex-a7";
 			reg         = <0x0>;
+			enable-method = "psci";
+			clocks = <&clk_pll_cpu>;
+			clock-latency = <2000000>;
+			clock-frequency = <1008000000>;
+			operating-points-v2 = <&cpu_opp_l_table0>;
+			/*cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0 &SYS_SLEEP_0>;*/
 		};
 	};
 
 
+	opp_dvfs_table:opp_dvfs_table {
+		cluster_num = <1>;
+		opp_table_count = <1>;
+
+		cpu_opp_l_table0: opp_l_table0 {
+			compatible = "allwinner,opp_l_table0";
+			opp_count = <8>;
+			opp-shared;
+
+			opp00 {
+				opp-hz = /bits/ 64 <60000000>;
+				opp-microvolt = <1040000>;
+				axi-bus-divide-ratio = <3>;
+				clock-latency-ns = <2000000>;
+			};
+
+			opp01 {
+				opp-hz = /bits/ 64 <480000000>;
+				opp-microvolt = <1040000>;
+				axi-bus-divide-ratio = <3>;
+				clock-latency-ns = <2000000>;
+			};
+
+			opp02 {
+				opp-hz = /bits/ 64 <648000000>;
+				opp-microvolt = <1040000>;
+				axi-bus-divide-ratio = <3>;
+				clock-latency-ns = <2000000>;
+			};
+
+			opp03 {
+				opp-hz = /bits/ 64 <720000000>;
+				opp-microvolt = <1100000>;
+				axi-bus-divide-ratio = <3>;
+				clock-latency-ns = <2000000>;
+			};
+
+			opp04 {
+				opp-hz = /bits/ 64 <816000000>;
+				opp-microvolt = <1100000>;
+				axi-bus-divide-ratio = <3>;
+				clock-latency-ns = <2000000>;
+			};
+
+			opp05 {
+				opp-hz = /bits/ 64 <912000000>;
+				opp-microvolt = <1200000>;
+				axi-bus-divide-ratio = <3>;
+				clock-latency-ns = <2000000>;
+			};
+
+			opp06 {
+				opp-hz = /bits/ 64 <1080000000>;
+				opp-microvolt = <1200000>;
+				axi-bus-divide-ratio = <3>;
+				clock-latency-ns = <2000000>;
+			};
+
+			opp07 {
+				opp-hz = /bits/ 64 <1200000000>;
+				opp-microvolt = <1320000>;
+				axi-bus-divide-ratio = <3>;
+				clock-latency-ns = <2000000>;
+			};
+		};
+	};
+
 	memory@40000000 {
 		device_type = "memory";
 		reg = <0x00000000 0x40000000 0x00000000 0x4000000>;  /*  64M*/
diff --git a/drivers/cpufreq/sunxi-cpufreq.c b/drivers/cpufreq/sunxi-cpufreq.c
index ff74e07..f0480a2 100644
--- a/drivers/cpufreq/sunxi-cpufreq.c
+++ b/drivers/cpufreq/sunxi-cpufreq.c
@@ -188,8 +188,9 @@ static int sunxi_set_cpufreq_and_voltage(struct cpufreq_policy *policy,
 	struct device *cpu_dev;
 
 	cpu_dev = get_cpu_device(policy->cpu);
-
-
+#if defined(CONFIG_ARCH_SUN8IW8P1)
+	freq *= 1000;
+#endif
 	return dev_pm_opp_set_rate(cpu_dev, freq);
 }
 #endif
@@ -275,9 +276,9 @@ static int sunxi_cpufreq_set_vf(struct cpufreq_frequency_table *table,
 	memcpy((void *)kvir, (void *)cpufreq_dvfs_table,
 			num * sizeof(struct cpufreq_frequency_table));
 	__dma_flush_area((void *)kvir, num * sizeof(struct cpufreq_frequency_table));
-
+#ifndef CONFIG_ARCH_SUN8IW8P1
 	arisc_dvfs_cfg_vf_table(0, num, virt_to_phys(kvir));
-
+#endif
 	kfree(kvir);
 	kvir = NULL;
 
-- 
1.9.1

make kernel_menuconfig下的配置如下:

选中CPU Power Management 下的 CPU Frequency scaling

选中几个需要的调频策略,如:

userspace 根据用户的选择调节

 

往下拉把 CPU驱动SUNXI CPUFreq support选上。

重新编译即可。

 

烧录后查看cpufreq节点:

cd /sys/devices/system/cpu/cpu0/cpufreq

查看当前cpu频率的办法

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值