全志Tina系统调压调频

1 模块功能介绍

​ 该模块主要负责CPU运行时的调频调压,达到节省功耗的目的。或者通过调整调频策略让CPU固定运行在某个频点,亦或者通过提高频率或者超频来完成某个功能需求(超频只能用来测试,不能用来量产产)。

2 DTS中的V-F表

​ 系统支持动态调频调压,则需要配置好V-F,即电压-频率对应关系,此表格需要大量测试此对应关系的稳定性后方可做产品量产。

2.1 DTS配置说明

 #### 2.1.1 芯片代号级配置,只要配置CPU使用那一份V-F表,在目录arch/arm/boot/dts/CHIP.dtsi,如V833为sun8iw19.dtsi
cpus {enable-method = "allwinner,sun8iw19p1";#address-cells = <1>;#size-cells = <0>;cpu0: cpu@0 {device_type = "cpu";compatible = "arm,cortex-a7";reg = <0x0>;enable-method = "psci";clocks = <&clk_pll_cpu>;clock-frequency = <1008000000>;clock-latency = <2000000>;/* if divide bin <&cpu_opp_l_table0 &cpu_opp_l_table1> */operating-points-v2 = <&cpu_opp_l_table0>;cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0 &SYS_SLEEP_0>;cooling-min-level = <5>;cooling-max-level = <0>;#cooling-cells = <2>; /* min followed by max */dynamic-power-coefficient = <150>;};......
}
  • 此SOC为单核,所以只有一个cpu0节点,节点中有一个属性operating-points-v2就是对V-F表的引用

    • operating-points-v2 = <&cpu_opp_l_table0>

      此dts节点中记录了系统可以动态调节的几个频点

2.2 板级DTS配置

​ 在Tina系统中的板级dts配置,device/config/chips/CHIP/configs/板级型号/linux/board.dts,内容如下:

cpu_opp_l_table0: opp_l_table0 {/* compatible = "operating-points-v2"; */compatible = "allwinner,opp_l_table0";opp_count = <6>;opp-shared;op00 {opp-hz = /bits/ 64 <600000000>;opp-microvolt = <900000>;axi-bus-divide-ratio = <3>;clock-latency-ns = <2000000>;};opp01 {opp-hz = /bits/ 64 <816000000>;opp-microvolt = <900000>;axi-bus-divide-ratio = <3>;clock-latency-ns = <2000000>;};opp02 {opp-hz = /bits/ 64 <912000000>;opp-microvolt = <900000>;axi-bus-divide-ratio = <3>;clock-latency-ns = <2000000>;};opp03 {opp-hz = /bits/ 64 <1008000000>;opp-microvolt = <900000>;axi-bus-divide-ratio = <3>;clock-latency-ns = <2000000>;};opp04 {opp-hz = /bits/ 64 <1104000000>;opp-microvolt = <1000000>;axi-bus-divide-ratio = <3>;clock-latency-ns = <2000000>;};
};    cpus {cpu@0 {cpu-supply = <&reg_dcdc3>;};
};
  • 此节点中记录了5个V-F电压频点,如需要增加频点则在opp04后面再增加即可,如增加12000MHz的频点:

    opp05 {opp-hz = /bits/ 64 <1200000000>;opp-microvolt = <1000000>;axi-bus-divide-ratio = <3>;clock-latency-ns = <2000000>;
    };
  • opp-hz : 为设置的频点,单位为HZ

  • opp-microvolt : 此频点对应的CPU电压

  • clock-latency-ns : 切换频率的延迟时间为2ms

  • cpu-supply : cpu接在pmu的哪路电压上

3 kernel选项配置

CPU Power Management  --->CPU Frequency scaling  --->[*] CPU Frequency scaling /*支持系统调频*/[*] CPU frequency time-in-state statisticsDefault CPUFreq governor (ondemand)  ---> /*该选项为选择系统启动后默认支持的调频策略*/-*-   'performance' governor< >   'powersave' governor /*此策略为系统以最小频率运行*/<*>   'userspace' governor for userspace frequency scaling /*user可以通过sysfs设置系统频率*/-*-   'ondemand' cpufreq policy governor  /*默认选择ondemand即系统动态调频*/< >   'conservative' cpufreq governor   /**/< >   'interactive' cpufreq policy governor*** CPU frequency scaling drivers ***<*>   Generic DT based cpufreq driver /*在Linux自带的cpufreq driver基础上修改来实现调频*/[ ]   SUNXI CPUFreq support           /*全志平台自己实现的cpufrq driver系统中只能存在一个cpufreq*/ [ ]   SUNXI PWM CPUFreq support< >   CPU frequency scaling driver for Freescale QorIQ SoCs
  • 目前linux 4.9支持5种调频策略,如下:

    • performance governor: 最高性能,系统直接用最高频率,不考虑耗电。

    • powersave governor : 最低性能,系统直接用最低频率,以节省功耗。

    • userspace governor : 通过sysfs,用用户自行设置系统运行频率。

    • ondemand policy governor : 带调频策略,定时检查负载,然后根据负载来调节频率。

      ​ 负载低的时候降低 CPU 频率,这样省电,负载高的时候提高CPU 频率, 增加性能.

    • conservative policy governo: 和ondemand类似,ondemand会以最高或者对低的频率运行为主,而conservative会根据系统

      ​ 负载渐进式调整,直到找到系统比较适合的频率,这样会比较频繁的切换运行频率,延迟会比

      ​ ondemand跟严重。

    • interactive policy governor : 一开始直接用最高频率,然后根据 CPU 负载慢慢降低。

