Lines Matching refs:dvfs_info

111 static struct exynos_dvfs_data *dvfs_info;  variable
117 struct cpufreq_frequency_table *pos, *freq_tbl = dvfs_info->freq_table; in init_div_table()
123 opp = dev_pm_opp_find_freq_exact(dvfs_info->dev, in init_div_table()
127 dev_err(dvfs_info->dev, in init_div_table()
158 __raw_writel(tmp, dvfs_info->base + XMU_PMU_P0_7 + 4 * in init_div_table()
169 struct cpufreq_frequency_table *freq_table = dvfs_info->freq_table; in exynos_enable_dvfs()
172 __raw_writel(0, dvfs_info->base + XMU_DVFS_CTRL); in exynos_enable_dvfs()
175 tmp = __raw_readl(dvfs_info->base + XMU_PMUEVTEN); in exynos_enable_dvfs()
177 __raw_writel(tmp, dvfs_info->base + XMU_PMUEVTEN); in exynos_enable_dvfs()
180 tmp = __raw_readl(dvfs_info->base + XMU_PMUIRQEN); in exynos_enable_dvfs()
182 __raw_writel(tmp, dvfs_info->base + XMU_PMUIRQEN); in exynos_enable_dvfs()
190 dev_crit(dvfs_info->dev, "Boot up frequency not supported\n"); in exynos_enable_dvfs()
196 dev_info(dvfs_info->dev, "Setting dvfs initial frequency = %uKHZ", in exynos_enable_dvfs()
200 tmp = __raw_readl(dvfs_info->base + XMU_C0_3_PSTATE + cpu * 4); in exynos_enable_dvfs()
203 __raw_writel(tmp, dvfs_info->base + XMU_C0_3_PSTATE + cpu * 4); in exynos_enable_dvfs()
208 dvfs_info->base + XMU_DVFS_CTRL); in exynos_enable_dvfs()
215 struct cpufreq_frequency_table *freq_table = dvfs_info->freq_table; in exynos_target()
226 tmp = __raw_readl(dvfs_info->base + XMU_C0_3_PSTATE + i * 4); in exynos_target()
230 __raw_writel(tmp, dvfs_info->base + XMU_C0_3_PSTATE + i * 4); in exynos_target()
240 struct cpufreq_frequency_table *freq_table = dvfs_info->freq_table; in exynos_cpufreq_work()
243 if (unlikely(dvfs_info->dvfs_enabled == false)) in exynos_cpufreq_work()
249 cur_pstate = __raw_readl(dvfs_info->base + XMU_P_STATUS); in exynos_cpufreq_work()
255 if (likely(index < dvfs_info->freq_count)) { in exynos_cpufreq_work()
258 dev_crit(dvfs_info->dev, "New frequency out of range\n"); in exynos_cpufreq_work()
266 enable_irq(dvfs_info->irq); in exynos_cpufreq_work()
273 tmp = __raw_readl(dvfs_info->base + XMU_PMUIRQ); in exynos_cpufreq_irq()
275 __raw_writel(tmp, dvfs_info->base + XMU_PMUIRQ); in exynos_cpufreq_irq()
277 schedule_work(&dvfs_info->irq_work); in exynos_cpufreq_irq()
284 struct cpufreq_frequency_table *freq_tbl = dvfs_info->freq_table; in exynos_sort_descend_freq_table()
293 for (i = 0; i < dvfs_info->freq_count / 2; i++) { in exynos_sort_descend_freq_table()
294 index = dvfs_info->freq_count - i - 1; in exynos_sort_descend_freq_table()
303 policy->clk = dvfs_info->cpu_clk; in exynos_cpufreq_cpu_init()
304 return cpufreq_generic_init(policy, dvfs_info->freq_table, in exynos_cpufreq_cpu_init()
305 dvfs_info->latency); in exynos_cpufreq_cpu_init()
338 dvfs_info = devm_kzalloc(&pdev->dev, sizeof(*dvfs_info), GFP_KERNEL); in exynos_cpufreq_probe()
339 if (!dvfs_info) { in exynos_cpufreq_probe()
344 dvfs_info->dev = &pdev->dev; in exynos_cpufreq_probe()
350 dvfs_info->base = devm_ioremap_resource(dvfs_info->dev, &res); in exynos_cpufreq_probe()
351 if (IS_ERR(dvfs_info->base)) { in exynos_cpufreq_probe()
352 ret = PTR_ERR(dvfs_info->base); in exynos_cpufreq_probe()
356 dvfs_info->irq = irq_of_parse_and_map(np, 0); in exynos_cpufreq_probe()
357 if (!dvfs_info->irq) { in exynos_cpufreq_probe()
358 dev_err(dvfs_info->dev, "No cpufreq irq found\n"); in exynos_cpufreq_probe()
363 ret = of_init_opp_table(dvfs_info->dev); in exynos_cpufreq_probe()
365 dev_err(dvfs_info->dev, "failed to init OPP table: %d\n", ret); in exynos_cpufreq_probe()
369 ret = dev_pm_opp_init_cpufreq_table(dvfs_info->dev, in exynos_cpufreq_probe()
370 &dvfs_info->freq_table); in exynos_cpufreq_probe()
372 dev_err(dvfs_info->dev, in exynos_cpufreq_probe()
376 dvfs_info->freq_count = dev_pm_opp_get_opp_count(dvfs_info->dev); in exynos_cpufreq_probe()
379 if (of_property_read_u32(np, "clock-latency", &dvfs_info->latency)) in exynos_cpufreq_probe()
380 dvfs_info->latency = DEF_TRANS_LATENCY; in exynos_cpufreq_probe()
382 dvfs_info->cpu_clk = devm_clk_get(dvfs_info->dev, "armclk"); in exynos_cpufreq_probe()
383 if (IS_ERR(dvfs_info->cpu_clk)) { in exynos_cpufreq_probe()
384 dev_err(dvfs_info->dev, "Failed to get cpu clock\n"); in exynos_cpufreq_probe()
385 ret = PTR_ERR(dvfs_info->cpu_clk); in exynos_cpufreq_probe()
389 cur_frequency = clk_get_rate(dvfs_info->cpu_clk); in exynos_cpufreq_probe()
391 dev_err(dvfs_info->dev, "Failed to get clock rate\n"); in exynos_cpufreq_probe()
397 INIT_WORK(&dvfs_info->irq_work, exynos_cpufreq_work); in exynos_cpufreq_probe()
398 ret = devm_request_irq(dvfs_info->dev, dvfs_info->irq, in exynos_cpufreq_probe()
400 CPUFREQ_NAME, dvfs_info); in exynos_cpufreq_probe()
402 dev_err(dvfs_info->dev, "Failed to register IRQ\n"); in exynos_cpufreq_probe()
408 dev_err(dvfs_info->dev, "Failed to initialise div table\n"); in exynos_cpufreq_probe()
415 dev_err(dvfs_info->dev, in exynos_cpufreq_probe()
421 dvfs_info->dvfs_enabled = true; in exynos_cpufreq_probe()
425 dev_pm_opp_free_cpufreq_table(dvfs_info->dev, &dvfs_info->freq_table); in exynos_cpufreq_probe()
427 of_free_opp_table(dvfs_info->dev); in exynos_cpufreq_probe()
437 dev_pm_opp_free_cpufreq_table(dvfs_info->dev, &dvfs_info->freq_table); in exynos_cpufreq_remove()
438 of_free_opp_table(dvfs_info->dev); in exynos_cpufreq_remove()