Rockchip RK3588 kernel dts解析之电源模块
Rockchip RK3588 kernel dts解析之电源模块
文章目录
- Rockchip RK3588 kernel dts解析之电源模块
-
- RK3588搭配的电源方案有2种
- 注意单PIMC核双PMIC的软件不能兼容
- 单pmic方案
- 双pmic方案
RK3588搭配的电源方案有2种
- 单PMIC方案:1个PMIC(RK806)+3个DCDC(RK860)
- 双PMIC方案:2个PMIC(RK806)
注意单PIMC核双PMIC的软件不能兼容
单PIMC核双PMIC的软件不能兼容,固件不能互烧,否则可能会烧坏芯片。RK的代码中有做了拦截,如果软件烧错会无法开机,并且在uboot阶段有如下提示log:
spi2: RK806: 2HW single pmic, the firmware dual pmic(0xe8)!
单pmic方案
- 硬件设计方案可以参考RK的硬件参考设计
- 对应的参考完成dts参考:rk3588-evb7-lp4-v10.dts
- 软件dts的电源配置:rk3588-rk806-single.dtsi
PMIC(RK806)的配置是在:rk3588-rk806-single.dtsi中,如下:
&spi2 { //RK3588与RK806通信是才用spi接口status = "okay";//spi的配置,不可修改assigned-clocks = ;assigned-clock-rates = ;pinctrl-names = "default";pinctrl-0 = ;num-cs = ;//rk806的配置rk806single: rk806single@0 {compatible = "rockchip,rk806";spi-max-frequency = ;reg = ;//配置中断脚interrupt-parent = ;interrupts = ;pinctrl-names = "default", "pmic-power-off";pinctrl-0 = , , , ;pinctrl-1 = ;/* 2800mv-3500mv */low_voltage_threshold = ;/* 2700mv-3400mv */shutdown_voltage_threshold = ;/* 140 160 */shutdown_temperture_threshold = ;hotdie_temperture_threshold = ;/* 0: restart PMU; * 1: reset all the power off reset registers, * forcing the state to switch to ACTIVE mode; * 2: Reset all the power off reset registers, * forcing the state to switch to ACTIVE mode, * and simultaneously pull down the RESETB PIN for 5mS before releasing */pmic-reset-func = ;//下面是pmic rk806需要依赖的外部电源:vcc5v0_sys、vcc_2v0_pldo_s3、vcc_1v1_nldo_s3,注意这三个电源的dts配置需要在最前面,否则可能出现开机的时候由于依赖的电源初始化太慢导致电源初始化异常,表现出来的问题是cpu的变频dvfs没有初始化成功,即cat /d//opp/opp_summary中没有cpu的频率信息。vcc1-supply = ;vcc2-supply = ;vcc3-supply = ;vcc4-supply = ;vcc5-supply = ;vcc6-supply = ;vcc7-supply = ;vcc8-supply = ;vcc9-supply = ;vcc10-supply = ;vcc11-supply = ;vcc12-supply = ;vcc13-supply = ;vcc14-supply = ;vcca-supply = ;//项目中若没有用到pwerkey或者gpio功能,可以在 dts 里增加pwrkey、gpio 节点,并且显式指明状态为 status = "disabled",这样就不会使能驱动,但是开机信息会有错误 log 报出,可以忽略。pwrkey {status = "okay";};pinctrl_rk806: pinctrl_rk806 {gpio-controller;#gpio-cells = ;rk806_dvs1_null: rk806_dvs1_null {pins = "gpio_pwrctrl2";function = "pin_fun0";};rk806_dvs1_slp: rk806_dvs1_slp {pins = "gpio_pwrctrl1";function = "pin_fun1";};rk806_dvs1_pwrdn: rk806_dvs1_pwrdn {pins = "gpio_pwrctrl1";function = "pin_fun2";};rk806_dvs1_rst: rk806_dvs1_rst {pins = "gpio_pwrctrl1";function = "pin_fun3";};rk806_dvs2_null: rk806_dvs2_null {pins = "gpio_pwrctrl2";function = "pin_fun0";};rk806_dvs2_slp: rk806_dvs2_slp {pins = "gpio_pwrctrl2";function = "pin_fun1";};rk806_dvs2_pwrdn: rk806_dvs2_pwrdn {pins = "gpio_pwrctrl2";function = "pin_fun2";};rk806_dvs2_rst: rk806_dvs2_rst {pins = "gpio_pwrctrl2";function = "pin_fun3";};rk806_dvs2_dvs: rk806_dvs2_dvs {pins = "gpio_pwrctrl2";function = "pin_fun4";};rk806_dvs2_gpio: rk806_dvs2_gpio {pins = "gpio_pwrctrl2";function = "pin_fun5";};rk806_dvs3_null: rk806_dvs3_null {pins = "gpio_pwrctrl3";function = "pin_fun0";};rk806_dvs3_slp: rk806_dvs3_slp {pins = "gpio_pwrctrl3";function = "pin_fun1";};rk806_dvs3_pwrdn: rk806_dvs3_pwrdn {pins = "gpio_pwrctrl3";function = "pin_fun2";};rk806_dvs3_rst: rk806_dvs3_rst {pins = "gpio_pwrctrl3";function = "pin_fun3";};rk806_dvs3_dvs: rk806_dvs3_dvs {pins = "gpio_pwrctrl3";function = "pin_fun4";};rk806_dvs3_gpio: rk806_dvs3_gpio {pins = "gpio_pwrctrl3";function = "pin_fun5";};};//下面是根据硬件图进行对应的软件配置,以硬件设计一一对应regulators {//给gpu供电的配置,对应的硬件是RK806的BUCK1vdd_gpu_s0: vdd_gpu_mem_s0: DCDC_REG1 { regulator-always-on;regulator-boot-on;regulator-min-microvolt = ;regulator-max-microvolt = ;regulator-ramp-delay = ;regulator-name = "vdd_gpu_s0";regulator-state-mem {regulator-off-in-suspend;};};........//avcc_1v8_s0供电的配置,对应的硬件是RK806的PLDO1avcc_1v8_s0: PLDO_REG1 {regulator-always-on;regulator-boot-on;regulator-min-microvolt = ;regulator-max-microvolt = ;regulator-name = "avcc_1v8_s0";regulator-state-mem {regulator-off-in-suspend;};};........//vdd_0v75_s3供电的配置,对应的硬件是RK806的NLDO1vdd_0v75_s3: NLDO_REG1 {regulator-always-on;regulator-boot-on;regulator-min-microvolt = ;regulator-max-microvolt = ;regulator-name = "vdd_0v75_s3";regulator-state-mem {regulator-on-in-suspend;regulator-suspend-microvolt = ;};};........};};};
3个DCDC(RK860)的配置在:rk3588-evb7-lp4-v10.dtsi中,如下:
//I2C0上面挂这1一个RK860-2和一个RK860-3,分别给大核cpu4-5和大核cpu6-7供电&i2c0 {status = "okay";pinctrl-names = "default";pinctrl-0 = ;vdd_cpu_big0_s0: vdd_cpu_big0_mem_s0: rk8602@42 {compatible = "rockchip,rk8602";reg = ;vin-supply = ;regulator-compatible = "rk860x-reg";regulator-name = "vdd_cpu_big0_s0";regulator-min-microvolt = ;regulator-max-microvolt = ;regulator-ramp-delay = ;rockchip,suspend-voltage-selector = ;regulator-boot-on;regulator-always-on;regulator-state-mem {regulator-off-in-suspend;};};vdd_cpu_big1_s0: vdd_cpu_big1_mem_s0: rk8603@43 {compatible = "rockchip,rk8603";reg = ;vin-supply = ;regulator-compatible = "rk860x-reg";regulator-name = "vdd_cpu_big1_s0";regulator-min-microvolt = ;regulator-max-microvolt = ;regulator-ramp-delay = ;rockchip,suspend-voltage-selector = ;regulator-boot-on;regulator-always-on;regulator-state-mem {regulator-off-in-suspend;};};};//I2C1上面挂这1一个RK860-2给NPU供电&i2c1 {status = "okay";pinctrl-names = "default";pinctrl-0 = ;vdd_npu_s0: vdd_npu_mem_s0: rk8602@42 {compatible = "rockchip,rk8602";reg = ;vin-supply = ;regulator-compatible = "rk860x-reg";regulator-name = "vdd_npu_s0";regulator-min-microvolt = ;regulator-max-microvolt = ;regulator-ramp-delay = ;rockchip,suspend-voltage-selector = ;regulator-boot-on;regulator-always-on;regulator-state-mem {regulator-off-in-suspend;};};};
外部电源配置
外部电源是指pmic依赖的电源,在dts配置的时候这些电源的配置需要在pmic的配置前面,这样开机是才能正常初始化,否则可能出现CPU电源异常的问题,表现为CPU变频无法正常使用,cat /d/opp/opp_summary里面没有cpu的频率信息。
这部分配置在rk3588-evb.dtsi
和rk3588-evb7-lp4.dtsi
中:
rk3588-evb.dtsi//对应硬件图上面12V DC输入电源vcc12v_dcin: vcc12v-dcin {compatible = "regulator-fixed";regulator-name = "vcc12v_dcin";regulator-always-on;regulator-boot-on;regulator-min-microvolt = <12000000>;regulator-max-microvolt = <12000000>;};//对应硬件图上面5V 系统电源vcc5v0_sys: vcc5v0-sys {compatible = "regulator-fixed";regulator-name = "vcc5v0_sys";regulator-always-on;regulator-boot-on;regulator-min-microvolt = <5000000>;regulator-max-microvolt = <5000000>;vin-supply = <&vcc12v_dcin>;};
rk3588-evb7-lp4.dtsvcc_1v1_nldo_s3: vcc-1v1-nldo-s3 {compatible = "regulator-fixed";regulator-name = "vcc_1v1_nldo_s3";regulator-always-on;regulator-boot-on;regulator-min-microvolt = <1100000>;regulator-max-microvolt = <1100000>;vin-supply = <&vcc5v0_sys>;};
双pmic方案
- 硬件设计方案可以参考RK的RK3588 EVB1的硬件参考设计
- 对应的参考完成dts参考:rk3588-evb1-lp4-v10.dts
- 软件dts的电源配置:
rk3588-rk806-dual.dtsi (针对RK3588芯片)
rk3588s-rk806-dual.dtsi (针对RK3588芯片)
2个PMIC(RK806)的配置在rk3588-rk806-dual.dtsi中如下:
&spi2 {//RK3588与RK806通信是才用spi接口//spi配置,不可修改 status = "okay"; assigned-clocks = ; assigned-clock-rates = ; num-cs = ; rk806master@0 { compatible = "rockchip,rk806"; spi-max-frequency = ; reg = ;//配置power脚中断 interrupt-parent = ; interrupts = ; /* 0: restart PMU; * 1: reset all the power off reset registers, * forcing the state to switch to ACTIVE mode; * 2: Reset all the power off reset registers, * forcing the state to switch to ACTIVE mode, * and simultaneously pull down the RESETB PIN for 5mS before releasing */ pmic-reset-func = ; vcc1-supply = ; vcc2-supply = ; ................. vcca-supply = ; regulators { vdd_gpu_s0: DCDC_REG1 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = ; regulator-max-microvolt = ; regulator-ramp-delay = ; regulator-name = "vdd_gpu_s0"; regulator-state-mem { regulator-off-in-suspend; }; }; vdd_npu_s0: DCDC_REG2 { ................. }; .................};};rk806slave@1 { compatible = "rockchip,rk806"; spi-max-frequency = ; reg = ; interrupt-parent = ; interrupts = ; /* 0: restart PMU; * 1: reset all the power off reset registers, * forcing the state to switch to ACTIVE mode; * 2: Reset all the power off reset registers, * forcing the state to switch to ACTIVE mode, * and simultaneously pull down the RESETB PIN for 5mS before releasing */ pmic-reset-func = ; vcc1-supply = ; vcc2-supply = ; ................. vcca-supply = ; pwrkey { status = "disabled"; }; regulators { vdd_cpu_big1_s0: DCDC_REG1 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = ; regulator-max-microvolt = ; regulator-ramp-delay = ; regulator-name = "vdd_cpu_big1_s0"; regulator-state-mem { regulator-off-in-suspend; }; }; vdd_cpu_big0_s0: DCDC_REG2 { ................. }; ................. };};};
上一篇:Rockchip RK3588 kernel dts解析之显示模块
下一篇:Rockchip RK3588 kernel dts解析之USB模块