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