4 自行增加的频点不支持

​ 可能自己增加的V-F表,增加的频率太高,系统未能跑到设置的频点,可能是clk驱动限制的最高频率设置,可查看clk驱动确认当前系统所支持的最高频率,

通过查看此文件:drivers/clk/sunxi/clk-CHIP_tbl.c(如sun8iw19):

struct sunxi_clk_factor_freq factor_pllcpu_tbl[] = {......PLLCPU(196,     0,     2,     1182000000U),PLLCPU(98,     0,     1,     1188000000U),PLLCPU(198,     0,     2,     1194000000U),PLLCPU(49,     0,     0,     1200000000U),PLLCPU(200,     0,     2,     1206000000U),PLLCPU(100,     0,     1,     1212000000U),PLLCPU(202,     0,     2,     1218000000U),PLLCPU(50,     0,     0,     1224000000U),PLLCPU(204,     0,     2,     1230000000U),PLLCPU(102,     0,     1,     1236000000U),PLLCPU(206,     0,     2,     1242000000U),PLLCPU(51,     0,     0,     1248000000U),PLLCPU(208,     0,     2,     1254000000U),PLLCPU(104,     0,     1,     1260000000U),PLLCPU(52,     0,     0,     1272000000U),PLLCPU(106,     0,     1,     1284000000U),PLLCPU(53,     0,     0,     1296000000U),/*PLLCPU(108,     0,     1,     1308000000U),PLLCPU(54,     0,     0,     1320000000U),PLLCPU(110,     0,     1,     1332000000U),PLLCPU(55,     0,     0,     1344000000U),PLLCPU(112,     0,     1,     1356000000U),PLLCPU(56,     0,     0,     1368000000U),PLLCPU(114,     0,     1,     1380000000U),PLLCPU(57,     0,     0,     1392000000U),PLLCPU(116,     0,     1,     1404000000U),PLLCPU(58,     0,     0,     1416000000U),PLLCPU(118,     0,     1,     1428000000U),......*/
}
  • factor_pllcpu_tbl :此数组列出了当前cpu支持的频率点,可以看到最高支持1296MH在
  • 如需要支持更高的频率,则需要在注释掉的频点放开。

##4 源码结构

drivers/cpufreq/
├── cpufreq-dt.c
└── cpufreq-dt-platdev.c

​ 这里只列出与cpufreq driver相关的代码:

  • cpufreq-dt.c : 为cpufreq driver,主要实现调频调压功能
  • cpufreq-dt-platdev.c : 注册一个cpufreq platform dev

5 调频sysfs节点说明

以下节点都位于此节点下:/sys/devices/system/cpu/cpufreq/policy0:

sysfs节点 权限 说明
affected_cpus R 只显示online受此控制的CPU
related_cpus R 显示online/offline受此控制的CPU
cpuinfo_cur_freq R 当前系统运行频率
cpuinfo_max_freq R 系统支持的最大运行频率
cpuinfo_min_freq R 系统支持的最小运行频率
cpuinfo_transition_latency R 切换频率的延迟时间
scaling_available_frequencies R 系统支持的频率列表
scaling_available_governors R 系统支持的调频策略
scaling_cur_freq R 系统当前设置的频率,可能会和cpuinfo_cur_freq,如此值高于系统限制的频率时,则cpuinfo_cur_freq为最高频率值
scaling_driver R 调频驱动的名字
scaling_governor R/W 调频策略
scaling_max_freq R/W 软件最大调频频率,设置此值后,会限制系统的最大频率
scaling_min_freq R/W 软件最小调频评率,设置此值后,会限制系统的最小频率
scaling_setspeed R/W 用于userspace governor策略时,用户可对节点写入需要的频率,进行系统调频

6 获取电压频率表

6.1 挂载debugfs节点

mount -t debugfs none /sys/kernel/debug/

6.2 使用linux原生节点查看

  • 查看系统支持的所有的频率

     cat /sys/kernel/debug/opp/cpu0/opp*/rate_hz
    1008000000
    1104000000
    1200000000
    1400000000
    1500000000
    1800000000
    600000000
    816000000
    912000000
    
  • 查看V-F对应关系

    cat /sys/kernel/debug/opp/cpu0/opp*/u_volt_target
    900000
    1000000
    1000000
    1200000
    1200000
    1200000
    900000
    900000
    900000
    

