Lines Matching full:bus

52 	 * cpu_high_freq, change bus rate to low_rate, otherwise change it to
70 static int rockchip_bus_smc_config(struct rockchip_bus *bus) in rockchip_bus_smc_config() argument
72 struct device *dev = bus->dev; in rockchip_bus_smc_config()
76 char *prp_name = "rockchip,soc-bus-table"; in rockchip_bus_smc_config()
81 ret = of_property_read_u32_index(child, "bus-id", 0, in rockchip_bus_smc_config()
108 dev_info(dev, "bus smc config error: %x!\n", ret); in rockchip_bus_smc_config()
147 dev_err(dev, "bus smc config error: %x!\n", ret); in rockchip_bus_smc_config()
158 static int rockchip_bus_set_freq_table(struct rockchip_bus *bus) in rockchip_bus_set_freq_table() argument
160 struct device *dev = bus->dev; in rockchip_bus_set_freq_table()
169 bus->max_state = count; in rockchip_bus_set_freq_table()
170 bus->freq_table = devm_kcalloc(dev, in rockchip_bus_set_freq_table()
171 bus->max_state, in rockchip_bus_set_freq_table()
172 sizeof(*bus->freq_table), in rockchip_bus_set_freq_table()
174 if (!bus->freq_table) { in rockchip_bus_set_freq_table()
175 bus->max_state = 0; in rockchip_bus_set_freq_table()
179 for (i = 0, freq = 0; i < bus->max_state; i++, freq++) { in rockchip_bus_set_freq_table()
182 devm_kfree(dev, bus->freq_table); in rockchip_bus_set_freq_table()
183 bus->max_state = 0; in rockchip_bus_set_freq_table()
186 bus->freq_table[i].volt = dev_pm_opp_get_voltage(opp); in rockchip_bus_set_freq_table()
187 bus->freq_table[i].freq = freq; in rockchip_bus_set_freq_table()
194 static int rockchip_bus_power_control_init(struct rockchip_bus *bus) in rockchip_bus_power_control_init() argument
196 struct device *dev = bus->dev; in rockchip_bus_power_control_init()
199 bus->clk = devm_clk_get(dev, "bus"); in rockchip_bus_power_control_init()
200 if (IS_ERR(bus->clk)) { in rockchip_bus_power_control_init()
201 dev_err(dev, "failed to get bus clock\n"); in rockchip_bus_power_control_init()
202 return PTR_ERR(bus->clk); in rockchip_bus_power_control_init()
205 bus->regulator = devm_regulator_get(dev, "bus"); in rockchip_bus_power_control_init()
206 if (IS_ERR(bus->regulator)) { in rockchip_bus_power_control_init()
207 dev_err(dev, "failed to get bus regulator\n"); in rockchip_bus_power_control_init()
208 return PTR_ERR(bus->regulator); in rockchip_bus_power_control_init()
217 ret = rockchip_bus_set_freq_table(bus); in rockchip_bus_power_control_init()
219 dev_err(dev, "failed to set bus freq table\n"); in rockchip_bus_power_control_init()
228 struct rockchip_bus *bus = dev_get_drvdata(dev); in rockchip_bus_clkfreq_target() local
229 unsigned long target_volt = bus->freq_table[bus->max_state - 1].volt; in rockchip_bus_clkfreq_target()
232 for (i = 0; i < bus->max_state; i++) { in rockchip_bus_clkfreq_target()
233 if (freq <= bus->freq_table[i].freq) { in rockchip_bus_clkfreq_target()
234 target_volt = bus->freq_table[i].volt; in rockchip_bus_clkfreq_target()
239 if (bus->cur_volt != target_volt) { in rockchip_bus_clkfreq_target()
240 dev_dbg(bus->dev, "target_volt: %lu\n", target_volt); in rockchip_bus_clkfreq_target()
241 if (regulator_set_voltage(bus->regulator, target_volt, in rockchip_bus_clkfreq_target()
247 bus->cur_volt = target_volt; in rockchip_bus_clkfreq_target()
257 struct rockchip_bus *bus = to_rockchip_bus_clk_nb(nb); in rockchip_bus_clk_notifier() local
260 dev_dbg(bus->dev, "event %lu, old_rate %lu, new_rate: %lu\n", in rockchip_bus_clk_notifier()
266 ret = rockchip_bus_clkfreq_target(bus->dev, in rockchip_bus_clk_notifier()
271 ret = rockchip_bus_clkfreq_target(bus->dev, in rockchip_bus_clk_notifier()
276 ret = rockchip_bus_clkfreq_target(bus->dev, in rockchip_bus_clk_notifier()
286 static int rockchip_bus_clkfreq(struct rockchip_bus *bus) in rockchip_bus_clkfreq() argument
288 struct device *dev = bus->dev; in rockchip_bus_clkfreq()
292 ret = rockchip_bus_power_control_init(bus); in rockchip_bus_clkfreq()
298 init_rate = clk_get_rate(bus->clk); in rockchip_bus_clkfreq()
303 bus->clk_nb.notifier_call = rockchip_bus_clk_notifier; in rockchip_bus_clkfreq()
304 ret = clk_notifier_register(bus->clk, &bus->clk_nb); in rockchip_bus_clkfreq()
316 struct rockchip_bus *bus = dev_get_drvdata(dev); in rockchip_bus_cpufreq_target() local
321 if (!bus->regulator) { in rockchip_bus_cpufreq_target()
322 dev_dbg(dev, "%luHz -> %luHz\n", bus->cur_rate, target_rate); in rockchip_bus_cpufreq_target()
323 ret = clk_set_rate(bus->clk, target_rate); in rockchip_bus_cpufreq_target()
325 dev_err(bus->dev, "failed to set bus rate %lu\n", in rockchip_bus_cpufreq_target()
328 bus->cur_rate = target_rate; in rockchip_bus_cpufreq_target()
340 if (bus->cur_rate == target_rate) { in rockchip_bus_cpufreq_target()
341 if (bus->cur_volt == target_volt) in rockchip_bus_cpufreq_target()
343 ret = regulator_set_voltage(bus->regulator, target_volt, in rockchip_bus_cpufreq_target()
350 bus->cur_volt = target_volt; in rockchip_bus_cpufreq_target()
352 } else if (!bus->cur_volt) { in rockchip_bus_cpufreq_target()
353 bus->cur_volt = regulator_get_voltage(bus->regulator); in rockchip_bus_cpufreq_target()
356 if (bus->cur_rate < target_rate) { in rockchip_bus_cpufreq_target()
357 ret = regulator_set_voltage(bus->regulator, target_volt, in rockchip_bus_cpufreq_target()
366 ret = clk_set_rate(bus->clk, target_rate); in rockchip_bus_cpufreq_target()
368 dev_err(dev, "failed to set bus rate %lu\n", target_rate); in rockchip_bus_cpufreq_target()
372 if (bus->cur_rate > target_rate) { in rockchip_bus_cpufreq_target()
373 ret = regulator_set_voltage(bus->regulator, target_volt, in rockchip_bus_cpufreq_target()
382 dev_dbg(dev, "%luHz %luuV -> %luHz %luuV\n", bus->cur_rate, in rockchip_bus_cpufreq_target()
383 bus->cur_volt, target_rate, target_volt); in rockchip_bus_cpufreq_target()
384 bus->cur_rate = target_rate; in rockchip_bus_cpufreq_target()
385 bus->cur_volt = target_volt; in rockchip_bus_cpufreq_target()
393 struct rockchip_bus *bus = to_rockchip_bus_cpufreq_nb(nb); in rockchip_bus_cpufreq_notifier() local
400 bus->cpu_freq[id] = freqs->new; in rockchip_bus_cpufreq_notifier()
402 if (!bus->cpu_freq[CLUSTER0] || !bus->cpu_freq[CLUSTER1]) in rockchip_bus_cpufreq_notifier()
407 if ((bus->cpu_freq[CLUSTER0] > bus->cpu_high_freq || in rockchip_bus_cpufreq_notifier()
408 bus->cpu_freq[CLUSTER1] > bus->cpu_high_freq) && in rockchip_bus_cpufreq_notifier()
409 bus->cur_rate != bus->high_rate) { in rockchip_bus_cpufreq_notifier()
410 dev_dbg(bus->dev, "cpu%d freq=%d %d, up cci rate to %lu\n", in rockchip_bus_cpufreq_notifier()
412 bus->cpu_freq[CLUSTER0], in rockchip_bus_cpufreq_notifier()
413 bus->cpu_freq[CLUSTER1], in rockchip_bus_cpufreq_notifier()
414 bus->high_rate); in rockchip_bus_cpufreq_notifier()
415 rockchip_bus_cpufreq_target(bus->dev, bus->high_rate, in rockchip_bus_cpufreq_notifier()
420 if (bus->cpu_freq[CLUSTER0] <= bus->cpu_high_freq && in rockchip_bus_cpufreq_notifier()
421 bus->cpu_freq[CLUSTER1] <= bus->cpu_high_freq && in rockchip_bus_cpufreq_notifier()
422 bus->cur_rate != bus->low_rate) { in rockchip_bus_cpufreq_notifier()
423 dev_dbg(bus->dev, "cpu%d freq=%d %d, down cci rate to %lu\n", in rockchip_bus_cpufreq_notifier()
425 bus->cpu_freq[CLUSTER0], in rockchip_bus_cpufreq_notifier()
426 bus->cpu_freq[CLUSTER1], in rockchip_bus_cpufreq_notifier()
427 bus->low_rate); in rockchip_bus_cpufreq_notifier()
428 rockchip_bus_cpufreq_target(bus->dev, bus->low_rate, in rockchip_bus_cpufreq_notifier()
437 static int rockchip_bus_cpufreq(struct rockchip_bus *bus) in rockchip_bus_cpufreq() argument
439 struct device *dev = bus->dev; in rockchip_bus_cpufreq()
445 ret = rockchip_bus_power_control_init(bus); in rockchip_bus_cpufreq()
451 bus->clk = devm_clk_get(dev, "bus"); in rockchip_bus_cpufreq()
452 if (IS_ERR(bus->clk)) { in rockchip_bus_cpufreq()
453 dev_err(dev, "failed to get bus clock\n"); in rockchip_bus_cpufreq()
454 return PTR_ERR(bus->clk); in rockchip_bus_cpufreq()
456 bus->regulator = NULL; in rockchip_bus_cpufreq()
459 ret = of_property_read_u32(np, "cpu-high-freq", &bus->cpu_high_freq); in rockchip_bus_cpufreq()
469 bus->high_rate = freq * 1000; in rockchip_bus_cpufreq()
475 bus->low_rate = freq * 1000; in rockchip_bus_cpufreq()
477 bus->cpufreq_nb.notifier_call = rockchip_bus_cpufreq_notifier; in rockchip_bus_cpufreq()
478 ret = cpufreq_register_notifier(&bus->cpufreq_nb, in rockchip_bus_cpufreq()
489 { .compatible = "rockchip,px30-bus", },
490 { .compatible = "rockchip,rk1808-bus", },
491 { .compatible = "rockchip,rk3288-bus", },
492 { .compatible = "rockchip,rk3368-bus", },
493 { .compatible = "rockchip,rk3399-bus", },
494 { .compatible = "rockchip,rk3528-bus", },
495 { .compatible = "rockchip,rk3562-bus", },
496 { .compatible = "rockchip,rk3568-bus", },
497 { .compatible = "rockchip,rk3588-bus", },
498 { .compatible = "rockchip,rv1126-bus", },
508 struct rockchip_bus *bus; in rockchip_busfreq_probe() local
512 bus = devm_kzalloc(dev, sizeof(*bus), GFP_KERNEL); in rockchip_busfreq_probe()
513 if (!bus) in rockchip_busfreq_probe()
515 bus->dev = dev; in rockchip_busfreq_probe()
516 platform_set_drvdata(pdev, bus); in rockchip_busfreq_probe()
526 ret = rockchip_bus_smc_config(bus); in rockchip_busfreq_probe()
528 ret = rockchip_bus_clkfreq(bus); in rockchip_busfreq_probe()
530 ret = rockchip_bus_cpufreq(bus); in rockchip_busfreq_probe()
538 .name = "rockchip,bus",