根据你的描述,问题可能出在OPP(Operating Performance Points)表的配置与稳压器设置的匹配上。以下是分步解决方案:
1. 检查OPP表配置
在设备树中确认CPU的OPP节点配置,典型配置如下:
&cpu0_opp_table {
opp-650000000 {
opp-hz = /bits/ 64 <650000000>;
opp-microvolt = <1200000>;
opp-supported-hw = <0x1>;
};
opp-800000000 {
opp-hz = /bits/ 64 <800000000>;
opp-microvolt = <1350000>; // 需与硬件手册核对实际电压
opp-supported-hw = <0x1>;
};
};
2. 验证CPU节点引用
确保CPU节点正确引用OPP表和稳压器:
&cpu0 {
operating-points-v2 = <&cpu0_opp_table>;
opp-supply = <&vddcore>; // 指向你的稳压器
};
3. 调整稳压器配置
将稳压器配置改为允许动态调节的模式:
vddcore: regulator-vddcore {
compatible = "regulator-fixed";
regulator-name = "vddcore";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1350000>;
regulator-always-on;
regulator-boot-on;
// 添加以下属性支持动态调节(如果驱动支持)
regulator-allow-set-load;
regulator-allow-bypass;
};
4. 硬件验证
- 查阅STM32MP157D数据手册,确认800MHz所需的核心电压
- 用万用表测量VDD_CORE实际工作电压是否达到频率要求
- 检查PMIC/分立电源的电流供给能力是否足够
5. 调试技巧
- 查看内核日志:
dmesg | grep -E 'opp|cpufreq|vddcore'
- 检查OPP表是否加载成功:
cat /sys/kernel/debug/opp/opp_table
- 验证当前频率设置:
watch -n 1 "cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq"
可能的问题原因:
- OPP表中800MHz条目缺失或电压设置不正确
- 稳压器配置为固定模式,无法动态响应调频需求
- 实际供电电压无法满足800MHz要求,触发安全降频
- 硬件设计限制(如电源路径阻抗过大)
建议先尝试将稳压器的regulator-min-microvolt设置为OPP表要求的准确电压值(如1.35V),测试是否能正确获取800MHz。若仍不成功,需要检查硬件设计是否满足高频工作的电源完整性要求。
根据你的描述,问题可能出在OPP(Operating Performance Points)表的配置与稳压器设置的匹配上。以下是分步解决方案:
1. 检查OPP表配置
在设备树中确认CPU的OPP节点配置,典型配置如下:
&cpu0_opp_table {
opp-650000000 {
opp-hz = /bits/ 64 <650000000>;
opp-microvolt = <1200000>;
opp-supported-hw = <0x1>;
};
opp-800000000 {
opp-hz = /bits/ 64 <800000000>;
opp-microvolt = <1350000>; // 需与硬件手册核对实际电压
opp-supported-hw = <0x1>;
};
};
2. 验证CPU节点引用
确保CPU节点正确引用OPP表和稳压器:
&cpu0 {
operating-points-v2 = <&cpu0_opp_table>;
opp-supply = <&vddcore>; // 指向你的稳压器
};
3. 调整稳压器配置
将稳压器配置改为允许动态调节的模式:
vddcore: regulator-vddcore {
compatible = "regulator-fixed";
regulator-name = "vddcore";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1350000>;
regulator-always-on;
regulator-boot-on;
// 添加以下属性支持动态调节(如果驱动支持)
regulator-allow-set-load;
regulator-allow-bypass;
};
4. 硬件验证
- 查阅STM32MP157D数据手册,确认800MHz所需的核心电压
- 用万用表测量VDD_CORE实际工作电压是否达到频率要求
- 检查PMIC/分立电源的电流供给能力是否足够
5. 调试技巧
- 查看内核日志:
dmesg | grep -E 'opp|cpufreq|vddcore'
- 检查OPP表是否加载成功:
cat /sys/kernel/debug/opp/opp_table
- 验证当前频率设置:
watch -n 1 "cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq"
可能的问题原因:
- OPP表中800MHz条目缺失或电压设置不正确
- 稳压器配置为固定模式,无法动态响应调频需求
- 实际供电电压无法满足800MHz要求,触发安全降频
- 硬件设计限制(如电源路径阻抗过大)
建议先尝试将稳压器的regulator-min-microvolt设置为OPP表要求的准确电压值(如1.35V),测试是否能正确获取800MHz。若仍不成功,需要检查硬件设计是否满足高频工作的电源完整性要求。
举报