R36Plus Linux Device Tree开发记录

R36Plus Linux Device Tree开发记录

关于CPU的相关控制

频率控制部分

以下为cpu参数和频率表,通过修改或者新增opp节点可以实现对soc进行超频等操作,R36Plus搭载的RK3326 Soc官方预设最高频率只有1.296Ghz,远达不到官方宣称的1.5Ghz频率。为此,我们可以自行提高电压对Soc进行超频,经过实测,1.512Ghz是1.35V(芯片手册中允许的最大设计电压,超过可能会损坏硬件)下能达到的最高频率,但在部分系统中可能并不稳定,目前仅在ArkOS中可以正常运行这一频率。

cpu0-opp-table {
		compatible = "operating-points-v2";
		opp-shared;
		rockchip,temp-hysteresis = <0x1388>;
		rockchip,low-temp = <0x00>;
		rockchip,low-temp-min-volt = <0xf4240>;
		rockchip,low-temp-adjust-volt = <0x00 0x5e8 0xc350>;
		clocks = <0x02 0x01>;
		rockchip,avs-scale = <0x04>;
		rockchip,max-volt = <0x149970>;
		rockchip,evb-irdrop = <0x61a8>;
		nvmem-cells = <0x07 0x08>;
		nvmem-cell-names = "cpu_leakage\0performance";
		rockchip,bin-scaling-sel = <0x00 0x0d 0x01 0x0d>;
		rockchip,pvtm-voltage-sel = <0x00 0xc350 0x00 0xc351 0xd2f0 0x01 0xd2f1 0xea60 0x02 0xea61 0x1869f 0x03>;
		rockchip,pvtm-freq = <0x639c0>;
		rockchip,pvtm-volt = <0xf4240>;
		rockchip,pvtm-ch = <0x00 0x00>;
		rockchip,pvtm-sample-time = <0x3e8>;
		rockchip,pvtm-number = <0x0a>;
		rockchip,pvtm-error = <0x3e8>;
		rockchip,pvtm-ref-temp = <0x28>;
		rockchip,pvtm-temp-prop = <0xffffffc8 0xffffffc8>;
		rockchip,thermal-zone = "soc-thermal";
		rockchip,avs = <0x01>;
		phandle = <0x03>;

		opp-408000000 {
			opp-hz = <0x00 0x18519600>;
			opp-microvolt = <0xe7ef0 0xe7ef0 0x149970>;
			opp-microvolt-L0 = <0xe7ef0 0xe7ef0 0x149970>;
			opp-microvolt-L1 = <0xe7ef0 0xe7ef0 0x149970>;
			opp-microvolt-L2 = <0xe7ef0 0xe7ef0 0x149970>;
			opp-microvolt-L3 = <0xe7ef0 0xe7ef0 0x149970>;
			clock-latency-ns = <0x9c40>;
			opp-suspend;
		};

		opp-600000000 {
			opp-hz = <0x00 0x23c34600>;
			opp-microvolt = <0xe7ef0 0xe7ef0 0x149970>;
			opp-microvolt-L0 = <0xe7ef0 0xe7ef0 0x149970>;
			opp-microvolt-L1 = <0xe7ef0 0xe7ef0 0x149970>;
			opp-microvolt-L2 = <0xe7ef0 0xe7ef0 0x149970>;
			opp-microvolt-L3 = <0xe7ef0 0xe7ef0 0x149970>;
			clock-latency-ns = <0x9c40>;
		};

		opp-816000000 {
			opp-hz = <0x00 0x30a32c00>;
			opp-microvolt = <0x100590 0x100590 0x149970>;
			opp-microvolt-L0 = <0x100590 0x100590 0x149970>;
			opp-microvolt-L1 = <0xf4240 0xf4240 0x149970>;
			opp-microvolt-L2 = <0xf4240 0xf4240 0x149970>;
			opp-microvolt-L3 = <0xe7ef0 0xe7ef0 0x149970>;
			clock-latency-ns = <0x9c40>;
		};

		opp-1008000000 {
			opp-hz = <0x00 0x3c14dc00>;
			opp-microvolt = <0x11edd8 0x11edd8 0x149970>;
			opp-microvolt-L0 = <0x11edd8 0x11edd8 0x149970>;
			opp-microvolt-L1 = <0x112a88 0x112a88 0x149970>;
			opp-microvolt-L2 = <0x112a88 0x112a88 0x149970>;
			opp-microvolt-L3 = <0x100590 0x100590 0x149970>;
			clock-latency-ns = <0x9c40>;
		};

		opp-1104000000 {
			opp-hz = <0x00 0x41cdb400>;
			opp-microvolt = <0x13d620 0x13d620 0x149970>;
			opp-microvolt-L0 = <0x13d620 0x13d620 0x149970>;
			opp-microvolt-L1 = <0x137478 0x137478 0x149970>;
			opp-microvolt-L2 = <0x1312d0 0x1312d0 0x149970>;
			opp-microvolt-L3 = <0x124f80 0x124f80 0x149970>;
			clock-latency-ns = <0x9c40>;
		};

		opp-1200000000 {
			opp-hz = <0x00 0x47868c00>;
			opp-microvolt = <0x13d620 0x13d620 0x149970>;
			opp-microvolt-L0 = <0x13d620 0x13d620 0x149970>;
			opp-microvolt-L1 = <0x137478 0x137478 0x149970>;
			opp-microvolt-L2 = <0x1312d0 0x1312d0 0x149970>;
			opp-microvolt-L3 = <0x124f80 0x124f80 0x149970>;
			clock-latency-ns = <0x9c40>;
		};

		opp-1248000000 {
			opp-hz = <0x00 0x4a62f800>;
			opp-microvolt = <0x149970 0x149970 0x149970>;
			opp-microvolt-L0 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L1 = <0x13d620 0x13d620 0x149970>;
			opp-microvolt-L2 = <0x137478 0x137478 0x149970>;
			opp-microvolt-L3 = <0x12b128 0x12b128 0x149970>;
			clock-latency-ns = <0x9c40>;
		};

		opp-1296000000 {
			opp-hz = <0x00 0x4d3f6400>;
			opp-microvolt = <0x149970 0x149970 0x149970>;
			opp-microvolt-L0 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L1 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L2 = <0x13d620 0x13d620 0x149970>;
			opp-microvolt-L3 = <0x1312d0 0x1312d0 0x149970>;
			clock-latency-ns = <0x9c40>;
		};

		opp-1416000000 {
			opp-hz = <0x00 0x54667200>;
			opp-microvolt = <0x149970 0x149970 0x149970>;
			opp-microvolt-L0 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L1 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L2 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L3 = <0x149970 0x149970 0x149970>;
			clock-latency-ns = <0x9c40>;
		};

		opp-1440000000 {
			opp-hz = <0x00 0x55d4a800>;
			opp-microvolt = <0x149970 0x149970 0x149970>;
			opp-microvolt-L0 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L1 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L2 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L3 = <0x149970 0x149970 0x149970>;
			clock-latency-ns = <0x9c40>;
		};

		opp-1512000000 {
			opp-hz = <0x00 0x5a1f4a00>;
			opp-microvolt = <0x149970 0x149970 0x149970>;
			opp-microvolt-L0 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L1 = <0x149970 0x149970 0x149970>;
			opp-microvolt-L2 = <0x13d620 0x13d620 0x149970>;
			opp-microvolt-L3 = <0x1312d0 0x1312d0 0x149970>;
			clock-latency-ns = <0x9c40>;
			performance-mode;
		};
	};

