ST意法半导体
直播中

名士流

9年用户 984经验值
私信 关注
[问答]

求助,关于STM32MP157D的CPU频率问题求解

我使用的Linux版本是:6.1.28,我的电源管理是分立式原件,"VDD_CORE"实际是1.212V,设备树中是这样的:
vddcore: regulator-vddcore {    compatible = "regulator-fixed";    regulator-name = "vddcore";    regulator-min-microvolt = <1200000>;    regulator-max-microvolt = <1350000>;    regulator-always-on;    regulator-boot-on;};如果按照上面这样设置我的/sys/devices/system/cpu/cpufreq/下面就是空的,但是我把"regulator-min-microvolt = <1200000>;"中的1200000改为1350000就正常了,这是为什么?

回帖(2)

醉清歌

2025-3-3 11:57:12

根据你的描述,问题可能出在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"


可能的问题原因:



  1. OPP表中800MHz条目缺失或电压设置不正确

  2. 稳压器配置为固定模式,无法动态响应调频需求

  3. 实际供电电压无法满足800MHz要求,触发安全降频

  4. 硬件设计限制(如电源路径阻抗过大)


建议先尝试将稳压器的regulator-min-microvolt设置为OPP表要求的准确电压值(如1.35V),测试是否能正确获取800MHz。若仍不成功,需要检查硬件设计是否满足高频工作的电源完整性要求。

举报

张珍岚

2025-3-14 14:44:31
在Linux系统中,/sys/devices/system/cpu/cpufreq/目录包含了CPU频率相关的文件和信息,比如可用的频率、当前频率等。如果这个目录下是空的,通常意味着CPU频率调节(CPUFreq)子系统没有正确识别或配置。看看是不是电压配置不匹配。当内核检测到实际电压与设备树中定义的电压范围不一致时,它可能采取保守的措施,比如不启用CPUFreq,以避免可能的硬件损坏或不稳定。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分