#include <soc/rockchip/rk3399_grf.h>
 #include <soc/rockchip/rockchip_sip.h>
 
-struct dram_timing {
-       unsigned int ddr3_speed_bin;
-       unsigned int pd_idle;
-       unsigned int sr_idle;
-       unsigned int sr_mc_gate_idle;
-       unsigned int srpd_lite_idle;
-       unsigned int standby_idle;
-       unsigned int auto_pd_dis_freq;
-       unsigned int dram_dll_dis_freq;
-       unsigned int phy_dll_dis_freq;
-       unsigned int ddr3_odt_dis_freq;
-       unsigned int ddr3_drv;
-       unsigned int ddr3_odt;
-       unsigned int phy_ddr3_ca_drv;
-       unsigned int phy_ddr3_dq_drv;
-       unsigned int phy_ddr3_odt;
-       unsigned int lpddr3_odt_dis_freq;
-       unsigned int lpddr3_drv;
-       unsigned int lpddr3_odt;
-       unsigned int phy_lpddr3_ca_drv;
-       unsigned int phy_lpddr3_dq_drv;
-       unsigned int phy_lpddr3_odt;
-       unsigned int lpddr4_odt_dis_freq;
-       unsigned int lpddr4_drv;
-       unsigned int lpddr4_dq_odt;
-       unsigned int lpddr4_ca_odt;
-       unsigned int phy_lpddr4_ca_drv;
-       unsigned int phy_lpddr4_ck_cs_drv;
-       unsigned int phy_lpddr4_dq_drv;
-       unsigned int phy_lpddr4_odt;
-};
-
 struct rk3399_dmcfreq {
        struct device *dev;
        struct devfreq *devfreq;
        struct clk *dmc_clk;
        struct devfreq_event_dev *edev;
        struct mutex lock;
-       struct dram_timing timing;
        struct regulator *vdd_center;
        struct regmap *regmap_pmu;
        unsigned long rate, target_rate;
        unsigned long volt, target_volt;
        unsigned int odt_dis_freq;
        int odt_pd_arg0, odt_pd_arg1;
+
+       unsigned int pd_idle;
+       unsigned int sr_idle;
+       unsigned int sr_mc_gate_idle;
+       unsigned int srpd_lite_idle;
+       unsigned int standby_idle;
+       unsigned int ddr3_odt_dis_freq;
+       unsigned int lpddr3_odt_dis_freq;
+       unsigned int lpddr4_odt_dis_freq;
 };
 
 static int rk3399_dmcfreq_target(struct device *dev, unsigned long *freq,
 static SIMPLE_DEV_PM_OPS(rk3399_dmcfreq_pm, rk3399_dmcfreq_suspend,
                         rk3399_dmcfreq_resume);
 
-static int of_get_ddr_timings(struct dram_timing *timing,
-                             struct device_node *np)
+static int rk3399_dmcfreq_of_props(struct rk3399_dmcfreq *data,
+                                  struct device_node *np)
 {
        int ret = 0;
 
-       ret = of_property_read_u32(np, "rockchip,ddr3_speed_bin",
-                                  &timing->ddr3_speed_bin);
        ret |= of_property_read_u32(np, "rockchip,pd_idle",
-                                   &timing->pd_idle);
+                                   &data->pd_idle);
        ret |= of_property_read_u32(np, "rockchip,sr_idle",
-                                   &timing->sr_idle);
+                                   &data->sr_idle);
        ret |= of_property_read_u32(np, "rockchip,sr_mc_gate_idle",
-                                   &timing->sr_mc_gate_idle);
+                                   &data->sr_mc_gate_idle);
        ret |= of_property_read_u32(np, "rockchip,srpd_lite_idle",
-                                   &timing->srpd_lite_idle);
+                                   &data->srpd_lite_idle);
        ret |= of_property_read_u32(np, "rockchip,standby_idle",
-                                   &timing->standby_idle);
-       ret |= of_property_read_u32(np, "rockchip,auto_pd_dis_freq",
-                                   &timing->auto_pd_dis_freq);
-       ret |= of_property_read_u32(np, "rockchip,dram_dll_dis_freq",
-                                   &timing->dram_dll_dis_freq);
-       ret |= of_property_read_u32(np, "rockchip,phy_dll_dis_freq",
-                                   &timing->phy_dll_dis_freq);
+                                   &data->standby_idle);
        ret |= of_property_read_u32(np, "rockchip,ddr3_odt_dis_freq",
-                                   &timing->ddr3_odt_dis_freq);
-       ret |= of_property_read_u32(np, "rockchip,ddr3_drv",
-                                   &timing->ddr3_drv);
-       ret |= of_property_read_u32(np, "rockchip,ddr3_odt",
-                                   &timing->ddr3_odt);
-       ret |= of_property_read_u32(np, "rockchip,phy_ddr3_ca_drv",
-                                   &timing->phy_ddr3_ca_drv);
-       ret |= of_property_read_u32(np, "rockchip,phy_ddr3_dq_drv",
-                                   &timing->phy_ddr3_dq_drv);
-       ret |= of_property_read_u32(np, "rockchip,phy_ddr3_odt",
-                                   &timing->phy_ddr3_odt);
+                                   &data->ddr3_odt_dis_freq);
        ret |= of_property_read_u32(np, "rockchip,lpddr3_odt_dis_freq",
-                                   &timing->lpddr3_odt_dis_freq);
-       ret |= of_property_read_u32(np, "rockchip,lpddr3_drv",
-                                   &timing->lpddr3_drv);
-       ret |= of_property_read_u32(np, "rockchip,lpddr3_odt",
-                                   &timing->lpddr3_odt);
-       ret |= of_property_read_u32(np, "rockchip,phy_lpddr3_ca_drv",
-                                   &timing->phy_lpddr3_ca_drv);
-       ret |= of_property_read_u32(np, "rockchip,phy_lpddr3_dq_drv",
-                                   &timing->phy_lpddr3_dq_drv);
-       ret |= of_property_read_u32(np, "rockchip,phy_lpddr3_odt",
-                                   &timing->phy_lpddr3_odt);
+                                   &data->lpddr3_odt_dis_freq);
        ret |= of_property_read_u32(np, "rockchip,lpddr4_odt_dis_freq",
-                                   &timing->lpddr4_odt_dis_freq);
-       ret |= of_property_read_u32(np, "rockchip,lpddr4_drv",
-                                   &timing->lpddr4_drv);
-       ret |= of_property_read_u32(np, "rockchip,lpddr4_dq_odt",
-                                   &timing->lpddr4_dq_odt);
-       ret |= of_property_read_u32(np, "rockchip,lpddr4_ca_odt",
-                                   &timing->lpddr4_ca_odt);
-       ret |= of_property_read_u32(np, "rockchip,phy_lpddr4_ca_drv",
-                                   &timing->phy_lpddr4_ca_drv);
-       ret |= of_property_read_u32(np, "rockchip,phy_lpddr4_ck_cs_drv",
-                                   &timing->phy_lpddr4_ck_cs_drv);
-       ret |= of_property_read_u32(np, "rockchip,phy_lpddr4_dq_drv",
-                                   &timing->phy_lpddr4_dq_drv);
-       ret |= of_property_read_u32(np, "rockchip,phy_lpddr4_odt",
-                                   &timing->phy_lpddr4_odt);
+                                   &data->lpddr4_odt_dis_freq);
 
        return ret;
 }
        struct device *dev = &pdev->dev;
        struct device_node *np = pdev->dev.of_node, *node;
        struct rk3399_dmcfreq *data;
