xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/devfreq/rockchip_dmc.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun* Rockchip DMC(Dynamic Memory Controller) device
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunRequired properties:
4*4882a593Smuzhiyun- compatible: Should be one of the following.
5*4882a593Smuzhiyun  - "rockchip,px30-dmc" - for PX30 SoCs.
6*4882a593Smuzhiyun  - "rockchip,rk1808-dmc" - for RK1808 SoCs.
7*4882a593Smuzhiyun  - "rockchip,rk3128-dmc" - for RK3128 SoCs.
8*4882a593Smuzhiyun  - "rockchip,rk3228-dmc" - for RK3228 SoCs.
9*4882a593Smuzhiyun  - "rockchip,rk3288-dmc" - for RK3288 SoCs.
10*4882a593Smuzhiyun  - "rockchip,rk3308-dmc" - for RK3308 SoCs.
11*4882a593Smuzhiyun  - "rockchip,rk3328-dmc" - for RK3328 SoCs.
12*4882a593Smuzhiyun  - "rockchip,rk3399-dmc" - for RK3399 SoCs.
13*4882a593Smuzhiyun  - "rockchip,rk3528-dmc" - for RK3528 SoCs.
14*4882a593Smuzhiyun  - "rockchip,rk3562-dmc" - for RK3562 SoCs.
15*4882a593Smuzhiyun  - "rockchip,rk3568-dmc" - for RK3568 SoCs.
16*4882a593Smuzhiyun  - "rockchip,rk3588-dmc" - for RK3588 SoCs.
17*4882a593Smuzhiyun  - "rockchip,rv1126-dmc" - for RV1126 SoCs.
18*4882a593Smuzhiyun- devfreq-events: Node to get DDR loading, Refer to
19*4882a593Smuzhiyun		  Documentation/devicetree/bindings/devfreq/rockchip-dfi.txt
20*4882a593Smuzhiyun- interrupts: The interrupt number to the CPU. The interrupt specifier format
21*4882a593Smuzhiyun	      depends on the interrupt controller. It should be DCF interrupts,
22*4882a593Smuzhiyun	      when DDR dvfs finish, it will happen.
23*4882a593Smuzhiyun- clocks: Phandles for clock specified in "clock-names" property
24*4882a593Smuzhiyun- clock-names : The name of clock used by the DFI, must be "pclk_ddr_mon";
25*4882a593Smuzhiyun- operating-points-v2: Refer to Documentation/devicetree/bindings/power/opp.txt
26*4882a593Smuzhiyun		       for details.
27*4882a593Smuzhiyun- center-supply: DMC supply node.
28*4882a593Smuzhiyun- status: Marks the node enabled/disabled.
29*4882a593Smuzhiyun
30*4882a593SmuzhiyunOptional properties:
31*4882a593Smuzhiyun- ddr_timing:  DDR timing need to pass to arm trust firmware
32*4882a593Smuzhiyun- upthreshold: The upthreshold to simpleondeamnd policy
33*4882a593Smuzhiyun- downdifferential: The downdifferential to simpleondeamnd policy
34*4882a593Smuzhiyun- vop-bw-dmc-freq: The property is an array of 3-tuples items, and
35*4882a593Smuzhiyun		   each item consists of bandwidth and frequency like
36*4882a593Smuzhiyun		   <min-bandwidth max-bandwidth frequency>.
37*4882a593Smuzhiyun		   min-bandwidth: minimum ddr bandwidth in Mbyte/sec.
38*4882a593Smuzhiyun		   max-bandwidth: maximum ddr bandwidth in Mbyte/sec.
39*4882a593Smuzhiyun		   frequency: ddr frequency in KHz.
40*4882a593Smuzhiyun- #cooling-cells: This property indicates dmc can work as a cooling device
41*4882a593Smuzhiyun- ddr_power_model: Sets power model parameters.
42*4882a593Smuzhiyun	- dynamic-power-coefficient: A u32 value that represents the running time dynamic
43*4882a593Smuzhiyun	  power coefficient in units of mW/MHz/uVolt^2. The coefficient can either be
44*4882a593Smuzhiyun	  calculated from power measurements or derived by analysis.
45*4882a593Smuzhiyun	- static-power-coefficient: A u32 value that represents the static power
46*4882a593Smuzhiyun	  coefficient.
47*4882a593Smuzhiyun	- ts: An array containing coefficients for the temperature scaling factor.
48*4882a593Smuzhiyun	  Used as : tsf = ts[3]*T^3 + ts[2]*T^2 + ts[1]*T + ts[0], where T = temperature
49*4882a593Smuzhiyun	- thermal-zone: A string identifying the thermal zone used for the dmc
50*4882a593Smuzhiyun
51*4882a593SmuzhiyunExample:
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun	ddr_timing: ddr_timing {
54*4882a593Smuzhiyun		compatible = "rockchip,ddr-timing";
55*4882a593Smuzhiyun		ddr3_speed_bin = <21>;
56*4882a593Smuzhiyun		pd_idle = <0>;
57*4882a593Smuzhiyun		sr_idle = <0>;
58*4882a593Smuzhiyun		sr_mc_gate_idle = <0>;
59*4882a593Smuzhiyun		srpd_lite_idle  = <0>;
60*4882a593Smuzhiyun		standby_idle = <0>;
61*4882a593Smuzhiyun		dram_dll_dis_freq = <300>;
62*4882a593Smuzhiyun		phy_dll_dis_freq = <125>;
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun		ddr3_odt_dis_freq = <333>;
65*4882a593Smuzhiyun		ddr3_drv = <DDR3_DS_40ohm>;
66*4882a593Smuzhiyun		ddr3_odt = <DDR3_ODT_120ohm>;
67*4882a593Smuzhiyun		phy_ddr3_ca_drv = <PHY_DRV_ODT_40>;
68*4882a593Smuzhiyun		phy_ddr3_dq_drv = <PHY_DRV_ODT_40>;
69*4882a593Smuzhiyun		phy_ddr3_odt = <PHY_DRV_ODT_240>;
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun		lpddr3_odt_dis_freq = <333>;
72*4882a593Smuzhiyun		lpddr3_drv = <LP3_DS_34ohm>;
73*4882a593Smuzhiyun		lpddr3_odt = <LP3_ODT_240ohm>;
74*4882a593Smuzhiyun		phy_lpddr3_ca_drv = <PHY_DRV_ODT_40>;
75*4882a593Smuzhiyun		phy_lpddr3_dq_drv = <PHY_DRV_ODT_40>;
76*4882a593Smuzhiyun		phy_lpddr3_odt = <PHY_DRV_ODT_240>;
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun		lpddr4_odt_dis_freq = <333>;
79*4882a593Smuzhiyun		lpddr4_drv = <LP4_PDDS_60ohm>;
80*4882a593Smuzhiyun		lpddr4_dq_odt = <LP4_DQ_ODT_40ohm>;
81*4882a593Smuzhiyun		lpddr4_ca_odt = <LP4_CA_ODT_40ohm>;
82*4882a593Smuzhiyun		phy_lpddr4_ca_drv = <PHY_DRV_ODT_40>;
83*4882a593Smuzhiyun		phy_lpddr4_ck_cs_drv = <PHY_DRV_ODT_80>;
84*4882a593Smuzhiyun		phy_lpddr4_dq_drv = <PHY_DRV_ODT_80>;
85*4882a593Smuzhiyun		phy_lpddr4_odt = <PHY_DRV_ODT_60>;
86*4882a593Smuzhiyun	};
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun	dmc_opp_table: dmc_opp_table {
89*4882a593Smuzhiyun		compatible = "operating-points-v2";
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun		opp00 {
92*4882a593Smuzhiyun			opp-hz = /bits/ 64 <300000000>;
93*4882a593Smuzhiyun			opp-microvolt = <900000>;
94*4882a593Smuzhiyun		};
95*4882a593Smuzhiyun		opp01 {
96*4882a593Smuzhiyun			opp-hz = /bits/ 64 <666000000>;
97*4882a593Smuzhiyun			opp-microvolt = <900000>;
98*4882a593Smuzhiyun		};
99*4882a593Smuzhiyun	};
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun	dmc: dmc {
102*4882a593Smuzhiyun		compatible = "rockchip,rk3399-dmc";
103*4882a593Smuzhiyun		devfreq-events = <&dfi>;
104*4882a593Smuzhiyun		interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
105*4882a593Smuzhiyun		clocks = <&cru SCLK_DDRCLK>;
106*4882a593Smuzhiyun		clock-names = "dmc_clk";
107*4882a593Smuzhiyun		ddr_timing = <&ddr_timing>;
108*4882a593Smuzhiyun		operating-points-v2 = <&dmc_opp_table>;
109*4882a593Smuzhiyun		center-supply = <&ppvar_centerlogic>;
110*4882a593Smuzhiyun		upthreshold = <15>;
111*4882a593Smuzhiyun		downdifferential = <10>;
112*4882a593Smuzhiyun		#cooling-cells = <2>;
113*4882a593Smuzhiyun		ddr_power_model: ddr_power_model {
114*4882a593Smuzhiyun			dynamic-power-coefficient = <120>;
115*4882a593Smuzhiyun			static-power-coefficient = <300>;
116*4882a593Smuzhiyun			ts = <32000 4700 (-80) 2>;
117*4882a593Smuzhiyun			thermal-zone = "soc-thermal";
118*4882a593Smuzhiyun		}
119*4882a593Smuzhiyun		status = "disabled";
120*4882a593Smuzhiyun	};
121