Rockchip RK3588 kernel dts解析之电源模块_瑞芯微 rk806-程序员宅基地

技术标签: rk806  android  linux  RK3588 Kernel DTS解析  RK3588电源  RK3588  

Rockchip RK3588 kernel dts解析之电源模块

RK3588搭配的电源方案有2种

  • 单PMIC方案:1个PMIC(RK806)+3个DCDC(RK860)
  • 双PMIC方案:2个PMIC(RK806)

注意单PIMC核双PMIC的软件不能兼容

单PIMC核双PMIC的软件不能兼容,固件不能互烧,否则可能会烧坏芯片。RK的代码中有做了拦截,如果软件烧错会无法开机,并且在uboot阶段有如下提示log:

spi2: RK806: 2
HW 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 = <&cru CLK_SPI2>;
	assigned-clock-rates = <200000000>;
	pinctrl-names = "default";
	pinctrl-0 = <&spi2m2_cs0 &spi2m2_pins>;
	num-cs = <1>;
//rk806的配置
	rk806single: rk806single@0 {
		compatible = "rockchip,rk806";
		spi-max-frequency = <1000000>;
		reg = <0x0>;

//配置中断脚
		interrupt-parent = <&gpio0>;
		interrupts = <7 IRQ_TYPE_LEVEL_LOW>;

		pinctrl-names = "default", "pmic-power-off";
		pinctrl-0 = <&pmic_pins>, <&rk806_dvs1_null>, <&rk806_dvs2_null>, <&rk806_dvs3_null>;
		pinctrl-1 = <&rk806_dvs1_pwrdn>;

		/* 2800mv-3500mv */
		low_voltage_threshold = <3000>;
		/* 2700mv-3400mv */
		shutdown_voltage_threshold = <2700>;
		/* 140 160 */
		shutdown_temperture_threshold = <160>;
		hotdie_temperture_threshold = <115>;

		/* 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 = <1>;
		
		//下面是pmic rk806需要依赖的外部电源:vcc5v0_sys、vcc_2v0_pldo_s3、vcc_1v1_nldo_s3,注意这三个电源的dts配置需要在最前面,否则可能出现开机的时候由于依赖的电源初始化太慢导致电源初始化异常,表现出来的问题是cpu的变频dvfs没有初始化成功,即cat /d//opp/opp_summary中没有cpu的频率信息。
		vcc1-supply = <&vcc5v0_sys>;
		vcc2-supply = <&vcc5v0_sys>;
		vcc3-supply = <&vcc5v0_sys>;
		vcc4-supply = <&vcc5v0_sys>;
		vcc5-supply = <&vcc5v0_sys>;
		vcc6-supply = <&vcc5v0_sys>;
		vcc7-supply = <&vcc5v0_sys>;
		vcc8-supply = <&vcc5v0_sys>;
		vcc9-supply = <&vcc5v0_sys>;
		vcc10-supply = <&vcc5v0_sys>;
		vcc11-supply = <&vcc_2v0_pldo_s3>;
		vcc12-supply = <&vcc5v0_sys>;
		vcc13-supply = <&vcc_1v1_nldo_s3>;
		vcc14-supply = <&vcc_1v1_nldo_s3>;
		vcca-supply = <&vcc5v0_sys>;
//项目中若没有用到pwerkey或者gpio功能,可以在 dts 里增加pwrkey、gpio 节点,并且显式指明状态为 status = "disabled",这样就不会使能驱动,但是开机信息会有错误 log 报出,可以忽略。
		pwrkey {
			status = "okay";
		};

		pinctrl_rk806: pinctrl_rk806 {
			gpio-controller;
			#gpio-cells = <2>;

			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的BUCK1
			vdd_gpu_s0: vdd_gpu_mem_s0: DCDC_REG1 { 
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <550000>;
				regulator-max-microvolt = <950000>;
				regulator-ramp-delay = <12500>;
				regulator-name = "vdd_gpu_s0";
				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};

	........
	//avcc_1v8_s0供电的配置,对应的硬件是RK806的PLDO1	
			avcc_1v8_s0: PLDO_REG1 {
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-name = "avcc_1v8_s0";
				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};

		........
//vdd_0v75_s3供电的配置,对应的硬件是RK806的NLDO1	
			vdd_0v75_s3: NLDO_REG1 {
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <750000>;
				regulator-max-microvolt = <750000>;
				regulator-name = "vdd_0v75_s3";
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <750000>;
				};
			};

		........
		};
	};
};

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 = <&i2c0m2_xfer>;

	vdd_cpu_big0_s0: vdd_cpu_big0_mem_s0: rk8602@42 {
		compatible = "rockchip,rk8602";
		reg = <0x42>;
		vin-supply = <&vcc5v0_sys>;
		regulator-compatible = "rk860x-reg";
		regulator-name = "vdd_cpu_big0_s0";
		regulator-min-microvolt = <550000>;
		regulator-max-microvolt = <1050000>;
		regulator-ramp-delay = <2300>;
		rockchip,suspend-voltage-selector = <1>;
		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 = <0x43>;
		vin-supply = <&vcc5v0_sys>;
		regulator-compatible = "rk860x-reg";
		regulator-name = "vdd_cpu_big1_s0";
		regulator-min-microvolt = <550000>;
		regulator-max-microvolt = <1050000>;
		regulator-ramp-delay = <2300>;
		rockchip,suspend-voltage-selector = <1>;
		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 = <&i2c1m2_xfer>;

	vdd_npu_s0: vdd_npu_mem_s0: rk8602@42 {
		compatible = "rockchip,rk8602";
		reg = <0x42>;
		vin-supply = <&vcc5v0_sys>;
		regulator-compatible = "rk860x-reg";
		regulator-name = "vdd_npu_s0";
		regulator-min-microvolt = <550000>;
		regulator-max-microvolt = <950000>;
		regulator-ramp-delay = <2300>;
		rockchip,suspend-voltage-selector = <1>;
		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.dtsirk3588-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.dts
	vcc_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 = <&cru CLK_SPI2>;
        assigned-clock-rates = <200000000>;
        num-cs = <2>;
        rk806master@0 {
                compatible = "rockchip,rk806";
                spi-max-frequency = <1000000>;
                reg = <0x0>;
	//配置power脚中断
                interrupt-parent = <&gpio0>;
                interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
                /* 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 = <1>;

                vcc1-supply = <&vcc5v0_sys>;
                vcc2-supply = <&vcc5v0_sys>;
                .................
                vcca-supply = <&vcc5v0_sys>;
                regulators {
                        vdd_gpu_s0: DCDC_REG1 {
                                regulator-always-on;
                                regulator-boot-on;
                                regulator-min-microvolt = <550000>;
                                regulator-max-microvolt = <950000>;
                                regulator-ramp-delay = <12500>;
                                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 = <1000000>;
                reg = <0x01>;

                interrupt-parent = <&gpio0>;
                interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
                /* 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 = <1>;

                vcc1-supply = <&vcc5v0_sys>;
                vcc2-supply = <&vcc5v0_sys>;
                .................
                vcca-supply = <&vcc5v0_sys>;

                pwrkey {
                        status = "disabled";
                };
                regulators {
                        vdd_cpu_big1_s0: DCDC_REG1 {
                                regulator-always-on;
                                regulator-boot-on;
                                regulator-min-microvolt = <550000>;
                                regulator-max-microvolt = <950000>;
                                regulator-ramp-delay = <12500>;
                                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模块

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43245753/article/details/123496232

智能推荐

博鳌亚洲论坛2023年会 国研政情·谋定论道-桑切斯:中欧合作行动-程序员宅基地

文章浏览阅读326次,点赞8次,收藏8次。博鳌亚洲论坛2023年会 国研政情·谋定论道-桑切斯:中欧合作行动

史上最全的Android面试题集锦,知乎上已获万赞_android 面试题库 知乎-程序员宅基地

文章浏览阅读99次。背景知乎客户端中有一个自己维护的 Hybrid 框架,在此基础上开发了一些 Hybrid 页面,当需要前端或者客户端开发接口的时候,就涉及到联调的问题。和一般的 前端 <=> 服务端,或者 客户端 <=> 服务端 类似,前端 <=> 客户端也会出现联调的各种问题,但是往往 Hybrid 开发相关的调试工具并不是那么完备。由于在 Hybrid 里面,前端和客户端联系是很紧密的,假如一个人既熟悉前端开发又熟悉客户端开发,调试是很容易的,但是现实一般是可能客户端开发并不是_android 面试题库 知乎

SpringBoot多模块项目打包_spingboot添加多个启动项目分别打包-程序员宅基地

文章浏览阅读269次。SpringBoot多模块项目打包_spingboot添加多个启动项目分别打包

【微电网优化】基于matlab YALMIP求解微网(光伏+风电+蓄电池+微电网+柴油机)优化调度问题【含Matlab源码 2266期】_matlab虚拟电厂调度优化-程序员宅基地

文章浏览阅读596次。YALMIP求解微网(光伏+风电+蓄电池+微电网+柴油机)优化调度问题完整代码,直接运行,适合小白!可提供运行操作视频!_matlab虚拟电厂调度优化

vue3 中使用el-dropdown时,slot报错`slot` attributes are deprecated_vue3 `slot` attributes are deprecated.-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏4次。在VUE3中使用el-dropdown时,出现了下面的报错是因为vue 3.x 增加了v-slot的指令,去掉了原来的slot,slot-scope属性。el-dropdown-menu标签外面加上如下图:<el-dropdown> <span class="el-dropdown-link"> 下拉菜单<i class="el-icon-arrow-down el-icon--right"></i> </span>_vue3 `slot` attributes are deprecated.

ioc和di的关系-程序员宅基地

文章浏览阅读6.5k次,点赞6次,收藏9次。 刚进入spring的时候,看见这两个词一阵迷茫,控制反转不知道转的是啥,依赖注入也不知道注入的啥。有的人说这两个是一个,有的说di是ioc的实现,我就说说我的理解。 从getter和setter开始 从开始学习mvc设计模式,或者是jsp异或是框架,必然会有JavaBean或者其他类似的概念出现。getter和setter就是JavaBean中的..._ioc和di的关系

随便推点

7年点工,从为娶媳妇开始软件测试,到最后拍领导桌子甩头辞职···_软件测试纯点工-程序员宅基地

文章浏览阅读274次。7年的点工测试,薪资从1800到4500再到15K,为了让媳妇过得更好,决定来学自动化,实现买买买自由的初步小目标。_软件测试纯点工

记录MEMORY_MANAGEMENT蓝屏解决过程_ntoskrnl.exe memory_management-程序员宅基地

文章浏览阅读3.9w次,点赞10次,收藏45次。MEMORY_MANAGEMENT蓝屏解决过程问题描述win10,1909版本,一个月内蓝屏两至三次,都是在空闲时蓝屏,提示MEMORY_MANAGEMENT仅安装火绒,内存4+16(crucial,2666,后配的)解决过程首先我检查了下硬件,内存和硬盘没发现问题另排除病毒使用Debugging tools查看DMP文件,发现是由于ntoskrnl.exe导致命令提示符下执行chkdsk c: /f,重启修复c盘原因分析引用1:ntoskrnl.exe 是 Windows 操作系统的_ntoskrnl.exe memory_management

java开发工具包jdk包括哪些_java的工具包有多少兆代码-程序员宅基地

文章浏览阅读679次。害怕干不过SpringBoot?莫慌,我送你套神级pdf文档随着 Spring Boot 使用越来越广泛,Spring Boot 已经成为 Java 程序员面试的知识点,很多同学对 Spring Boot 理解不是那么深刻,经常就会被几个连环追问就给干趴下了!今天小编就给大家整理了全套SpringBoot“神级PDF文档”:面试篇:35常见知识点、21道必刷题、10个高频解析题知识脑图篇:综合解析SpringBoot知识大全预览进阶学习必备篇:《SpringBoot学习教程》、《深入_java的工具包有多少兆代码

java基础案例教程黑马程序员案例答案,真香_springboot黑马程序员课后答案-程序员宅基地

文章浏览阅读2.3k次。掌握核心知识1、90%几率面试被问,吃透原理,面试不慌(Spring原理)2、大厂必问Redis,赶紧码起来(Redis核心原理)3、MySQL从入门到实战都在这篇,面试笑谈优化当然核心知识不止这三点,这只是一部分吃透源码1、面试源码有捷径,Spring源码将无所畏惧(Spring源码解析)2、金三银四面试必问,MyBatis二级缓存揭秘3、面试加分课,Spring MVC源码将无所畏惧实战训练1、受用终生的Redis实战场景2、面试加分项(Spring Boot实战_springboot黑马程序员课后答案

如何完全删除解压版mysql_Mysql Window 解压版卸载-程序员宅基地

文章浏览阅读690次。windows如何彻底卸载mysql如何彻底删除mysql1.首先在windows服务中将mysql服务删掉,使用命令 sc delete mysql2.在控制面板中卸载掉mysql。3.清理mysql安装目录的ini文件。4.清理注册表:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL 目录删除..._windows怎么卸载解压版的mysql

linux安装mariadb数据库_linux a安装mariadb-程序员宅基地

文章浏览阅读1.5k次。1. 在linux系统安装mariadb数据库命令:yum install mariadb-server -- 安装mariadb数据库如果安装失败执行此命令:yum clean all 2. 确认下载:3. 安装成功提示:4. 数据库命令: 1. 启动命令 [root@localhost src]# systemctl start mariadb 2. 重启命令 [root@localhost src]# ..._linux a安装mariadb

推荐文章

热门文章

相关标签