Lines Matching +full:virtual +full:- +full:cpufreq

1 // SPDX-License-Identifier: GPL-2.0-only
3 * OMAP2xxx DVFS virtual clock functions
5 * Copyright (C) 2005-2008, 2012 Texas Instruments, Inc.
6 * Copyright (C) 2004-2010 Nokia Corporation
9 * Richard Woodruff <r-[email protected]>
30 #include <linux/cpufreq.h>
38 #include "cm-regbits-24xx.h"
48 * sys_ck_rate: the rate of the external high-frequency clock
49 * oscillator on the board. Set by the SoC-specific clock init code.
55 * omap2_table_mpu_recalc - just return the MPU speed
63 return curr_prcm_set->mpu_speed; in omap2_table_mpu_recalc()
70 * Some might argue L3-DDR, others ARM, others IVA. This code is simple and
79 highest_rate = -EINVAL; in omap2_round_to_table_rate()
81 for (ptr = rate_table; ptr->mpu_speed; ptr++) { in omap2_round_to_table_rate()
82 if (!(ptr->flags & cpu_mask)) in omap2_round_to_table_rate()
84 if (ptr->xtal_speed != sys_ck_rate) in omap2_round_to_table_rate()
87 highest_rate = ptr->mpu_speed; in omap2_round_to_table_rate()
90 if (ptr->mpu_speed <= rate) in omap2_round_to_table_rate()
105 for (prcm = rate_table; prcm->mpu_speed; prcm++) { in omap2_select_table_rate()
106 if (!(prcm->flags & cpu_mask)) in omap2_select_table_rate()
109 if (prcm->xtal_speed != sys_ck_rate) in omap2_select_table_rate()
112 if (prcm->mpu_speed <= rate) { in omap2_select_table_rate()
113 found_speed = prcm->mpu_speed; in omap2_select_table_rate()
121 return -EINVAL; in omap2_select_table_rate()
127 if (prcm->dpll_speed == cur_rate / 2) { in omap2_select_table_rate()
129 } else if (prcm->dpll_speed == cur_rate * 2) { in omap2_select_table_rate()
131 } else if (prcm->dpll_speed != cur_rate) { in omap2_select_table_rate()
134 if (prcm->dpll_speed == prcm->xtal_speed) in omap2_select_table_rate()
137 if ((prcm->cm_clksel2_pll & OMAP24XX_CORE_CLK_SRC_MASK) == in omap2_select_table_rate()
143 omap2xxx_cm_set_mod_dividers(prcm->cm_clksel_mpu, in omap2_select_table_rate()
144 prcm->cm_clksel_dsp, in omap2_select_table_rate()
145 prcm->cm_clksel_gfx, in omap2_select_table_rate()
146 prcm->cm_clksel1_core, in omap2_select_table_rate()
147 prcm->cm_clksel_mdm); in omap2_select_table_rate()
152 omap2_set_prcm(prcm->cm_clksel1_pll, prcm->base_sdrc_rfr, in omap2_select_table_rate()
165 * omap2xxx_clkt_vps_check_bootloader_rates - determine which of the rate
178 for (prcm = rate_table; prcm->mpu_speed; prcm++) { in omap2xxx_clkt_vps_check_bootloader_rates()
179 if (!(prcm->flags & cpu_mask)) in omap2xxx_clkt_vps_check_bootloader_rates()
181 if (prcm->xtal_speed != sys_ck_rate) in omap2xxx_clkt_vps_check_bootloader_rates()
183 if (prcm->dpll_speed <= rate) in omap2xxx_clkt_vps_check_bootloader_rates()
190 * omap2xxx_clkt_vps_late_init - store a copy of the sys_ck rate
193 * code. (The sys_ck rate does not -- or rather, must not -- change
212 #include <linux/clk-provider.h>
222 * omap2xxx_clkt_vps_init - initialize virt_prcm_set clock
224 * Does a manual init for the virtual prcm DVFS clock for OMAP2. This
225 * function is called only from omap2 DT clock init, as the virtual
246 hw->hw.init = &init; in omap2xxx_clkt_vps_init()
248 clk = clk_register(NULL, &hw->hw); in omap2xxx_clkt_vps_init()