全志Tina系统调频调压相关推荐

  1. 调频调压-CPUFREQ

    1.模块功能介绍 CPUFREQ负责系统运行过程中CPU频率和电压的动态调整. 1.2 相关术语 Sunxi        指Allwinner 的一系列sOC硬件平台. DVFS        动态 ...

  2. LinuxTina动态调压调频配置与实现

    动态调压调频功能配置菜单: 修改后,对应的.config DEFAULT 策略发生变化: 默认原来的策略是: 或者直接串口写入 echo performance >/sys/devices/sy ...

  3. 全志D1s/F133学习笔记(2)——MangoPi-MQ(芒果派麻雀)Tina系统编译烧录

    文章目录 一.SDK和资料: 二.SDK结构: 三.环境配置 四.打补丁匹配麻雀开发板 补丁修改文件分析: 五.配置和编译 六.烧录 七.上电运行 八.补丁包修改 1.原因分析 2.修改方法 3.编译 ...

  4. 三级无刷交流发电机matlab模型,三级无刷交流发电机调压系统的建模及其仿真分析...

    一.引言本文引用地址:http://www.eepw.com.cn/article/177221.htm 三级式无刷交流同步发电机由副励磁机.励磁机和主发电机组成.主发电机为旋转磁极式同步发电机:交流 ...

  5. 全志Tina Linux 系统裁剪 boot0裁剪 uboot裁剪 内核裁剪 文件系统裁剪 C库裁剪 文件系统压缩

    文章目录 1 概述 2 Tina系统裁剪简介 2.1 boot0裁剪 2.2 uboot裁剪 2.3 内核裁剪 2.3.1 删除不使用的功能 2.3.2 删除不使用的驱动 2.3.3 修改内核源代码 ...

  6. 全志平台Android系统的设备烧录Tina系统失败问题解决方法

    全志平台Android系统的设备烧录Tina系统失败问题解决方法 [适用范围] Tina 通用平台 [问题现象] 开发过程中会有开发板Android系统.Tina互刷的问题.实际操作中,经常会碰到烧录 ...

  7. 【全志T113-S3_100ask】7-编译Tina系统初体验

    [全志T113-S3_100ask]7-编译Tina系统初体验 背景 (一)SDK准备 (二)环境准备 (三)编译系统 1.初次编译系统 2.进阶编译操作 (四)烧录系统 背景 7月28日,百问网官方 ...

  8. 微电网分布式电源逆变器DROOP控制二次调频模型,加入二次控制实现二次调频控制,及二次调压控制

    微电网分布式电源逆变器DROOP控制二次调频模型,加入二次控制实现二次调频控制,及二次调压控制,程序可实现上图功能,工况有所改变. 需要matlab2021A版本 ID:545596735172708 ...

  9. 三级无刷交流发电机matlab模型,三级无刷交流发电机调压系统的建模及其仿真

    一.前 言 三级式无刷交流同步发电机由副励磁机.励磁机和主发电机组成.主发电机为旋转磁极式同步发电机:交流励磁机是旋转电枢式同步发电机:副励磁机为旋转磁极式的永磁同步发电机.交流励磁机转子上装有整流器 ...

最新文章

  1. Prim算法(最小生成树;例题:nyoj38)
  2. 算法导论9.2-3习题解答(寻找第i小的数)
  3. mysql和mongodb替换字段中某字符
  4. python如何定义类_Python中类的定义、继承及使用对象实例详解
  5. 一月:你今年还回家过年吗?
  6. SVN中的trunk branches tags
  7. magento 首页添加最新产品 Display new products on the home page
  8. Crackme014
  9. Java SPI机制简介
  10. 复盘模型_如何运用MT4软件进行复盘,提高水平
  11. 计算机硬盘格式化了如何恢复出厂设置,怎么把电脑格式化?
  12. iOS 应用崩溃日志分析
  13. 不动点迭代 开平方 Excel演示
  14. vue3+jsx+antd 的双向数据绑定、事件绑定、变量绑定方法
  15. Matlab渐变颜色图(colormap)生成/编辑器—ColorMap
  16. 汇编:寄存器的寻址方式
  17. 【树莓派智能门锁】电机锁控制电源测试【2】
  18. Unity_触摸屏_实现360序列帧
  19. Hive 3.x详细笔记
  20. 【CF375C】Circling Round Treasures

热门文章

  1. 主叫无回铃音情况分析
  2. 虚拟机vmware设置桥接模式上网
  3. Linux高级编程——网络通信
  4. 小白笔记LM1117
  5. hdu 2124 (赤裸裸的贪心)
  6. SWUST OJ 1052: 输出利用先序遍历创建的二叉树中的指定结点的双亲结点
  7. 《学VC 编游戏》重点算法解疑·走四方
  8. Hadoop集群间文件拷贝
  9. oracle 分隔符行转列,Oracle 中使用 Regexp_substr 和 Connect By 来根据分隔符进行列转行操作示例...
  10. JVM即时编译(JIT)