Lines Matching +full:clock +full:- +full:freq

2  * [origin: Linux kernel linux/arch/arm/mach-at91/clock.c]
6 * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
10 * SPDX-License-Identifier: GPL-2.0+
32 return gd->arch.main_clk_rate_hz; in at91_css_to_rate()
34 return gd->arch.plla_rate_hz; in at91_css_to_rate()
40 static u32 at91_pll_rate(u32 freq, u32 reg) in at91_pll_rate() argument
47 freq /= div; in at91_pll_rate()
48 freq *= mul + 1; in at91_pll_rate()
50 freq = 0; in at91_pll_rate()
53 return freq; in at91_pll_rate()
58 unsigned freq, mckr; in at91_clock_init() local
66 * of the main clock. in at91_clock_init()
70 tmp = readl(&pmc->mcfr); in at91_clock_init()
76 gd->arch.main_clk_rate_hz = main_clock; in at91_clock_init()
79 gd->arch.plla_rate_hz = at91_pll_rate(main_clock, readl(&pmc->pllar)); in at91_clock_init()
85 mckr = readl(&pmc->mckr); in at91_clock_init()
89 gd->arch.plla_rate_hz >>= 1; in at91_clock_init()
91 gd->arch.mck_rate_hz = at91_css_to_rate(mckr & AT91_PMC_MCKR_CSS_MASK); in at91_clock_init()
92 freq = gd->arch.mck_rate_hz; in at91_clock_init()
95 freq >>= mckr & AT91_PMC_MCKR_PRES_MASK; in at91_clock_init()
99 gd->arch.mck_rate_hz = freq / 2; in at91_clock_init()
102 gd->arch.mck_rate_hz = freq / 3; in at91_clock_init()
105 gd->arch.mck_rate_hz = freq / 4; in at91_clock_init()
111 gd->arch.cpu_clk_rate_hz = freq; in at91_clock_init()
120 writel(pllar, &pmc->pllar); in at91_plla_init()
121 while (!(readl(&pmc->sr) & (AT91_PMC_LOCKA | AT91_PMC_MCKRDY))) in at91_plla_init()
130 tmp = readl(&pmc->mckr); in at91_mck_init()
147 writel(tmp, &pmc->mckr); in at91_mck_init()
149 while (!(readl(&pmc->sr) & AT91_PMC_MCKRDY)) in at91_mck_init()
160 return -EINVAL; in at91_enable_periph_generated_clk()
163 return -EINVAL; in at91_enable_periph_generated_clk()
167 return -ENODEV; in at91_enable_periph_generated_clk()
170 writel(id, &pmc->pcr); in at91_enable_periph_generated_clk()
171 regval = readl(&pmc->pcr); in at91_enable_periph_generated_clk()
195 printf("Error GCK clock source selection!\n"); in at91_enable_periph_generated_clk()
196 return -EINVAL; in at91_enable_periph_generated_clk()
203 writel(regval, &pmc->pcr); in at91_enable_periph_generated_clk()
207 status = readl(&pmc->sr); in at91_enable_periph_generated_clk()
208 } while ((!!(--timeout)) && (!(status & AT91_PMC_GCKRDY))); in at91_enable_periph_generated_clk()
220 u32 freq; in at91_get_periph_generated_clk() local
225 writel(id, &pmc->pcr); in at91_get_periph_generated_clk()
226 regval = readl(&pmc->pcr); in at91_get_periph_generated_clk()
231 freq = CONFIG_SYS_AT91_SLOW_CLOCK; in at91_get_periph_generated_clk()
234 freq = gd->arch.main_clk_rate_hz; in at91_get_periph_generated_clk()
237 freq = gd->arch.plla_rate_hz; in at91_get_periph_generated_clk()
240 freq = AT91_UTMI_PLL_CLK_FREQ; in at91_get_periph_generated_clk()
243 freq = gd->arch.mck_rate_hz; in at91_get_periph_generated_clk()
246 printf("Improper GCK clock source selection!\n"); in at91_get_periph_generated_clk()
247 freq = 0; in at91_get_periph_generated_clk()
254 return freq / div; in at91_get_periph_generated_clk()