-       int ret, index, size;
-       uint32_t *timing;
+       int ret;
        struct dev_pm_opp *opp;
        u32 ddr_type;
        u32 val;
                return ret;
        }
 
-       /*
-        * Get dram timing and pass it to arm trust firmware,
-        * the dram driver in arm trust firmware will get these
-        * timing and to do dram initial.
-        */
-       if (!of_get_ddr_timings(&data->timing, np)) {
-               timing = &data->timing.ddr3_speed_bin;
-               size = sizeof(struct dram_timing) / 4;
-               for (index = 0; index < size; index++) {
-                       arm_smccc_smc(ROCKCHIP_SIP_DRAM_FREQ, *timing++, index,
-                                     ROCKCHIP_SIP_CONFIG_DRAM_SET_PARAM,
-                                     0, 0, 0, 0, &res);
-                       if (res.a0) {
-                               dev_err(dev, "Failed to set dram param: %ld\n",
-                                       res.a0);
-                               ret = -EINVAL;
-                               goto err_edev;
-                       }
-               }
-       }
+       rk3399_dmcfreq_of_props(data, np);
 
        node = of_parse_phandle(np, "rockchip,pmu", 0);
        if (!node)
 
        switch (ddr_type) {
        case RK3399_PMUGRF_DDRTYPE_DDR3:
-               data->odt_dis_freq = data->timing.ddr3_odt_dis_freq;
+               data->odt_dis_freq = data->ddr3_odt_dis_freq;
                break;
        case RK3399_PMUGRF_DDRTYPE_LPDDR3:
-               data->odt_dis_freq = data->timing.lpddr3_odt_dis_freq;
+               data->odt_dis_freq = data->lpddr3_odt_dis_freq;
                break;
        case RK3399_PMUGRF_DDRTYPE_LPDDR4:
-               data->odt_dis_freq = data->timing.lpddr4_odt_dis_freq;
+               data->odt_dis_freq = data->lpddr4_odt_dis_freq;
                break;
        default:
                ret = -EINVAL;
         * arg2:
         *     bit[0]     : odt enable
         */
-       data->odt_pd_arg0 = (data->timing.sr_idle & 0xff) |
-                           ((data->timing.sr_mc_gate_idle & 0xff) << 8) |
-                           ((data->timing.standby_idle & 0xffff) << 16);
-       data->odt_pd_arg1 = (data->timing.pd_idle & 0xfff) |
-                           ((data->timing.srpd_lite_idle & 0xfff) << 16);
+       data->odt_pd_arg0 = (data->sr_idle & 0xff) |
+                           ((data->sr_mc_gate_idle & 0xff) << 8) |
+                           ((data->standby_idle & 0xffff) << 16);
+       data->odt_pd_arg1 = (data->pd_idle & 0xfff) |
+                           ((data->srpd_lite_idle & 0xfff) << 16);
 
        /*
         * We add a devfreq driver to our parent since it has a device tree node