Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

PM / devfreq: rk3399_dmc: Drop excess timing properties

All of these properties are initialized by ARM Trusted Firmware, and
have been since the early days of this chip. It's redundant (and
possibly wrong) to do this here now. What's more, there seems to be some
confusion about the units and some of the definitions of this timing
struct: the DT docs say MHz for many of these, but downstream users were
in Hz (and therefore, the ATF interface was Hz). Also, the in-driver
usage for some of these (e.g., for comparing to target frequency) were
in Hz too. So doubly wrong.

We can avoid thinking about who got the right units by dropping the
unnecessary code and properties. They are marked deprecated in the
binding schema.

Signed-off-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>

authored by

Brian Norris and committed by
Chanwoo Choi
b82acf82 5f50c52f

+29 -115
+29 -115
drivers/devfreq/rk3399_dmc.c
··· 23 23 #include <soc/rockchip/rk3399_grf.h> 24 24 #include <soc/rockchip/rockchip_sip.h> 25 25 26 - struct dram_timing { 27 - unsigned int ddr3_speed_bin; 28 - unsigned int pd_idle; 29 - unsigned int sr_idle; 30 - unsigned int sr_mc_gate_idle; 31 - unsigned int srpd_lite_idle; 32 - unsigned int standby_idle; 33 - unsigned int auto_pd_dis_freq; 34 - unsigned int dram_dll_dis_freq; 35 - unsigned int phy_dll_dis_freq; 36 - unsigned int ddr3_odt_dis_freq; 37 - unsigned int ddr3_drv; 38 - unsigned int ddr3_odt; 39 - unsigned int phy_ddr3_ca_drv; 40 - unsigned int phy_ddr3_dq_drv; 41 - unsigned int phy_ddr3_odt; 42 - unsigned int lpddr3_odt_dis_freq; 43 - unsigned int lpddr3_drv; 44 - unsigned int lpddr3_odt; 45 - unsigned int phy_lpddr3_ca_drv; 46 - unsigned int phy_lpddr3_dq_drv; 47 - unsigned int phy_lpddr3_odt; 48 - unsigned int lpddr4_odt_dis_freq; 49 - unsigned int lpddr4_drv; 50 - unsigned int lpddr4_dq_odt; 51 - unsigned int lpddr4_ca_odt; 52 - unsigned int phy_lpddr4_ca_drv; 53 - unsigned int phy_lpddr4_ck_cs_drv; 54 - unsigned int phy_lpddr4_dq_drv; 55 - unsigned int phy_lpddr4_odt; 56 - }; 57 - 58 26 struct rk3399_dmcfreq { 59 27 struct device *dev; 60 28 struct devfreq *devfreq; ··· 30 62 struct clk *dmc_clk; 31 63 struct devfreq_event_dev *edev; 32 64 struct mutex lock; 33 - struct dram_timing timing; 34 65 struct regulator *vdd_center; 35 66 struct regmap *regmap_pmu; 36 67 unsigned long rate, target_rate; 37 68 unsigned long volt, target_volt; 38 69 unsigned int odt_dis_freq; 39 70 int odt_pd_arg0, odt_pd_arg1; 71 + 72 + unsigned int pd_idle; 73 + unsigned int sr_idle; 74 + unsigned int sr_mc_gate_idle; 75 + unsigned int srpd_lite_idle; 76 + unsigned int standby_idle; 77 + unsigned int ddr3_odt_dis_freq; 78 + unsigned int lpddr3_odt_dis_freq; 79 + unsigned int lpddr4_odt_dis_freq; 40 80 }; 41 81 42 82 static int rk3399_dmcfreq_target(struct device *dev, unsigned long *freq, ··· 214 238 static SIMPLE_DEV_PM_OPS(rk3399_dmcfreq_pm, rk3399_dmcfreq_suspend, 215 239 rk3399_dmcfreq_resume); 216 240 217 - static int of_get_ddr_timings(struct dram_timing *timing, 218 - struct device_node *np) 241 + static int rk3399_dmcfreq_of_props(struct rk3399_dmcfreq *data, 242 + struct device_node *np) 219 243 { 220 244 int ret = 0; 221 245 222 - ret = of_property_read_u32(np, "rockchip,ddr3_speed_bin", 223 - &timing->ddr3_speed_bin); 224 246 ret |= of_property_read_u32(np, "rockchip,pd_idle", 225 - &timing->pd_idle); 247 + &data->pd_idle); 226 248 ret |= of_property_read_u32(np, "rockchip,sr_idle", 227 - &timing->sr_idle); 249 + &data->sr_idle); 228 250 ret |= of_property_read_u32(np, "rockchip,sr_mc_gate_idle", 229 - &timing->sr_mc_gate_idle); 251 + &data->sr_mc_gate_idle); 230 252 ret |= of_property_read_u32(np, "rockchip,srpd_lite_idle", 231 - &timing->srpd_lite_idle); 253 + &data->srpd_lite_idle); 232 254 ret |= of_property_read_u32(np, "rockchip,standby_idle", 233 - &timing->standby_idle); 234 - ret |= of_property_read_u32(np, "rockchip,auto_pd_dis_freq", 235 - &timing->auto_pd_dis_freq); 236 - ret |= of_property_read_u32(np, "rockchip,dram_dll_dis_freq", 237 - &timing->dram_dll_dis_freq); 238 - ret |= of_property_read_u32(np, "rockchip,phy_dll_dis_freq", 239 - &timing->phy_dll_dis_freq); 255 + &data->standby_idle); 240 256 ret |= of_property_read_u32(np, "rockchip,ddr3_odt_dis_freq", 241 - &timing->ddr3_odt_dis_freq); 242 - ret |= of_property_read_u32(np, "rockchip,ddr3_drv", 243 - &timing->ddr3_drv); 244 - ret |= of_property_read_u32(np, "rockchip,ddr3_odt", 245 - &timing->ddr3_odt); 246 - ret |= of_property_read_u32(np, "rockchip,phy_ddr3_ca_drv", 247 - &timing->phy_ddr3_ca_drv); 248 - ret |= of_property_read_u32(np, "rockchip,phy_ddr3_dq_drv", 249 - &timing->phy_ddr3_dq_drv); 250 - ret |= of_property_read_u32(np, "rockchip,phy_ddr3_odt", 251 - &timing->phy_ddr3_odt); 257 + &data->ddr3_odt_dis_freq); 252 258 ret |= of_property_read_u32(np, "rockchip,lpddr3_odt_dis_freq", 253 - &timing->lpddr3_odt_dis_freq); 254 - ret |= of_property_read_u32(np, "rockchip,lpddr3_drv", 255 - &timing->lpddr3_drv); 256 - ret |= of_property_read_u32(np, "rockchip,lpddr3_odt", 257 - &timing->lpddr3_odt); 258 - ret |= of_property_read_u32(np, "rockchip,phy_lpddr3_ca_drv", 259 - &timing->phy_lpddr3_ca_drv); 260 - ret |= of_property_read_u32(np, "rockchip,phy_lpddr3_dq_drv", 261 - &timing->phy_lpddr3_dq_drv); 262 - ret |= of_property_read_u32(np, "rockchip,phy_lpddr3_odt", 263 - &timing->phy_lpddr3_odt); 259 + &data->lpddr3_odt_dis_freq); 264 260 ret |= of_property_read_u32(np, "rockchip,lpddr4_odt_dis_freq", 265 - &timing->lpddr4_odt_dis_freq); 266 - ret |= of_property_read_u32(np, "rockchip,lpddr4_drv", 267 - &timing->lpddr4_drv); 268 - ret |= of_property_read_u32(np, "rockchip,lpddr4_dq_odt", 269 - &timing->lpddr4_dq_odt); 270 - ret |= of_property_read_u32(np, "rockchip,lpddr4_ca_odt", 271 - &timing->lpddr4_ca_odt); 272 - ret |= of_property_read_u32(np, "rockchip,phy_lpddr4_ca_drv", 273 - &timing->phy_lpddr4_ca_drv); 274 - ret |= of_property_read_u32(np, "rockchip,phy_lpddr4_ck_cs_drv", 275 - &timing->phy_lpddr4_ck_cs_drv); 276 - ret |= of_property_read_u32(np, "rockchip,phy_lpddr4_dq_drv", 277 - &timing->phy_lpddr4_dq_drv); 278 - ret |= of_property_read_u32(np, "rockchip,phy_lpddr4_odt", 279 - &timing->phy_lpddr4_odt); 261 + &data->lpddr4_odt_dis_freq); 280 262 281 263 return ret; 282 264 } ··· 245 311 struct device *dev = &pdev->dev; 246 312 struct device_node *np = pdev->dev.of_node, *node; 247 313 struct rk3399_dmcfreq *data; 248 - int ret, index, size; 249 - uint32_t *timing; 314 + int ret; 250 315 struct dev_pm_opp *opp; 251 316 u32 ddr_type; 252 317 u32 val; ··· 276 343 return ret; 277 344 } 278 345 279 - /* 280 - * Get dram timing and pass it to arm trust firmware, 281 - * the dram driver in arm trust firmware will get these 282 - * timing and to do dram initial. 283 - */ 284 - if (!of_get_ddr_timings(&data->timing, np)) { 285 - timing = &data->timing.ddr3_speed_bin; 286 - size = sizeof(struct dram_timing) / 4; 287 - for (index = 0; index < size; index++) { 288 - arm_smccc_smc(ROCKCHIP_SIP_DRAM_FREQ, *timing++, index, 289 - ROCKCHIP_SIP_CONFIG_DRAM_SET_PARAM, 290 - 0, 0, 0, 0, &res); 291 - if (res.a0) { 292 - dev_err(dev, "Failed to set dram param: %ld\n", 293 - res.a0); 294 - ret = -EINVAL; 295 - goto err_edev; 296 - } 297 - } 298 - } 346 + rk3399_dmcfreq_of_props(data, np); 299 347 300 348 node = of_parse_phandle(np, "rockchip,pmu", 0); 301 349 if (!node) ··· 295 381 296 382 switch (ddr_type) { 297 383 case RK3399_PMUGRF_DDRTYPE_DDR3: 298 - data->odt_dis_freq = data->timing.ddr3_odt_dis_freq; 384 + data->odt_dis_freq = data->ddr3_odt_dis_freq; 299 385 break; 300 386 case RK3399_PMUGRF_DDRTYPE_LPDDR3: 301 - data->odt_dis_freq = data->timing.lpddr3_odt_dis_freq; 387 + data->odt_dis_freq = data->lpddr3_odt_dis_freq; 302 388 break; 303 389 case RK3399_PMUGRF_DDRTYPE_LPDDR4: 304 - data->odt_dis_freq = data->timing.lpddr4_odt_dis_freq; 390 + data->odt_dis_freq = data->lpddr4_odt_dis_freq; 305 391 break; 306 392 default: 307 393 ret = -EINVAL; ··· 328 414 * arg2: 329 415 * bit[0] : odt enable 330 416 */ 331 - data->odt_pd_arg0 = (data->timing.sr_idle & 0xff) | 332 - ((data->timing.sr_mc_gate_idle & 0xff) << 8) | 333 - ((data->timing.standby_idle & 0xffff) << 16); 334 - data->odt_pd_arg1 = (data->timing.pd_idle & 0xfff) | 335 - ((data->timing.srpd_lite_idle & 0xfff) << 16); 417 + data->odt_pd_arg0 = (data->sr_idle & 0xff) | 418 + ((data->sr_mc_gate_idle & 0xff) << 8) | 419 + ((data->standby_idle & 0xffff) << 16); 420 + data->odt_pd_arg1 = (data->pd_idle & 0xfff) | 421 + ((data->srpd_lite_idle & 0xfff) << 16); 336 422 337 423 /* 338 424 * We add a devfreq driver to our parent since it has a device tree node