regulators电压控制节点

设备通过RK817 pmic进行电源控制,其中DCDC_REG2节点控制了cpu的核心供电vdd_arm,通过修改regulator-max-microvoltregulator-min-microvolt可以提高或者降低pmic允许的最大cpu核心供电和最小供电

				DCDC_REG2 {
					regulator-always-on;
					regulator-boot-on;
					regulator-min-microvolt = <0xe7ef0>;
					regulator-max-microvolt = <0x149970>;
					regulator-ramp-delay = <0x1771>;
					regulator-initial-mode = <0x02>;
					regulator-name = "vdd_arm";
					phandle = <0x06>;

					regulator-state-mem {
						regulator-off-in-suspend;
						regulator-suspend-microvolt = <0xe7ef0>;
					};
				};

关于GPU的相关控制

电压控制

RK3326的GPU并不像RK3566之类的Soc一样有独立的电压控制节点,根据瑞芯微的芯片手册我们可以知道,pmic通过regulator-min-microvolt节点控制vdd_logic,其中GPU和逻辑核心共享供电,所以在GPU频率表节点中它并不需要设置mali-supply给它分配供电规则,pmic会自动分配GPU需要的电压

	gpu-opp-table {
		compatible = "operating-points-v2";
		rockchip,thermal-zone = "soc-thermal";
		rockchip,temp-hysteresis = <0x1388>;
		rockchip,low-temp = <0x00>;
		rockchip,low-temp-min-volt = <0xf4240>;
		rockchip,low-temp-adjust-volt = <0x00 0x1e0 0xc350>;
		rockchip,max-volt = <0x11edd8>;
		rockchip,evb-irdrop = <0x61a8>;
		rockchip,pvtm-voltage-sel = <0x00 0xc350 0x00 0xc351 0xd2f0 0x01 0xd2f1 0xea60 0x02 0xea61 0x1869f 0x03>;
		rockchip,pvtm-ch = <0x00 0x00>;
		phandle = <0x98>;

		opp-300000000 {
			opp-hz = <0x00 0x11e1a300>;
			opp-microvolt = <0xee098>;
			opp-microvolt-L0 = <0xee098>;
			opp-microvolt-L1 = <0xe7ef0>;
			opp-microvolt-L2 = <0xe7ef0>;
			opp-microvolt-L3 = <0xe7ef0>;
		};

		opp-400000000 {
			opp-hz = <0x00 0x17d78400>;
			opp-microvolt = <0x100590>;
			opp-microvolt-L0 = <0x100590>;
			opp-microvolt-L1 = <0xfa3e8>;
			opp-microvolt-L2 = <0xee098>;
			opp-microvolt-L3 = <0xe7ef0>;
		};

		opp-480000000 {
			opp-hz = <0x00 0x1c9c3800>;
			opp-microvolt = <0x112a88>;
			opp-microvolt-L0 = <0x112a88>;
			opp-microvolt-L1 = <0x10c8e0>;
			opp-microvolt-L2 = <0x100590>;
			opp-microvolt-L3 = <0xf4240>;
		};

		opp-520000000 {
			opp-hz = <0x00 0x1efe9200>;
			opp-microvolt = <0x118c30>;
			opp-microvolt-L0 = <0x118c30>;
			opp-microvolt-L1 = <0x118c30>;
			opp-microvolt-L2 = <0x10c8e0>;
			opp-microvolt-L3 = <0x100590>;
		};
		
		opp-560000000 {
			opp-hz = <0x00 0x2160EC00>;
			opp-microvolt = <0x118c30>;
			opp-microvolt-L0 = <0x118c30>;
			opp-microvolt-L1 = <0x118c30>;
			opp-microvolt-L2 = <0x10c8e0>;
			opp-microvolt-L3 = <0x100590>;
		};
	};

LICENSED UNDER CC BY-NC-SA 4.0
Comment