* Rockchip DMC(Dynamic Memory Controller) device Required properties: - compatible: Should be one of the following. - "rockchip,px30-dmc" - for PX30 SoCs. - "rockchip,rk1808-dmc" - for RK1808 SoCs. - "rockchip,rk3128-dmc" - for RK3128 SoCs. - "rockchip,rk3228-dmc" - for RK3228 SoCs. - "rockchip,rk3288-dmc" - for RK3288 SoCs. - "rockchip,rk3308-dmc" - for RK3308 SoCs. - "rockchip,rk3328-dmc" - for RK3328 SoCs. - "rockchip,rk3399-dmc" - for RK3399 SoCs. - "rockchip,rk3528-dmc" - for RK3528 SoCs. - "rockchip,rk3562-dmc" - for RK3562 SoCs. - "rockchip,rk3568-dmc" - for RK3568 SoCs. - "rockchip,rk3588-dmc" - for RK3588 SoCs. - "rockchip,rv1126-dmc" - for RV1126 SoCs. - devfreq-events: Node to get DDR loading, Refer to Documentation/devicetree/bindings/devfreq/rockchip-dfi.txt - interrupts: The interrupt number to the CPU. The interrupt specifier format depends on the interrupt controller. It should be DCF interrupts, when DDR dvfs finish, it will happen. - clocks: Phandles for clock specified in "clock-names" property - clock-names : The name of clock used by the DFI, must be "pclk_ddr_mon"; - operating-points-v2: Refer to Documentation/devicetree/bindings/power/opp.txt for details. - center-supply: DMC supply node. - status: Marks the node enabled/disabled. Optional properties: - ddr_timing: DDR timing need to pass to arm trust firmware - upthreshold: The upthreshold to simpleondeamnd policy - downdifferential: The downdifferential to simpleondeamnd policy - vop-bw-dmc-freq: The property is an array of 3-tuples items, and each item consists of bandwidth and frequency like . min-bandwidth: minimum ddr bandwidth in Mbyte/sec. max-bandwidth: maximum ddr bandwidth in Mbyte/sec. frequency: ddr frequency in KHz. - #cooling-cells: This property indicates dmc can work as a cooling device - ddr_power_model: Sets power model parameters. - dynamic-power-coefficient: A u32 value that represents the running time dynamic power coefficient in units of mW/MHz/uVolt^2. The coefficient can either be calculated from power measurements or derived by analysis. - static-power-coefficient: A u32 value that represents the static power coefficient. - ts: An array containing coefficients for the temperature scaling factor. Used as : tsf = ts[3]*T^3 + ts[2]*T^2 + ts[1]*T + ts[0], where T = temperature - thermal-zone: A string identifying the thermal zone used for the dmc Example: ddr_timing: ddr_timing { compatible = "rockchip,ddr-timing"; ddr3_speed_bin = <21>; pd_idle = <0>; sr_idle = <0>; sr_mc_gate_idle = <0>; srpd_lite_idle = <0>; standby_idle = <0>; dram_dll_dis_freq = <300>; phy_dll_dis_freq = <125>; ddr3_odt_dis_freq = <333>; ddr3_drv = ; ddr3_odt = ; phy_ddr3_ca_drv = ; phy_ddr3_dq_drv = ; phy_ddr3_odt = ; lpddr3_odt_dis_freq = <333>; lpddr3_drv = ; lpddr3_odt = ; phy_lpddr3_ca_drv = ; phy_lpddr3_dq_drv = ; phy_lpddr3_odt = ; lpddr4_odt_dis_freq = <333>; lpddr4_drv = ; lpddr4_dq_odt = ; lpddr4_ca_odt = ; phy_lpddr4_ca_drv = ; phy_lpddr4_ck_cs_drv = ; phy_lpddr4_dq_drv = ; phy_lpddr4_odt = ; }; dmc_opp_table: dmc_opp_table { compatible = "operating-points-v2"; opp00 { opp-hz = /bits/ 64 <300000000>; opp-microvolt = <900000>; }; opp01 { opp-hz = /bits/ 64 <666000000>; opp-microvolt = <900000>; }; }; dmc: dmc { compatible = "rockchip,rk3399-dmc"; devfreq-events = <&dfi>; interrupts = ; clocks = <&cru SCLK_DDRCLK>; clock-names = "dmc_clk"; ddr_timing = <&ddr_timing>; operating-points-v2 = <&dmc_opp_table>; center-supply = <&ppvar_centerlogic>; upthreshold = <15>; downdifferential = <10>; #cooling-cells = <2>; ddr_power_model: ddr_power_model { dynamic-power-coefficient = <120>; static-power-coefficient = <300>; ts = <32000 4700 (-80) 2>; thermal-zone = "soc-thermal"; } status = "disabled"; };