【rk3506】解决cpufreq目录不存在问题
问题描述
最近和应用同事联调,反馈日志里一直报这两个错,记录一下完整排查过程。:
open/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq:No such file ordirectory(2)open/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq:No such file ordirectory(2)排查步骤
1、先看内核配置,是不是没开 cpufreq?
第一反应先去核对内核配置,毕竟这种 sysfs 节点的问题,大概率是配置没开。检查了.config文件,这几个关键配置都已经是开启状态:
CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_ARM_ROCKCHIP_CPUFREQ=y配置没问题,那说明不是 “没开驱动” 这么简单,得往下挖。
2、设备树才是关键!RK3506 的 DVFS 链路
查了下 Rockchip 的文档才反应过来,RK3506 的 CPU 动态调频调压(DVFS)是有完整链路依赖的,不是开了配置就完事。
整个链路是这样的:
vdd_arm(PWM调压) → pwm0_4ch_0(PWM控制器通道) → rm_io21_pwm0_ch0(引脚复用配置)
这三个环节是环环相扣的,只要缺了一环,内核就没法建立 “CPU 频率 ↔ 核心电压” 的映射,没法调压,自然也就没法启用 cpufreq 驱动,最后就表现为/sys/devices/system/cpu/cpu0/cpufreq这个目录直接不生成。
翻了下设备树,原厂 demo 的设备树里是完整配置了这部分的:
vdd_arm:vdd-arm{compatible="pwm-regulator";pwms=<&pwm0_4ch_0050001>;regulator-name="vdd_arm";regulator-min-microvolt=<710000>;regulator-max-microvolt=<1207000>;regulator-init-microvolt=<1011000>;regulator-always-on;regulator-boot-on;regulator-settling-time-up-us=<250>;pwm-supply=<&vcc_sys>;};&pwm0_4ch_0{pinctrl-names="active";pinctrl-0=<&rm_io21_pwm0_ch0>;status="okay";};rm_io21{/omit-if-no-ref/rm_io21_pwm0_ch0:rm-io21-pwm0-ch0{rockchip,pins=<0RK_PC545&pcfg_pull_none_drv_level_1>;};};排查发现,我们基于原厂rk3506 demo板设计的原理图上是不支持CPU 动态调频调压。
3、排查到根因:硬件设计不支持 DVFS
拿着设备树去核对我们自己的原理图,才发现问题:我们基于原厂 demo 板做的硬件设计,压根就没接 PWM 调压电路,不支持 CPU 动态调频调压。
也就是说,设备树里的这部分配置,在我们的硬件上是不成立的,内核没法正常初始化 cpufreq 驱动,才会出现 sysfs 节点不存在的问题。
