1 /*
2  * arch/arm/mach-tegra/tegra2_clocks.c
3  *
4  * Copyright (C) 2010 Google, Inc.
5  *
6  * Author:
7  *	Colin Cross <ccross@google.com>
8  *
9  * This software is licensed under the terms of the GNU General Public
10  * License version 2, as published by the Free Software Foundation, and
11  * may be copied, distributed, and modified under those terms.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  */
19 
20 #include <linux/kernel.h>
21 #include <linux/module.h>
22 #include <linux/list.h>
23 #include <linux/spinlock.h>
24 #include <linux/delay.h>
25 #include <linux/io.h>
26 #include <linux/clkdev.h>
27 #include <linux/clk.h>
28 
29 #include <mach/iomap.h>
30 #include <mach/suspend.h>
31 
32 #include "clock.h"
33 #include "fuse.h"
34 #include "tegra2_emc.h"
35 
36 #define RST_DEVICES			0x004
37 #define RST_DEVICES_SET			0x300
38 #define RST_DEVICES_CLR			0x304
39 #define RST_DEVICES_NUM			3
40 
41 #define CLK_OUT_ENB			0x010
42 #define CLK_OUT_ENB_SET			0x320
43 #define CLK_OUT_ENB_CLR			0x324
44 #define CLK_OUT_ENB_NUM			3
45 
46 #define CLK_MASK_ARM			0x44
47 #define MISC_CLK_ENB			0x48
48 
49 #define OSC_CTRL			0x50
50 #define OSC_CTRL_OSC_FREQ_MASK		(3<<30)
51 #define OSC_CTRL_OSC_FREQ_13MHZ		(0<<30)
52 #define OSC_CTRL_OSC_FREQ_19_2MHZ	(1<<30)
53 #define OSC_CTRL_OSC_FREQ_12MHZ		(2<<30)
54 #define OSC_CTRL_OSC_FREQ_26MHZ		(3<<30)
55 #define OSC_CTRL_MASK			(0x3f2 | OSC_CTRL_OSC_FREQ_MASK)
56 
57 #define OSC_FREQ_DET			0x58
58 #define OSC_FREQ_DET_TRIG		(1<<31)
59 
60 #define OSC_FREQ_DET_STATUS		0x5C
61 #define OSC_FREQ_DET_BUSY		(1<<31)
62 #define OSC_FREQ_DET_CNT_MASK		0xFFFF
63 
64 #define PERIPH_CLK_SOURCE_I2S1		0x100
65 #define PERIPH_CLK_SOURCE_EMC		0x19c
66 #define PERIPH_CLK_SOURCE_OSC		0x1fc
67 #define PERIPH_CLK_SOURCE_NUM \
68 	((PERIPH_CLK_SOURCE_OSC - PERIPH_CLK_SOURCE_I2S1) / 4)
69 
70 #define PERIPH_CLK_SOURCE_MASK		(3<<30)
71 #define PERIPH_CLK_SOURCE_SHIFT		30
72 #define PERIPH_CLK_SOURCE_ENABLE	(1<<28)
73 #define PERIPH_CLK_SOURCE_DIVU71_MASK	0xFF
74 #define PERIPH_CLK_SOURCE_DIVU16_MASK	0xFFFF
75 #define PERIPH_CLK_SOURCE_DIV_SHIFT	0
76 
77 #define SDMMC_CLK_INT_FB_SEL		(1 << 23)
78 #define SDMMC_CLK_INT_FB_DLY_SHIFT	16
79 #define SDMMC_CLK_INT_FB_DLY_MASK	(0xF << SDMMC_CLK_INT_FB_DLY_SHIFT)
80 
81 #define PLL_BASE			0x0
82 #define PLL_BASE_BYPASS			(1<<31)
83 #define PLL_BASE_ENABLE			(1<<30)
84 #define PLL_BASE_REF_ENABLE		(1<<29)
85 #define PLL_BASE_OVERRIDE		(1<<28)
86 #define PLL_BASE_DIVP_MASK		(0x7<<20)
87 #define PLL_BASE_DIVP_SHIFT		20
88 #define PLL_BASE_DIVN_MASK		(0x3FF<<8)
89 #define PLL_BASE_DIVN_SHIFT		8
90 #define PLL_BASE_DIVM_MASK		(0x1F)
91 #define PLL_BASE_DIVM_SHIFT		0
92 
93 #define PLL_OUT_RATIO_MASK		(0xFF<<8)
94 #define PLL_OUT_RATIO_SHIFT		8
95 #define PLL_OUT_OVERRIDE		(1<<2)
96 #define PLL_OUT_CLKEN			(1<<1)
97 #define PLL_OUT_RESET_DISABLE		(1<<0)
98 
99 #define PLL_MISC(c)			(((c)->flags & PLL_ALT_MISC_REG) ? 0x4 : 0xc)
100 
101 #define PLL_MISC_DCCON_SHIFT		20
102 #define PLL_MISC_CPCON_SHIFT		8
103 #define PLL_MISC_CPCON_MASK		(0xF<<PLL_MISC_CPCON_SHIFT)
104 #define PLL_MISC_LFCON_SHIFT		4
105 #define PLL_MISC_LFCON_MASK		(0xF<<PLL_MISC_LFCON_SHIFT)
106 #define PLL_MISC_VCOCON_SHIFT		0
107 #define PLL_MISC_VCOCON_MASK		(0xF<<PLL_MISC_VCOCON_SHIFT)
108 
109 #define PLLU_BASE_POST_DIV		(1<<20)
110 
111 #define PLLD_MISC_CLKENABLE		(1<<30)
112 #define PLLD_MISC_DIV_RST		(1<<23)
113 #define PLLD_MISC_DCCON_SHIFT		12
114 
115 #define PLLE_MISC_READY			(1 << 15)
116 
117 #define PERIPH_CLK_TO_ENB_REG(c)	((c->u.periph.clk_num / 32) * 4)
118 #define PERIPH_CLK_TO_ENB_SET_REG(c)	((c->u.periph.clk_num / 32) * 8)
119 #define PERIPH_CLK_TO_ENB_BIT(c)	(1 << (c->u.periph.clk_num % 32))
120 
121 #define SUPER_CLK_MUX			0x00
122 #define SUPER_STATE_SHIFT		28
123 #define SUPER_STATE_MASK		(0xF << SUPER_STATE_SHIFT)
124 #define SUPER_STATE_STANDBY		(0x0 << SUPER_STATE_SHIFT)
125 #define SUPER_STATE_IDLE		(0x1 << SUPER_STATE_SHIFT)
126 #define SUPER_STATE_RUN			(0x2 << SUPER_STATE_SHIFT)
127 #define SUPER_STATE_IRQ			(0x3 << SUPER_STATE_SHIFT)
128 #define SUPER_STATE_FIQ			(0x4 << SUPER_STATE_SHIFT)
129 #define SUPER_SOURCE_MASK		0xF
130 #define	SUPER_FIQ_SOURCE_SHIFT		12
131 #define	SUPER_IRQ_SOURCE_SHIFT		8
132 #define	SUPER_RUN_SOURCE_SHIFT		4
133 #define	SUPER_IDLE_SOURCE_SHIFT		0
134 
135 #define SUPER_CLK_DIVIDER		0x04
136 
137 #define BUS_CLK_DISABLE			(1<<3)
138 #define BUS_CLK_DIV_MASK		0x3
139 
140 #define PMC_CTRL			0x0
141  #define PMC_CTRL_BLINK_ENB		(1 << 7)
142 
143 #define PMC_DPD_PADS_ORIDE		0x1c
144  #define PMC_DPD_PADS_ORIDE_BLINK_ENB	(1 << 20)
145 
146 #define PMC_BLINK_TIMER_DATA_ON_SHIFT	0
147 #define PMC_BLINK_TIMER_DATA_ON_MASK	0x7fff
148 #define PMC_BLINK_TIMER_ENB		(1 << 15)
149 #define PMC_BLINK_TIMER_DATA_OFF_SHIFT	16
150 #define PMC_BLINK_TIMER_DATA_OFF_MASK	0xffff
151 
152 static void __iomem *reg_clk_base = IO_ADDRESS(TEGRA_CLK_RESET_BASE);
153 static void __iomem *reg_pmc_base = IO_ADDRESS(TEGRA_PMC_BASE);
154 
155 /*
156  * Some clocks share a register with other clocks.  Any clock op that
157  * non-atomically modifies a register used by another clock must lock
158  * clock_register_lock first.
159  */
160 static DEFINE_SPINLOCK(clock_register_lock);
161 
162 /*
163  * Some peripheral clocks share an enable bit, so refcount the enable bits
164  * in registers CLK_ENABLE_L, CLK_ENABLE_H, and CLK_ENABLE_U
165  */
166 static int tegra_periph_clk_enable_refcount[3 * 32];
167 
168 #define clk_writel(value, reg) \
169 	__raw_writel(value, (u32)reg_clk_base + (reg))
170 #define clk_readl(reg) \
171 	__raw_readl((u32)reg_clk_base + (reg))
172 #define pmc_writel(value, reg) \
173 	__raw_writel(value, (u32)reg_pmc_base + (reg))
174 #define pmc_readl(reg) \
175 	__raw_readl((u32)reg_pmc_base + (reg))
176 
clk_measure_input_freq(void)177 unsigned long clk_measure_input_freq(void)
178 {
179 	u32 clock_autodetect;
180 	clk_writel(OSC_FREQ_DET_TRIG | 1, OSC_FREQ_DET);
181 	do {} while (clk_readl(OSC_FREQ_DET_STATUS) & OSC_FREQ_DET_BUSY);
182 	clock_autodetect = clk_readl(OSC_FREQ_DET_STATUS);
183 	if (clock_autodetect >= 732 - 3 && clock_autodetect <= 732 + 3) {
184 		return 12000000;
185 	} else if (clock_autodetect >= 794 - 3 && clock_autodetect <= 794 + 3) {
186 		return 13000000;
187 	} else if (clock_autodetect >= 1172 - 3 && clock_autodetect <= 1172 + 3) {
188 		return 19200000;
189 	} else if (clock_autodetect >= 1587 - 3 && clock_autodetect <= 1587 + 3) {
190 		return 26000000;
191 	} else {
192 		pr_err("%s: Unexpected clock autodetect value %d", __func__, clock_autodetect);
193 		BUG();
194 		return 0;
195 	}
196 }
197 
clk_div71_get_divider(unsigned long parent_rate,unsigned long rate)198 static int clk_div71_get_divider(unsigned long parent_rate, unsigned long rate)
199 {
200 	s64 divider_u71 = parent_rate * 2;
201 	divider_u71 += rate - 1;
202 	do_div(divider_u71, rate);
203 
204 	if (divider_u71 - 2 < 0)
205 		return 0;
206 
207 	if (divider_u71 - 2 > 255)
208 		return -EINVAL;
209 
210 	return divider_u71 - 2;
211 }
212 
clk_div16_get_divider(unsigned long parent_rate,unsigned long rate)213 static int clk_div16_get_divider(unsigned long parent_rate, unsigned long rate)
214 {
215 	s64 divider_u16;
216 
217 	divider_u16 = parent_rate;
218 	divider_u16 += rate - 1;
219 	do_div(divider_u16, rate);
220 
221 	if (divider_u16 - 1 < 0)
222 		return 0;
223 
224 	if (divider_u16 - 1 > 255)
225 		return -EINVAL;
226 
227 	return divider_u16 - 1;
228 }
229 
230 /* clk_m functions */
tegra2_clk_m_autodetect_rate(struct clk * c)231 static unsigned long tegra2_clk_m_autodetect_rate(struct clk *c)
232 {
233 	u32 auto_clock_control = clk_readl(OSC_CTRL) & ~OSC_CTRL_OSC_FREQ_MASK;
234 
235 	c->rate = clk_measure_input_freq();
236 	switch (c->rate) {
237 	case 12000000:
238 		auto_clock_control |= OSC_CTRL_OSC_FREQ_12MHZ;
239 		break;
240 	case 13000000:
241 		auto_clock_control |= OSC_CTRL_OSC_FREQ_13MHZ;
242 		break;
243 	case 19200000:
244 		auto_clock_control |= OSC_CTRL_OSC_FREQ_19_2MHZ;
245 		break;
246 	case 26000000:
247 		auto_clock_control |= OSC_CTRL_OSC_FREQ_26MHZ;
248 		break;
249 	default:
250 		pr_err("%s: Unexpected clock rate %ld", __func__, c->rate);
251 		BUG();
252 	}
253 	clk_writel(auto_clock_control, OSC_CTRL);
254 	return c->rate;
255 }
256 
tegra2_clk_m_init(struct clk * c)257 static void tegra2_clk_m_init(struct clk *c)
258 {
259 	pr_debug("%s on clock %s\n", __func__, c->name);
260 	tegra2_clk_m_autodetect_rate(c);
261 }
262 
tegra2_clk_m_enable(struct clk * c)263 static int tegra2_clk_m_enable(struct clk *c)
264 {
265 	pr_debug("%s on clock %s\n", __func__, c->name);
266 	return 0;
267 }
268 
tegra2_clk_m_disable(struct clk * c)269 static void tegra2_clk_m_disable(struct clk *c)
270 {
271 	pr_debug("%s on clock %s\n", __func__, c->name);
272 	BUG();
273 }
274 
275 static struct clk_ops tegra_clk_m_ops = {
276 	.init		= tegra2_clk_m_init,
277 	.enable		= tegra2_clk_m_enable,
278 	.disable	= tegra2_clk_m_disable,
279 };
280 
tegra2_periph_reset_assert(struct clk * c)281 void tegra2_periph_reset_assert(struct clk *c)
282 {
283 	BUG_ON(!c->ops->reset);
284 	c->ops->reset(c, true);
285 }
286 
tegra2_periph_reset_deassert(struct clk * c)287 void tegra2_periph_reset_deassert(struct clk *c)
288 {
289 	BUG_ON(!c->ops->reset);
290 	c->ops->reset(c, false);
291 }
292 
293 /* super clock functions */
294 /* "super clocks" on tegra have two-stage muxes and a clock skipping
295  * super divider.  We will ignore the clock skipping divider, since we
296  * can't lower the voltage when using the clock skip, but we can if we
297  * lower the PLL frequency.
298  */
tegra2_super_clk_init(struct clk * c)299 static void tegra2_super_clk_init(struct clk *c)
300 {
301 	u32 val;
302 	int source;
303 	int shift;
304 	const struct clk_mux_sel *sel;
305 	val = clk_readl(c->reg + SUPER_CLK_MUX);
306 	c->state = ON;
307 	BUG_ON(((val & SUPER_STATE_MASK) != SUPER_STATE_RUN) &&
308 		((val & SUPER_STATE_MASK) != SUPER_STATE_IDLE));
309 	shift = ((val & SUPER_STATE_MASK) == SUPER_STATE_IDLE) ?
310 		SUPER_IDLE_SOURCE_SHIFT : SUPER_RUN_SOURCE_SHIFT;
311 	source = (val >> shift) & SUPER_SOURCE_MASK;
312 	for (sel = c->inputs; sel->input != NULL; sel++) {
313 		if (sel->value == source)
314 			break;
315 	}
316 	BUG_ON(sel->input == NULL);
317 	c->parent = sel->input;
318 }
319 
tegra2_super_clk_enable(struct clk * c)320 static int tegra2_super_clk_enable(struct clk *c)
321 {
322 	clk_writel(0, c->reg + SUPER_CLK_DIVIDER);
323 	return 0;
324 }
325 
tegra2_super_clk_disable(struct clk * c)326 static void tegra2_super_clk_disable(struct clk *c)
327 {
328 	pr_debug("%s on clock %s\n", __func__, c->name);
329 
330 	/* oops - don't disable the CPU clock! */
331 	BUG();
332 }
333 
tegra2_super_clk_set_parent(struct clk * c,struct clk * p)334 static int tegra2_super_clk_set_parent(struct clk *c, struct clk *p)
335 {
336 	u32 val;
337 	const struct clk_mux_sel *sel;
338 	int shift;
339 
340 	val = clk_readl(c->reg + SUPER_CLK_MUX);;
341 	BUG_ON(((val & SUPER_STATE_MASK) != SUPER_STATE_RUN) &&
342 		((val & SUPER_STATE_MASK) != SUPER_STATE_IDLE));
343 	shift = ((val & SUPER_STATE_MASK) == SUPER_STATE_IDLE) ?
344 		SUPER_IDLE_SOURCE_SHIFT : SUPER_RUN_SOURCE_SHIFT;
345 	for (sel = c->inputs; sel->input != NULL; sel++) {
346 		if (sel->input == p) {
347 			val &= ~(SUPER_SOURCE_MASK << shift);
348 			val |= sel->value << shift;
349 
350 			if (c->refcnt)
351 				clk_enable(p);
352 
353 			clk_writel(val, c->reg);
354 
355 			if (c->refcnt && c->parent)
356 				clk_disable(c->parent);
357 
358 			clk_reparent(c, p);
359 			return 0;
360 		}
361 	}
362 	return -EINVAL;
363 }
364 
365 /*
366  * Super clocks have "clock skippers" instead of dividers.  Dividing using
367  * a clock skipper does not allow the voltage to be scaled down, so instead
368  * adjust the rate of the parent clock.  This requires that the parent of a
369  * super clock have no other children, otherwise the rate will change
370  * underneath the other children.
371  */
tegra2_super_clk_set_rate(struct clk * c,unsigned long rate)372 static int tegra2_super_clk_set_rate(struct clk *c, unsigned long rate)
373 {
374 	return clk_set_rate(c->parent, rate);
375 }
376 
377 static struct clk_ops tegra_super_ops = {
378 	.init			= tegra2_super_clk_init,
379 	.enable			= tegra2_super_clk_enable,
380 	.disable		= tegra2_super_clk_disable,
381 	.set_parent		= tegra2_super_clk_set_parent,
382 	.set_rate		= tegra2_super_clk_set_rate,
383 };
384 
385 /* virtual cpu clock functions */
386 /* some clocks can not be stopped (cpu, memory bus) while the SoC is running.
387    To change the frequency of these clocks, the parent pll may need to be
388    reprogrammed, so the clock must be moved off the pll, the pll reprogrammed,
389    and then the clock moved back to the pll.  To hide this sequence, a virtual
390    clock handles it.
391  */
tegra2_cpu_clk_init(struct clk * c)392 static void tegra2_cpu_clk_init(struct clk *c)
393 {
394 }
395 
tegra2_cpu_clk_enable(struct clk * c)396 static int tegra2_cpu_clk_enable(struct clk *c)
397 {
398 	return 0;
399 }
400 
tegra2_cpu_clk_disable(struct clk * c)401 static void tegra2_cpu_clk_disable(struct clk *c)
402 {
403 	pr_debug("%s on clock %s\n", __func__, c->name);
404 
405 	/* oops - don't disable the CPU clock! */
406 	BUG();
407 }
408 
tegra2_cpu_clk_set_rate(struct clk * c,unsigned long rate)409 static int tegra2_cpu_clk_set_rate(struct clk *c, unsigned long rate)
410 {
411 	int ret;
412 	/*
413 	 * Take an extra reference to the main pll so it doesn't turn
414 	 * off when we move the cpu off of it
415 	 */
416 	clk_enable(c->u.cpu.main);
417 
418 	ret = clk_set_parent(c->parent, c->u.cpu.backup);
419 	if (ret) {
420 		pr_err("Failed to switch cpu to clock %s\n", c->u.cpu.backup->name);
421 		goto out;
422 	}
423 
424 	if (rate == clk_get_rate(c->u.cpu.backup))
425 		goto out;
426 
427 	ret = clk_set_rate(c->u.cpu.main, rate);
428 	if (ret) {
429 		pr_err("Failed to change cpu pll to %lu\n", rate);
430 		goto out;
431 	}
432 
433 	ret = clk_set_parent(c->parent, c->u.cpu.main);
434 	if (ret) {
435 		pr_err("Failed to switch cpu to clock %s\n", c->u.cpu.main->name);
436 		goto out;
437 	}
438 
439 out:
440 	clk_disable(c->u.cpu.main);
441 	return ret;
442 }
443 
444 static struct clk_ops tegra_cpu_ops = {
445 	.init     = tegra2_cpu_clk_init,
446 	.enable   = tegra2_cpu_clk_enable,
447 	.disable  = tegra2_cpu_clk_disable,
448 	.set_rate = tegra2_cpu_clk_set_rate,
449 };
450 
451 /* virtual cop clock functions. Used to acquire the fake 'cop' clock to
452  * reset the COP block (i.e. AVP) */
tegra2_cop_clk_reset(struct clk * c,bool assert)453 static void tegra2_cop_clk_reset(struct clk *c, bool assert)
454 {
455 	unsigned long reg = assert ? RST_DEVICES_SET : RST_DEVICES_CLR;
456 
457 	pr_debug("%s %s\n", __func__, assert ? "assert" : "deassert");
458 	clk_writel(1 << 1, reg);
459 }
460 
461 static struct clk_ops tegra_cop_ops = {
462 	.reset    = tegra2_cop_clk_reset,
463 };
464 
465 /* bus clock functions */
tegra2_bus_clk_init(struct clk * c)466 static void tegra2_bus_clk_init(struct clk *c)
467 {
468 	u32 val = clk_readl(c->reg);
469 	c->state = ((val >> c->reg_shift) & BUS_CLK_DISABLE) ? OFF : ON;
470 	c->div = ((val >> c->reg_shift) & BUS_CLK_DIV_MASK) + 1;
471 	c->mul = 1;
472 }
473 
tegra2_bus_clk_enable(struct clk * c)474 static int tegra2_bus_clk_enable(struct clk *c)
475 {
476 	u32 val;
477 	unsigned long flags;
478 
479 	spin_lock_irqsave(&clock_register_lock, flags);
480 
481 	val = clk_readl(c->reg);
482 	val &= ~(BUS_CLK_DISABLE << c->reg_shift);
483 	clk_writel(val, c->reg);
484 
485 	spin_unlock_irqrestore(&clock_register_lock, flags);
486 
487 	return 0;
488 }
489 
tegra2_bus_clk_disable(struct clk * c)490 static void tegra2_bus_clk_disable(struct clk *c)
491 {
492 	u32 val;
493 	unsigned long flags;
494 
495 	spin_lock_irqsave(&clock_register_lock, flags);
496 
497 	val = clk_readl(c->reg);
498 	val |= BUS_CLK_DISABLE << c->reg_shift;
499 	clk_writel(val, c->reg);
500 
501 	spin_unlock_irqrestore(&clock_register_lock, flags);
502 }
503 
tegra2_bus_clk_set_rate(struct clk * c,unsigned long rate)504 static int tegra2_bus_clk_set_rate(struct clk *c, unsigned long rate)
505 {
506 	u32 val;
507 	unsigned long parent_rate = clk_get_rate(c->parent);
508 	unsigned long flags;
509 	int ret = -EINVAL;
510 	int i;
511 
512 	spin_lock_irqsave(&clock_register_lock, flags);
513 
514 	val = clk_readl(c->reg);
515 	for (i = 1; i <= 4; i++) {
516 		if (rate == parent_rate / i) {
517 			val &= ~(BUS_CLK_DIV_MASK << c->reg_shift);
518 			val |= (i - 1) << c->reg_shift;
519 			clk_writel(val, c->reg);
520 			c->div = i;
521 			c->mul = 1;
522 			ret = 0;
523 			break;
524 		}
525 	}
526 
527 	spin_unlock_irqrestore(&clock_register_lock, flags);
528 
529 	return ret;
530 }
531 
532 static struct clk_ops tegra_bus_ops = {
533 	.init			= tegra2_bus_clk_init,
534 	.enable			= tegra2_bus_clk_enable,
535 	.disable		= tegra2_bus_clk_disable,
536 	.set_rate		= tegra2_bus_clk_set_rate,
537 };
538 
539 /* Blink output functions */
540 
tegra2_blink_clk_init(struct clk * c)541 static void tegra2_blink_clk_init(struct clk *c)
542 {
543 	u32 val;
544 
545 	val = pmc_readl(PMC_CTRL);
546 	c->state = (val & PMC_CTRL_BLINK_ENB) ? ON : OFF;
547 	c->mul = 1;
548 	val = pmc_readl(c->reg);
549 
550 	if (val & PMC_BLINK_TIMER_ENB) {
551 		unsigned int on_off;
552 
553 		on_off = (val >> PMC_BLINK_TIMER_DATA_ON_SHIFT) &
554 			PMC_BLINK_TIMER_DATA_ON_MASK;
555 		val >>= PMC_BLINK_TIMER_DATA_OFF_SHIFT;
556 		val &= PMC_BLINK_TIMER_DATA_OFF_MASK;
557 		on_off += val;
558 		/* each tick in the blink timer is 4 32KHz clocks */
559 		c->div = on_off * 4;
560 	} else {
561 		c->div = 1;
562 	}
563 }
564 
tegra2_blink_clk_enable(struct clk * c)565 static int tegra2_blink_clk_enable(struct clk *c)
566 {
567 	u32 val;
568 
569 	val = pmc_readl(PMC_DPD_PADS_ORIDE);
570 	pmc_writel(val | PMC_DPD_PADS_ORIDE_BLINK_ENB, PMC_DPD_PADS_ORIDE);
571 
572 	val = pmc_readl(PMC_CTRL);
573 	pmc_writel(val | PMC_CTRL_BLINK_ENB, PMC_CTRL);
574 
575 	return 0;
576 }
577 
tegra2_blink_clk_disable(struct clk * c)578 static void tegra2_blink_clk_disable(struct clk *c)
579 {
580 	u32 val;
581 
582 	val = pmc_readl(PMC_CTRL);
583 	pmc_writel(val & ~PMC_CTRL_BLINK_ENB, PMC_CTRL);
584 
585 	val = pmc_readl(PMC_DPD_PADS_ORIDE);
586 	pmc_writel(val & ~PMC_DPD_PADS_ORIDE_BLINK_ENB, PMC_DPD_PADS_ORIDE);
587 }
588 
tegra2_blink_clk_set_rate(struct clk * c,unsigned long rate)589 static int tegra2_blink_clk_set_rate(struct clk *c, unsigned long rate)
590 {
591 	unsigned long parent_rate = clk_get_rate(c->parent);
592 	if (rate >= parent_rate) {
593 		c->div = 1;
594 		pmc_writel(0, c->reg);
595 	} else {
596 		unsigned int on_off;
597 		u32 val;
598 
599 		on_off = DIV_ROUND_UP(parent_rate / 8, rate);
600 		c->div = on_off * 8;
601 
602 		val = (on_off & PMC_BLINK_TIMER_DATA_ON_MASK) <<
603 			PMC_BLINK_TIMER_DATA_ON_SHIFT;
604 		on_off &= PMC_BLINK_TIMER_DATA_OFF_MASK;
605 		on_off <<= PMC_BLINK_TIMER_DATA_OFF_SHIFT;
606 		val |= on_off;
607 		val |= PMC_BLINK_TIMER_ENB;
608 		pmc_writel(val, c->reg);
609 	}
610 
611 	return 0;
612 }
613 
614 static struct clk_ops tegra_blink_clk_ops = {
615 	.init			= &tegra2_blink_clk_init,
616 	.enable			= &tegra2_blink_clk_enable,
617 	.disable		= &tegra2_blink_clk_disable,
618 	.set_rate		= &tegra2_blink_clk_set_rate,
619 };
620 
621 /* PLL Functions */
tegra2_pll_clk_wait_for_lock(struct clk * c)622 static int tegra2_pll_clk_wait_for_lock(struct clk *c)
623 {
624 	udelay(c->u.pll.lock_delay);
625 
626 	return 0;
627 }
628 
tegra2_pll_clk_init(struct clk * c)629 static void tegra2_pll_clk_init(struct clk *c)
630 {
631 	u32 val = clk_readl(c->reg + PLL_BASE);
632 
633 	c->state = (val & PLL_BASE_ENABLE) ? ON : OFF;
634 
635 	if (c->flags & PLL_FIXED && !(val & PLL_BASE_OVERRIDE)) {
636 		pr_warning("Clock %s has unknown fixed frequency\n", c->name);
637 		c->mul = 1;
638 		c->div = 1;
639 	} else if (val & PLL_BASE_BYPASS) {
640 		c->mul = 1;
641 		c->div = 1;
642 	} else {
643 		c->mul = (val & PLL_BASE_DIVN_MASK) >> PLL_BASE_DIVN_SHIFT;
644 		c->div = (val & PLL_BASE_DIVM_MASK) >> PLL_BASE_DIVM_SHIFT;
645 		if (c->flags & PLLU)
646 			c->div *= (val & PLLU_BASE_POST_DIV) ? 1 : 2;
647 		else
648 			c->div *= (val & PLL_BASE_DIVP_MASK) ? 2 : 1;
649 	}
650 }
651 
tegra2_pll_clk_enable(struct clk * c)652 static int tegra2_pll_clk_enable(struct clk *c)
653 {
654 	u32 val;
655 	pr_debug("%s on clock %s\n", __func__, c->name);
656 
657 	val = clk_readl(c->reg + PLL_BASE);
658 	val &= ~PLL_BASE_BYPASS;
659 	val |= PLL_BASE_ENABLE;
660 	clk_writel(val, c->reg + PLL_BASE);
661 
662 	tegra2_pll_clk_wait_for_lock(c);
663 
664 	return 0;
665 }
666 
tegra2_pll_clk_disable(struct clk * c)667 static void tegra2_pll_clk_disable(struct clk *c)
668 {
669 	u32 val;
670 	pr_debug("%s on clock %s\n", __func__, c->name);
671 
672 	val = clk_readl(c->reg);
673 	val &= ~(PLL_BASE_BYPASS | PLL_BASE_ENABLE);
674 	clk_writel(val, c->reg);
675 }
676 
tegra2_pll_clk_set_rate(struct clk * c,unsigned long rate)677 static int tegra2_pll_clk_set_rate(struct clk *c, unsigned long rate)
678 {
679 	u32 val;
680 	unsigned long input_rate;
681 	const struct clk_pll_freq_table *sel;
682 
683 	pr_debug("%s: %s %lu\n", __func__, c->name, rate);
684 
685 	input_rate = clk_get_rate(c->parent);
686 	for (sel = c->u.pll.freq_table; sel->input_rate != 0; sel++) {
687 		if (sel->input_rate == input_rate && sel->output_rate == rate) {
688 			c->mul = sel->n;
689 			c->div = sel->m * sel->p;
690 
691 			val = clk_readl(c->reg + PLL_BASE);
692 			if (c->flags & PLL_FIXED)
693 				val |= PLL_BASE_OVERRIDE;
694 			val &= ~(PLL_BASE_DIVP_MASK | PLL_BASE_DIVN_MASK |
695 				 PLL_BASE_DIVM_MASK);
696 			val |= (sel->m << PLL_BASE_DIVM_SHIFT) |
697 				(sel->n << PLL_BASE_DIVN_SHIFT);
698 			BUG_ON(sel->p < 1 || sel->p > 2);
699 			if (c->flags & PLLU) {
700 				if (sel->p == 1)
701 					val |= PLLU_BASE_POST_DIV;
702 			} else {
703 				if (sel->p == 2)
704 					val |= 1 << PLL_BASE_DIVP_SHIFT;
705 			}
706 			clk_writel(val, c->reg + PLL_BASE);
707 
708 			if (c->flags & PLL_HAS_CPCON) {
709 				val = clk_readl(c->reg + PLL_MISC(c));
710 				val &= ~PLL_MISC_CPCON_MASK;
711 				val |= sel->cpcon << PLL_MISC_CPCON_SHIFT;
712 				clk_writel(val, c->reg + PLL_MISC(c));
713 			}
714 
715 			if (c->state == ON)
716 				tegra2_pll_clk_enable(c);
717 
718 			return 0;
719 		}
720 	}
721 	return -EINVAL;
722 }
723 
724 static struct clk_ops tegra_pll_ops = {
725 	.init			= tegra2_pll_clk_init,
726 	.enable			= tegra2_pll_clk_enable,
727 	.disable		= tegra2_pll_clk_disable,
728 	.set_rate		= tegra2_pll_clk_set_rate,
729 };
730 
tegra2_pllx_clk_init(struct clk * c)731 static void tegra2_pllx_clk_init(struct clk *c)
732 {
733 	tegra2_pll_clk_init(c);
734 
735 	if (tegra_sku_id() == 7)
736 		c->max_rate = 750000000;
737 }
738 
739 static struct clk_ops tegra_pllx_ops = {
740 	.init     = tegra2_pllx_clk_init,
741 	.enable   = tegra2_pll_clk_enable,
742 	.disable  = tegra2_pll_clk_disable,
743 	.set_rate = tegra2_pll_clk_set_rate,
744 };
745 
tegra2_plle_clk_enable(struct clk * c)746 static int tegra2_plle_clk_enable(struct clk *c)
747 {
748 	u32 val;
749 
750 	pr_debug("%s on clock %s\n", __func__, c->name);
751 
752 	mdelay(1);
753 
754 	val = clk_readl(c->reg + PLL_BASE);
755 	if (!(val & PLLE_MISC_READY))
756 		return -EBUSY;
757 
758 	val = clk_readl(c->reg + PLL_BASE);
759 	val |= PLL_BASE_ENABLE | PLL_BASE_BYPASS;
760 	clk_writel(val, c->reg + PLL_BASE);
761 
762 	return 0;
763 }
764 
765 static struct clk_ops tegra_plle_ops = {
766 	.init       = tegra2_pll_clk_init,
767 	.enable     = tegra2_plle_clk_enable,
768 	.set_rate   = tegra2_pll_clk_set_rate,
769 };
770 
771 /* Clock divider ops */
tegra2_pll_div_clk_init(struct clk * c)772 static void tegra2_pll_div_clk_init(struct clk *c)
773 {
774 	u32 val = clk_readl(c->reg);
775 	u32 divu71;
776 	val >>= c->reg_shift;
777 	c->state = (val & PLL_OUT_CLKEN) ? ON : OFF;
778 	if (!(val & PLL_OUT_RESET_DISABLE))
779 		c->state = OFF;
780 
781 	if (c->flags & DIV_U71) {
782 		divu71 = (val & PLL_OUT_RATIO_MASK) >> PLL_OUT_RATIO_SHIFT;
783 		c->div = (divu71 + 2);
784 		c->mul = 2;
785 	} else if (c->flags & DIV_2) {
786 		c->div = 2;
787 		c->mul = 1;
788 	} else {
789 		c->div = 1;
790 		c->mul = 1;
791 	}
792 }
793 
tegra2_pll_div_clk_enable(struct clk * c)794 static int tegra2_pll_div_clk_enable(struct clk *c)
795 {
796 	u32 val;
797 	u32 new_val;
798 	unsigned long flags;
799 
800 	pr_debug("%s: %s\n", __func__, c->name);
801 	if (c->flags & DIV_U71) {
802 		spin_lock_irqsave(&clock_register_lock, flags);
803 		val = clk_readl(c->reg);
804 		new_val = val >> c->reg_shift;
805 		new_val &= 0xFFFF;
806 
807 		new_val |= PLL_OUT_CLKEN | PLL_OUT_RESET_DISABLE;
808 
809 		val &= ~(0xFFFF << c->reg_shift);
810 		val |= new_val << c->reg_shift;
811 		clk_writel(val, c->reg);
812 		spin_unlock_irqrestore(&clock_register_lock, flags);
813 		return 0;
814 	} else if (c->flags & DIV_2) {
815 		BUG_ON(!(c->flags & PLLD));
816 		spin_lock_irqsave(&clock_register_lock, flags);
817 		val = clk_readl(c->reg);
818 		val &= ~PLLD_MISC_DIV_RST;
819 		clk_writel(val, c->reg);
820 		spin_unlock_irqrestore(&clock_register_lock, flags);
821 		return 0;
822 	}
823 	return -EINVAL;
824 }
825 
tegra2_pll_div_clk_disable(struct clk * c)826 static void tegra2_pll_div_clk_disable(struct clk *c)
827 {
828 	u32 val;
829 	u32 new_val;
830 	unsigned long flags;
831 
832 	pr_debug("%s: %s\n", __func__, c->name);
833 	if (c->flags & DIV_U71) {
834 		spin_lock_irqsave(&clock_register_lock, flags);
835 		val = clk_readl(c->reg);
836 		new_val = val >> c->reg_shift;
837 		new_val &= 0xFFFF;
838 
839 		new_val &= ~(PLL_OUT_CLKEN | PLL_OUT_RESET_DISABLE);
840 
841 		val &= ~(0xFFFF << c->reg_shift);
842 		val |= new_val << c->reg_shift;
843 		clk_writel(val, c->reg);
844 		spin_unlock_irqrestore(&clock_register_lock, flags);
845 	} else if (c->flags & DIV_2) {
846 		BUG_ON(!(c->flags & PLLD));
847 		spin_lock_irqsave(&clock_register_lock, flags);
848 		val = clk_readl(c->reg);
849 		val |= PLLD_MISC_DIV_RST;
850 		clk_writel(val, c->reg);
851 		spin_unlock_irqrestore(&clock_register_lock, flags);
852 	}
853 }
854 
tegra2_pll_div_clk_set_rate(struct clk * c,unsigned long rate)855 static int tegra2_pll_div_clk_set_rate(struct clk *c, unsigned long rate)
856 {
857 	u32 val;
858 	u32 new_val;
859 	int divider_u71;
860 	unsigned long parent_rate = clk_get_rate(c->parent);
861 	unsigned long flags;
862 
863 	pr_debug("%s: %s %lu\n", __func__, c->name, rate);
864 	if (c->flags & DIV_U71) {
865 		divider_u71 = clk_div71_get_divider(parent_rate, rate);
866 		if (divider_u71 >= 0) {
867 			spin_lock_irqsave(&clock_register_lock, flags);
868 			val = clk_readl(c->reg);
869 			new_val = val >> c->reg_shift;
870 			new_val &= 0xFFFF;
871 			if (c->flags & DIV_U71_FIXED)
872 				new_val |= PLL_OUT_OVERRIDE;
873 			new_val &= ~PLL_OUT_RATIO_MASK;
874 			new_val |= divider_u71 << PLL_OUT_RATIO_SHIFT;
875 
876 			val &= ~(0xFFFF << c->reg_shift);
877 			val |= new_val << c->reg_shift;
878 			clk_writel(val, c->reg);
879 			c->div = divider_u71 + 2;
880 			c->mul = 2;
881 			spin_unlock_irqrestore(&clock_register_lock, flags);
882 			return 0;
883 		}
884 	} else if (c->flags & DIV_2) {
885 		if (parent_rate == rate * 2)
886 			return 0;
887 	}
888 	return -EINVAL;
889 }
890 
tegra2_pll_div_clk_round_rate(struct clk * c,unsigned long rate)891 static long tegra2_pll_div_clk_round_rate(struct clk *c, unsigned long rate)
892 {
893 	int divider;
894 	unsigned long parent_rate = clk_get_rate(c->parent);
895 	pr_debug("%s: %s %lu\n", __func__, c->name, rate);
896 
897 	if (c->flags & DIV_U71) {
898 		divider = clk_div71_get_divider(parent_rate, rate);
899 		if (divider < 0)
900 			return divider;
901 		return DIV_ROUND_UP(parent_rate * 2, divider + 2);
902 	} else if (c->flags & DIV_2) {
903 		return DIV_ROUND_UP(parent_rate, 2);
904 	}
905 	return -EINVAL;
906 }
907 
908 static struct clk_ops tegra_pll_div_ops = {
909 	.init			= tegra2_pll_div_clk_init,
910 	.enable			= tegra2_pll_div_clk_enable,
911 	.disable		= tegra2_pll_div_clk_disable,
912 	.set_rate		= tegra2_pll_div_clk_set_rate,
913 	.round_rate		= tegra2_pll_div_clk_round_rate,
914 };
915 
916 /* Periph clk ops */
917 
tegra2_periph_clk_init(struct clk * c)918 static void tegra2_periph_clk_init(struct clk *c)
919 {
920 	u32 val = clk_readl(c->reg);
921 	const struct clk_mux_sel *mux = 0;
922 	const struct clk_mux_sel *sel;
923 	if (c->flags & MUX) {
924 		for (sel = c->inputs; sel->input != NULL; sel++) {
925 			if (val >> PERIPH_CLK_SOURCE_SHIFT == sel->value)
926 				mux = sel;
927 		}
928 		BUG_ON(!mux);
929 
930 		c->parent = mux->input;
931 	} else {
932 		c->parent = c->inputs[0].input;
933 	}
934 
935 	if (c->flags & DIV_U71) {
936 		u32 divu71 = val & PERIPH_CLK_SOURCE_DIVU71_MASK;
937 		c->div = divu71 + 2;
938 		c->mul = 2;
939 	} else if (c->flags & DIV_U16) {
940 		u32 divu16 = val & PERIPH_CLK_SOURCE_DIVU16_MASK;
941 		c->div = divu16 + 1;
942 		c->mul = 1;
943 	} else {
944 		c->div = 1;
945 		c->mul = 1;
946 	}
947 
948 	c->state = ON;
949 
950 	if (!c->u.periph.clk_num)
951 		return;
952 
953 	if (!(clk_readl(CLK_OUT_ENB + PERIPH_CLK_TO_ENB_REG(c)) &
954 			PERIPH_CLK_TO_ENB_BIT(c)))
955 		c->state = OFF;
956 
957 	if (!(c->flags & PERIPH_NO_RESET))
958 		if (clk_readl(RST_DEVICES + PERIPH_CLK_TO_ENB_REG(c)) &
959 				PERIPH_CLK_TO_ENB_BIT(c))
960 			c->state = OFF;
961 }
962 
tegra2_periph_clk_enable(struct clk * c)963 static int tegra2_periph_clk_enable(struct clk *c)
964 {
965 	u32 val;
966 	unsigned long flags;
967 	int refcount;
968 	pr_debug("%s on clock %s\n", __func__, c->name);
969 
970 	if (!c->u.periph.clk_num)
971 		return 0;
972 
973 	spin_lock_irqsave(&clock_register_lock, flags);
974 
975 	refcount = tegra_periph_clk_enable_refcount[c->u.periph.clk_num]++;
976 
977 	if (refcount > 1)
978 		goto out;
979 
980 	clk_writel(PERIPH_CLK_TO_ENB_BIT(c),
981 		CLK_OUT_ENB_SET + PERIPH_CLK_TO_ENB_SET_REG(c));
982 	if (!(c->flags & PERIPH_NO_RESET) && !(c->flags & PERIPH_MANUAL_RESET))
983 		clk_writel(PERIPH_CLK_TO_ENB_BIT(c),
984 			RST_DEVICES_CLR + PERIPH_CLK_TO_ENB_SET_REG(c));
985 	if (c->flags & PERIPH_EMC_ENB) {
986 		/* The EMC peripheral clock has 2 extra enable bits */
987 		/* FIXME: Do they need to be disabled? */
988 		val = clk_readl(c->reg);
989 		val |= 0x3 << 24;
990 		clk_writel(val, c->reg);
991 	}
992 
993 out:
994 	spin_unlock_irqrestore(&clock_register_lock, flags);
995 
996 	return 0;
997 }
998 
tegra2_periph_clk_disable(struct clk * c)999 static void tegra2_periph_clk_disable(struct clk *c)
1000 {
1001 	unsigned long flags;
1002 
1003 	pr_debug("%s on clock %s\n", __func__, c->name);
1004 
1005 	if (!c->u.periph.clk_num)
1006 		return;
1007 
1008 	spin_lock_irqsave(&clock_register_lock, flags);
1009 
1010 	if (c->refcnt)
1011 		tegra_periph_clk_enable_refcount[c->u.periph.clk_num]--;
1012 
1013 	if (tegra_periph_clk_enable_refcount[c->u.periph.clk_num] == 0)
1014 		clk_writel(PERIPH_CLK_TO_ENB_BIT(c),
1015 			CLK_OUT_ENB_CLR + PERIPH_CLK_TO_ENB_SET_REG(c));
1016 
1017 	spin_unlock_irqrestore(&clock_register_lock, flags);
1018 }
1019 
tegra2_periph_clk_reset(struct clk * c,bool assert)1020 static void tegra2_periph_clk_reset(struct clk *c, bool assert)
1021 {
1022 	unsigned long base = assert ? RST_DEVICES_SET : RST_DEVICES_CLR;
1023 
1024 	pr_debug("%s %s on clock %s\n", __func__,
1025 		 assert ? "assert" : "deassert", c->name);
1026 
1027 	BUG_ON(!c->u.periph.clk_num);
1028 
1029 	if (!(c->flags & PERIPH_NO_RESET))
1030 		clk_writel(PERIPH_CLK_TO_ENB_BIT(c),
1031 			   base + PERIPH_CLK_TO_ENB_SET_REG(c));
1032 }
1033 
tegra2_periph_clk_set_parent(struct clk * c,struct clk * p)1034 static int tegra2_periph_clk_set_parent(struct clk *c, struct clk *p)
1035 {
1036 	u32 val;
1037 	const struct clk_mux_sel *sel;
1038 	pr_debug("%s: %s %s\n", __func__, c->name, p->name);
1039 	for (sel = c->inputs; sel->input != NULL; sel++) {
1040 		if (sel->input == p) {
1041 			val = clk_readl(c->reg);
1042 			val &= ~PERIPH_CLK_SOURCE_MASK;
1043 			val |= (sel->value) << PERIPH_CLK_SOURCE_SHIFT;
1044 
1045 			if (c->refcnt)
1046 				clk_enable(p);
1047 
1048 			clk_writel(val, c->reg);
1049 
1050 			if (c->refcnt && c->parent)
1051 				clk_disable(c->parent);
1052 
1053 			clk_reparent(c, p);
1054 			return 0;
1055 		}
1056 	}
1057 
1058 	return -EINVAL;
1059 }
1060 
tegra2_periph_clk_set_rate(struct clk * c,unsigned long rate)1061 static int tegra2_periph_clk_set_rate(struct clk *c, unsigned long rate)
1062 {
1063 	u32 val;
1064 	int divider;
1065 	unsigned long parent_rate = clk_get_rate(c->parent);
1066 
1067 	if (c->flags & DIV_U71) {
1068 		divider = clk_div71_get_divider(parent_rate, rate);
1069 		if (divider >= 0) {
1070 			val = clk_readl(c->reg);
1071 			val &= ~PERIPH_CLK_SOURCE_DIVU71_MASK;
1072 			val |= divider;
1073 			clk_writel(val, c->reg);
1074 			c->div = divider + 2;
1075 			c->mul = 2;
1076 			return 0;
1077 		}
1078 	} else if (c->flags & DIV_U16) {
1079 		divider = clk_div16_get_divider(parent_rate, rate);
1080 		if (divider >= 0) {
1081 			val = clk_readl(c->reg);
1082 			val &= ~PERIPH_CLK_SOURCE_DIVU16_MASK;
1083 			val |= divider;
1084 			clk_writel(val, c->reg);
1085 			c->div = divider + 1;
1086 			c->mul = 1;
1087 			return 0;
1088 		}
1089 	} else if (parent_rate <= rate) {
1090 		c->div = 1;
1091 		c->mul = 1;
1092 		return 0;
1093 	}
1094 	return -EINVAL;
1095 }
1096 
tegra2_periph_clk_round_rate(struct clk * c,unsigned long rate)1097 static long tegra2_periph_clk_round_rate(struct clk *c,
1098 	unsigned long rate)
1099 {
1100 	int divider;
1101 	unsigned long parent_rate = clk_get_rate(c->parent);
1102 	pr_debug("%s: %s %lu\n", __func__, c->name, rate);
1103 
1104 	if (c->flags & DIV_U71) {
1105 		divider = clk_div71_get_divider(parent_rate, rate);
1106 		if (divider < 0)
1107 			return divider;
1108 
1109 		return DIV_ROUND_UP(parent_rate * 2, divider + 2);
1110 	} else if (c->flags & DIV_U16) {
1111 		divider = clk_div16_get_divider(parent_rate, rate);
1112 		if (divider < 0)
1113 			return divider;
1114 		return DIV_ROUND_UP(parent_rate, divider + 1);
1115 	}
1116 	return -EINVAL;
1117 }
1118 
1119 static struct clk_ops tegra_periph_clk_ops = {
1120 	.init			= &tegra2_periph_clk_init,
1121 	.enable			= &tegra2_periph_clk_enable,
1122 	.disable		= &tegra2_periph_clk_disable,
1123 	.set_parent		= &tegra2_periph_clk_set_parent,
1124 	.set_rate		= &tegra2_periph_clk_set_rate,
1125 	.round_rate		= &tegra2_periph_clk_round_rate,
1126 	.reset			= &tegra2_periph_clk_reset,
1127 };
1128 
1129 /* The SDMMC controllers have extra bits in the clock source register that
1130  * adjust the delay between the clock and data to compenstate for delays
1131  * on the PCB. */
tegra2_sdmmc_tap_delay(struct clk * c,int delay)1132 void tegra2_sdmmc_tap_delay(struct clk *c, int delay)
1133 {
1134 	u32 reg;
1135 
1136 	delay = clamp(delay, 0, 15);
1137 	reg = clk_readl(c->reg);
1138 	reg &= ~SDMMC_CLK_INT_FB_DLY_MASK;
1139 	reg |= SDMMC_CLK_INT_FB_SEL;
1140 	reg |= delay << SDMMC_CLK_INT_FB_DLY_SHIFT;
1141 	clk_writel(reg, c->reg);
1142 }
1143 
1144 /* External memory controller clock ops */
tegra2_emc_clk_init(struct clk * c)1145 static void tegra2_emc_clk_init(struct clk *c)
1146 {
1147 	tegra2_periph_clk_init(c);
1148 	c->max_rate = clk_get_rate_locked(c);
1149 }
1150 
tegra2_emc_clk_round_rate(struct clk * c,unsigned long rate)1151 static long tegra2_emc_clk_round_rate(struct clk *c, unsigned long rate)
1152 {
1153 	long new_rate = rate;
1154 
1155 	new_rate = tegra_emc_round_rate(new_rate);
1156 	if (new_rate < 0)
1157 		return c->max_rate;
1158 
1159 	BUG_ON(new_rate != tegra2_periph_clk_round_rate(c, new_rate));
1160 
1161 	return new_rate;
1162 }
1163 
tegra2_emc_clk_set_rate(struct clk * c,unsigned long rate)1164 static int tegra2_emc_clk_set_rate(struct clk *c, unsigned long rate)
1165 {
1166 	int ret;
1167 	/*
1168 	 * The Tegra2 memory controller has an interlock with the clock
1169 	 * block that allows memory shadowed registers to be updated,
1170 	 * and then transfer them to the main registers at the same
1171 	 * time as the clock update without glitches.
1172 	 */
1173 	ret = tegra_emc_set_rate(rate);
1174 	if (ret < 0)
1175 		return ret;
1176 
1177 	ret = tegra2_periph_clk_set_rate(c, rate);
1178 	udelay(1);
1179 
1180 	return ret;
1181 }
1182 
1183 static struct clk_ops tegra_emc_clk_ops = {
1184 	.init			= &tegra2_emc_clk_init,
1185 	.enable			= &tegra2_periph_clk_enable,
1186 	.disable		= &tegra2_periph_clk_disable,
1187 	.set_parent		= &tegra2_periph_clk_set_parent,
1188 	.set_rate		= &tegra2_emc_clk_set_rate,
1189 	.round_rate		= &tegra2_emc_clk_round_rate,
1190 	.reset			= &tegra2_periph_clk_reset,
1191 };
1192 
1193 /* Clock doubler ops */
tegra2_clk_double_init(struct clk * c)1194 static void tegra2_clk_double_init(struct clk *c)
1195 {
1196 	c->mul = 2;
1197 	c->div = 1;
1198 	c->state = ON;
1199 
1200 	if (!c->u.periph.clk_num)
1201 		return;
1202 
1203 	if (!(clk_readl(CLK_OUT_ENB + PERIPH_CLK_TO_ENB_REG(c)) &
1204 			PERIPH_CLK_TO_ENB_BIT(c)))
1205 		c->state = OFF;
1206 };
1207 
tegra2_clk_double_set_rate(struct clk * c,unsigned long rate)1208 static int tegra2_clk_double_set_rate(struct clk *c, unsigned long rate)
1209 {
1210 	if (rate != 2 * clk_get_rate(c->parent))
1211 		return -EINVAL;
1212 	c->mul = 2;
1213 	c->div = 1;
1214 	return 0;
1215 }
1216 
1217 static struct clk_ops tegra_clk_double_ops = {
1218 	.init			= &tegra2_clk_double_init,
1219 	.enable			= &tegra2_periph_clk_enable,
1220 	.disable		= &tegra2_periph_clk_disable,
1221 	.set_rate		= &tegra2_clk_double_set_rate,
1222 };
1223 
1224 /* Audio sync clock ops */
tegra2_audio_sync_clk_init(struct clk * c)1225 static void tegra2_audio_sync_clk_init(struct clk *c)
1226 {
1227 	int source;
1228 	const struct clk_mux_sel *sel;
1229 	u32 val = clk_readl(c->reg);
1230 	c->state = (val & (1<<4)) ? OFF : ON;
1231 	source = val & 0xf;
1232 	for (sel = c->inputs; sel->input != NULL; sel++)
1233 		if (sel->value == source)
1234 			break;
1235 	BUG_ON(sel->input == NULL);
1236 	c->parent = sel->input;
1237 }
1238 
tegra2_audio_sync_clk_enable(struct clk * c)1239 static int tegra2_audio_sync_clk_enable(struct clk *c)
1240 {
1241 	clk_writel(0, c->reg);
1242 	return 0;
1243 }
1244 
tegra2_audio_sync_clk_disable(struct clk * c)1245 static void tegra2_audio_sync_clk_disable(struct clk *c)
1246 {
1247 	clk_writel(1, c->reg);
1248 }
1249 
tegra2_audio_sync_clk_set_parent(struct clk * c,struct clk * p)1250 static int tegra2_audio_sync_clk_set_parent(struct clk *c, struct clk *p)
1251 {
1252 	u32 val;
1253 	const struct clk_mux_sel *sel;
1254 	for (sel = c->inputs; sel->input != NULL; sel++) {
1255 		if (sel->input == p) {
1256 			val = clk_readl(c->reg);
1257 			val &= ~0xf;
1258 			val |= sel->value;
1259 
1260 			if (c->refcnt)
1261 				clk_enable(p);
1262 
1263 			clk_writel(val, c->reg);
1264 
1265 			if (c->refcnt && c->parent)
1266 				clk_disable(c->parent);
1267 
1268 			clk_reparent(c, p);
1269 			return 0;
1270 		}
1271 	}
1272 
1273 	return -EINVAL;
1274 }
1275 
1276 static struct clk_ops tegra_audio_sync_clk_ops = {
1277 	.init       = tegra2_audio_sync_clk_init,
1278 	.enable     = tegra2_audio_sync_clk_enable,
1279 	.disable    = tegra2_audio_sync_clk_disable,
1280 	.set_parent = tegra2_audio_sync_clk_set_parent,
1281 };
1282 
1283 /* cdev1 and cdev2 (dap_mclk1 and dap_mclk2) ops */
1284 
tegra2_cdev_clk_init(struct clk * c)1285 static void tegra2_cdev_clk_init(struct clk *c)
1286 {
1287 	/* We could un-tristate the cdev1 or cdev2 pingroup here; this is
1288 	 * currently done in the pinmux code. */
1289 	c->state = ON;
1290 
1291 	BUG_ON(!c->u.periph.clk_num);
1292 
1293 	if (!(clk_readl(CLK_OUT_ENB + PERIPH_CLK_TO_ENB_REG(c)) &
1294 			PERIPH_CLK_TO_ENB_BIT(c)))
1295 		c->state = OFF;
1296 }
1297 
tegra2_cdev_clk_enable(struct clk * c)1298 static int tegra2_cdev_clk_enable(struct clk *c)
1299 {
1300 	BUG_ON(!c->u.periph.clk_num);
1301 
1302 	clk_writel(PERIPH_CLK_TO_ENB_BIT(c),
1303 		CLK_OUT_ENB_SET + PERIPH_CLK_TO_ENB_SET_REG(c));
1304 	return 0;
1305 }
1306 
tegra2_cdev_clk_disable(struct clk * c)1307 static void tegra2_cdev_clk_disable(struct clk *c)
1308 {
1309 	BUG_ON(!c->u.periph.clk_num);
1310 
1311 	clk_writel(PERIPH_CLK_TO_ENB_BIT(c),
1312 		CLK_OUT_ENB_CLR + PERIPH_CLK_TO_ENB_SET_REG(c));
1313 }
1314 
1315 static struct clk_ops tegra_cdev_clk_ops = {
1316 	.init			= &tegra2_cdev_clk_init,
1317 	.enable			= &tegra2_cdev_clk_enable,
1318 	.disable		= &tegra2_cdev_clk_disable,
1319 };
1320 
1321 /* shared bus ops */
1322 /*
1323  * Some clocks may have multiple downstream users that need to request a
1324  * higher clock rate.  Shared bus clocks provide a unique shared_bus_user
1325  * clock to each user.  The frequency of the bus is set to the highest
1326  * enabled shared_bus_user clock, with a minimum value set by the
1327  * shared bus.
1328  */
tegra_clk_shared_bus_update(struct clk * bus)1329 static int tegra_clk_shared_bus_update(struct clk *bus)
1330 {
1331 	struct clk *c;
1332 	unsigned long rate = bus->min_rate;
1333 
1334 	list_for_each_entry(c, &bus->shared_bus_list, u.shared_bus_user.node)
1335 		if (c->u.shared_bus_user.enabled)
1336 			rate = max(c->u.shared_bus_user.rate, rate);
1337 
1338 	if (rate == clk_get_rate_locked(bus))
1339 		return 0;
1340 
1341 	return clk_set_rate_locked(bus, rate);
1342 };
1343 
tegra_clk_shared_bus_init(struct clk * c)1344 static void tegra_clk_shared_bus_init(struct clk *c)
1345 {
1346 	unsigned long flags;
1347 
1348 	c->max_rate = c->parent->max_rate;
1349 	c->u.shared_bus_user.rate = c->parent->max_rate;
1350 	c->state = OFF;
1351 	c->set = true;
1352 
1353 	spin_lock_irqsave(&c->parent->spinlock, flags);
1354 
1355 	list_add_tail(&c->u.shared_bus_user.node,
1356 		&c->parent->shared_bus_list);
1357 
1358 	spin_unlock_irqrestore(&c->parent->spinlock, flags);
1359 }
1360 
tegra_clk_shared_bus_set_rate(struct clk * c,unsigned long rate)1361 static int tegra_clk_shared_bus_set_rate(struct clk *c, unsigned long rate)
1362 {
1363 	unsigned long flags;
1364 	int ret;
1365 	long new_rate = rate;
1366 
1367 	new_rate = clk_round_rate(c->parent, new_rate);
1368 	if (new_rate < 0)
1369 		return new_rate;
1370 
1371 	spin_lock_irqsave(&c->parent->spinlock, flags);
1372 
1373 	c->u.shared_bus_user.rate = new_rate;
1374 	ret = tegra_clk_shared_bus_update(c->parent);
1375 
1376 	spin_unlock_irqrestore(&c->parent->spinlock, flags);
1377 
1378 	return ret;
1379 }
1380 
tegra_clk_shared_bus_round_rate(struct clk * c,unsigned long rate)1381 static long tegra_clk_shared_bus_round_rate(struct clk *c, unsigned long rate)
1382 {
1383 	return clk_round_rate(c->parent, rate);
1384 }
1385 
tegra_clk_shared_bus_enable(struct clk * c)1386 static int tegra_clk_shared_bus_enable(struct clk *c)
1387 {
1388 	unsigned long flags;
1389 	int ret;
1390 
1391 	spin_lock_irqsave(&c->parent->spinlock, flags);
1392 
1393 	c->u.shared_bus_user.enabled = true;
1394 	ret = tegra_clk_shared_bus_update(c->parent);
1395 
1396 	spin_unlock_irqrestore(&c->parent->spinlock, flags);
1397 
1398 	return ret;
1399 }
1400 
tegra_clk_shared_bus_disable(struct clk * c)1401 static void tegra_clk_shared_bus_disable(struct clk *c)
1402 {
1403 	unsigned long flags;
1404 	int ret;
1405 
1406 	spin_lock_irqsave(&c->parent->spinlock, flags);
1407 
1408 	c->u.shared_bus_user.enabled = false;
1409 	ret = tegra_clk_shared_bus_update(c->parent);
1410 	WARN_ON_ONCE(ret);
1411 
1412 	spin_unlock_irqrestore(&c->parent->spinlock, flags);
1413 }
1414 
1415 static struct clk_ops tegra_clk_shared_bus_ops = {
1416 	.init = tegra_clk_shared_bus_init,
1417 	.enable = tegra_clk_shared_bus_enable,
1418 	.disable = tegra_clk_shared_bus_disable,
1419 	.set_rate = tegra_clk_shared_bus_set_rate,
1420 	.round_rate = tegra_clk_shared_bus_round_rate,
1421 };
1422 
1423 
1424 /* Clock definitions */
1425 static struct clk tegra_clk_32k = {
1426 	.name = "clk_32k",
1427 	.rate = 32768,
1428 	.ops  = NULL,
1429 	.max_rate = 32768,
1430 };
1431 
1432 static struct clk_pll_freq_table tegra_pll_s_freq_table[] = {
1433 	{32768, 12000000, 366, 1, 1, 0},
1434 	{32768, 13000000, 397, 1, 1, 0},
1435 	{32768, 19200000, 586, 1, 1, 0},
1436 	{32768, 26000000, 793, 1, 1, 0},
1437 	{0, 0, 0, 0, 0, 0},
1438 };
1439 
1440 static struct clk tegra_pll_s = {
1441 	.name      = "pll_s",
1442 	.flags     = PLL_ALT_MISC_REG,
1443 	.ops       = &tegra_pll_ops,
1444 	.parent    = &tegra_clk_32k,
1445 	.max_rate  = 26000000,
1446 	.reg       = 0xf0,
1447 	.u.pll = {
1448 		.input_min = 32768,
1449 		.input_max = 32768,
1450 		.cf_min    = 0, /* FIXME */
1451 		.cf_max    = 0, /* FIXME */
1452 		.vco_min   = 12000000,
1453 		.vco_max   = 26000000,
1454 		.freq_table = tegra_pll_s_freq_table,
1455 		.lock_delay = 300,
1456 	},
1457 };
1458 
1459 static struct clk_mux_sel tegra_clk_m_sel[] = {
1460 	{ .input = &tegra_clk_32k, .value = 0},
1461 	{ .input = &tegra_pll_s,  .value = 1},
1462 	{ 0, 0},
1463 };
1464 
1465 static struct clk tegra_clk_m = {
1466 	.name      = "clk_m",
1467 	.flags     = ENABLE_ON_INIT,
1468 	.ops       = &tegra_clk_m_ops,
1469 	.inputs    = tegra_clk_m_sel,
1470 	.reg       = 0x1fc,
1471 	.reg_shift = 28,
1472 	.max_rate  = 26000000,
1473 };
1474 
1475 static struct clk_pll_freq_table tegra_pll_c_freq_table[] = {
1476 	{ 0, 0, 0, 0, 0, 0 },
1477 };
1478 
1479 static struct clk tegra_pll_c = {
1480 	.name      = "pll_c",
1481 	.flags	   = PLL_HAS_CPCON,
1482 	.ops       = &tegra_pll_ops,
1483 	.reg       = 0x80,
1484 	.parent    = &tegra_clk_m,
1485 	.max_rate  = 600000000,
1486 	.u.pll = {
1487 		.input_min = 2000000,
1488 		.input_max = 31000000,
1489 		.cf_min    = 1000000,
1490 		.cf_max    = 6000000,
1491 		.vco_min   = 20000000,
1492 		.vco_max   = 1400000000,
1493 		.freq_table = tegra_pll_c_freq_table,
1494 		.lock_delay = 300,
1495 	},
1496 };
1497 
1498 static struct clk tegra_pll_c_out1 = {
1499 	.name      = "pll_c_out1",
1500 	.ops       = &tegra_pll_div_ops,
1501 	.flags     = DIV_U71,
1502 	.parent    = &tegra_pll_c,
1503 	.reg       = 0x84,
1504 	.reg_shift = 0,
1505 	.max_rate  = 600000000,
1506 };
1507 
1508 static struct clk_pll_freq_table tegra_pll_m_freq_table[] = {
1509 	{ 12000000, 666000000, 666, 12, 1, 8},
1510 	{ 13000000, 666000000, 666, 13, 1, 8},
1511 	{ 19200000, 666000000, 555, 16, 1, 8},
1512 	{ 26000000, 666000000, 666, 26, 1, 8},
1513 	{ 12000000, 600000000, 600, 12, 1, 8},
1514 	{ 13000000, 600000000, 600, 13, 1, 8},
1515 	{ 19200000, 600000000, 375, 12, 1, 6},
1516 	{ 26000000, 600000000, 600, 26, 1, 8},
1517 	{ 0, 0, 0, 0, 0, 0 },
1518 };
1519 
1520 static struct clk tegra_pll_m = {
1521 	.name      = "pll_m",
1522 	.flags     = PLL_HAS_CPCON,
1523 	.ops       = &tegra_pll_ops,
1524 	.reg       = 0x90,
1525 	.parent    = &tegra_clk_m,
1526 	.max_rate  = 800000000,
1527 	.u.pll = {
1528 		.input_min = 2000000,
1529 		.input_max = 31000000,
1530 		.cf_min    = 1000000,
1531 		.cf_max    = 6000000,
1532 		.vco_min   = 20000000,
1533 		.vco_max   = 1200000000,
1534 		.freq_table = tegra_pll_m_freq_table,
1535 		.lock_delay = 300,
1536 	},
1537 };
1538 
1539 static struct clk tegra_pll_m_out1 = {
1540 	.name      = "pll_m_out1",
1541 	.ops       = &tegra_pll_div_ops,
1542 	.flags     = DIV_U71,
1543 	.parent    = &tegra_pll_m,
1544 	.reg       = 0x94,
1545 	.reg_shift = 0,
1546 	.max_rate  = 600000000,
1547 };
1548 
1549 static struct clk_pll_freq_table tegra_pll_p_freq_table[] = {
1550 	{ 12000000, 216000000, 432, 12, 2, 8},
1551 	{ 13000000, 216000000, 432, 13, 2, 8},
1552 	{ 19200000, 216000000, 90,   4, 2, 1},
1553 	{ 26000000, 216000000, 432, 26, 2, 8},
1554 	{ 12000000, 432000000, 432, 12, 1, 8},
1555 	{ 13000000, 432000000, 432, 13, 1, 8},
1556 	{ 19200000, 432000000, 90,   4, 1, 1},
1557 	{ 26000000, 432000000, 432, 26, 1, 8},
1558 	{ 0, 0, 0, 0, 0, 0 },
1559 };
1560 
1561 static struct clk tegra_pll_p = {
1562 	.name      = "pll_p",
1563 	.flags     = ENABLE_ON_INIT | PLL_FIXED | PLL_HAS_CPCON,
1564 	.ops       = &tegra_pll_ops,
1565 	.reg       = 0xa0,
1566 	.parent    = &tegra_clk_m,
1567 	.max_rate  = 432000000,
1568 	.u.pll = {
1569 		.input_min = 2000000,
1570 		.input_max = 31000000,
1571 		.cf_min    = 1000000,
1572 		.cf_max    = 6000000,
1573 		.vco_min   = 20000000,
1574 		.vco_max   = 1400000000,
1575 		.freq_table = tegra_pll_p_freq_table,
1576 		.lock_delay = 300,
1577 	},
1578 };
1579 
1580 static struct clk tegra_pll_p_out1 = {
1581 	.name      = "pll_p_out1",
1582 	.ops       = &tegra_pll_div_ops,
1583 	.flags     = ENABLE_ON_INIT | DIV_U71 | DIV_U71_FIXED,
1584 	.parent    = &tegra_pll_p,
1585 	.reg       = 0xa4,
1586 	.reg_shift = 0,
1587 	.max_rate  = 432000000,
1588 };
1589 
1590 static struct clk tegra_pll_p_out2 = {
1591 	.name      = "pll_p_out2",
1592 	.ops       = &tegra_pll_div_ops,
1593 	.flags     = ENABLE_ON_INIT | DIV_U71 | DIV_U71_FIXED,
1594 	.parent    = &tegra_pll_p,
1595 	.reg       = 0xa4,
1596 	.reg_shift = 16,
1597 	.max_rate  = 432000000,
1598 };
1599 
1600 static struct clk tegra_pll_p_out3 = {
1601 	.name      = "pll_p_out3",
1602 	.ops       = &tegra_pll_div_ops,
1603 	.flags     = ENABLE_ON_INIT | DIV_U71 | DIV_U71_FIXED,
1604 	.parent    = &tegra_pll_p,
1605 	.reg       = 0xa8,
1606 	.reg_shift = 0,
1607 	.max_rate  = 432000000,
1608 };
1609 
1610 static struct clk tegra_pll_p_out4 = {
1611 	.name      = "pll_p_out4",
1612 	.ops       = &tegra_pll_div_ops,
1613 	.flags     = ENABLE_ON_INIT | DIV_U71 | DIV_U71_FIXED,
1614 	.parent    = &tegra_pll_p,
1615 	.reg       = 0xa8,
1616 	.reg_shift = 16,
1617 	.max_rate  = 432000000,
1618 };
1619 
1620 static struct clk_pll_freq_table tegra_pll_a_freq_table[] = {
1621 	{ 28800000, 56448000, 49, 25, 1, 1},
1622 	{ 28800000, 73728000, 64, 25, 1, 1},
1623 	{ 28800000, 24000000,  5,  6, 1, 1},
1624 	{ 0, 0, 0, 0, 0, 0 },
1625 };
1626 
1627 static struct clk tegra_pll_a = {
1628 	.name      = "pll_a",
1629 	.flags     = PLL_HAS_CPCON,
1630 	.ops       = &tegra_pll_ops,
1631 	.reg       = 0xb0,
1632 	.parent    = &tegra_pll_p_out1,
1633 	.max_rate  = 73728000,
1634 	.u.pll = {
1635 		.input_min = 2000000,
1636 		.input_max = 31000000,
1637 		.cf_min    = 1000000,
1638 		.cf_max    = 6000000,
1639 		.vco_min   = 20000000,
1640 		.vco_max   = 1400000000,
1641 		.freq_table = tegra_pll_a_freq_table,
1642 		.lock_delay = 300,
1643 	},
1644 };
1645 
1646 static struct clk tegra_pll_a_out0 = {
1647 	.name      = "pll_a_out0",
1648 	.ops       = &tegra_pll_div_ops,
1649 	.flags     = DIV_U71,
1650 	.parent    = &tegra_pll_a,
1651 	.reg       = 0xb4,
1652 	.reg_shift = 0,
1653 	.max_rate  = 73728000,
1654 };
1655 
1656 static struct clk_pll_freq_table tegra_pll_d_freq_table[] = {
1657 	{ 12000000, 216000000, 216, 12, 1, 4},
1658 	{ 13000000, 216000000, 216, 13, 1, 4},
1659 	{ 19200000, 216000000, 135, 12, 1, 3},
1660 	{ 26000000, 216000000, 216, 26, 1, 4},
1661 
1662 	{ 12000000, 594000000, 594, 12, 1, 8},
1663 	{ 13000000, 594000000, 594, 13, 1, 8},
1664 	{ 19200000, 594000000, 495, 16, 1, 8},
1665 	{ 26000000, 594000000, 594, 26, 1, 8},
1666 
1667 	{ 12000000, 1000000000, 1000, 12, 1, 12},
1668 	{ 13000000, 1000000000, 1000, 13, 1, 12},
1669 	{ 19200000, 1000000000, 625,  12, 1, 8},
1670 	{ 26000000, 1000000000, 1000, 26, 1, 12},
1671 
1672 	{ 0, 0, 0, 0, 0, 0 },
1673 };
1674 
1675 static struct clk tegra_pll_d = {
1676 	.name      = "pll_d",
1677 	.flags     = PLL_HAS_CPCON | PLLD,
1678 	.ops       = &tegra_pll_ops,
1679 	.reg       = 0xd0,
1680 	.parent    = &tegra_clk_m,
1681 	.max_rate  = 1000000000,
1682 	.u.pll = {
1683 		.input_min = 2000000,
1684 		.input_max = 40000000,
1685 		.cf_min    = 1000000,
1686 		.cf_max    = 6000000,
1687 		.vco_min   = 40000000,
1688 		.vco_max   = 1000000000,
1689 		.freq_table = tegra_pll_d_freq_table,
1690 		.lock_delay = 1000,
1691 	},
1692 };
1693 
1694 static struct clk tegra_pll_d_out0 = {
1695 	.name      = "pll_d_out0",
1696 	.ops       = &tegra_pll_div_ops,
1697 	.flags     = DIV_2 | PLLD,
1698 	.parent    = &tegra_pll_d,
1699 	.max_rate  = 500000000,
1700 };
1701 
1702 static struct clk_pll_freq_table tegra_pll_u_freq_table[] = {
1703 	{ 12000000, 480000000, 960, 12, 2, 0},
1704 	{ 13000000, 480000000, 960, 13, 2, 0},
1705 	{ 19200000, 480000000, 200, 4,  2, 0},
1706 	{ 26000000, 480000000, 960, 26, 2, 0},
1707 	{ 0, 0, 0, 0, 0, 0 },
1708 };
1709 
1710 static struct clk tegra_pll_u = {
1711 	.name      = "pll_u",
1712 	.flags     = PLLU,
1713 	.ops       = &tegra_pll_ops,
1714 	.reg       = 0xc0,
1715 	.parent    = &tegra_clk_m,
1716 	.max_rate  = 480000000,
1717 	.u.pll = {
1718 		.input_min = 2000000,
1719 		.input_max = 40000000,
1720 		.cf_min    = 1000000,
1721 		.cf_max    = 6000000,
1722 		.vco_min   = 480000000,
1723 		.vco_max   = 960000000,
1724 		.freq_table = tegra_pll_u_freq_table,
1725 		.lock_delay = 1000,
1726 	},
1727 };
1728 
1729 static struct clk_pll_freq_table tegra_pll_x_freq_table[] = {
1730 	/* 1 GHz */
1731 	{ 12000000, 1000000000, 1000, 12, 1, 12},
1732 	{ 13000000, 1000000000, 1000, 13, 1, 12},
1733 	{ 19200000, 1000000000, 625,  12, 1, 8},
1734 	{ 26000000, 1000000000, 1000, 26, 1, 12},
1735 
1736 	/* 912 MHz */
1737 	{ 12000000, 912000000,  912,  12, 1, 12},
1738 	{ 13000000, 912000000,  912,  13, 1, 12},
1739 	{ 19200000, 912000000,  760,  16, 1, 8},
1740 	{ 26000000, 912000000,  912,  26, 1, 12},
1741 
1742 	/* 816 MHz */
1743 	{ 12000000, 816000000,  816,  12, 1, 12},
1744 	{ 13000000, 816000000,  816,  13, 1, 12},
1745 	{ 19200000, 816000000,  680,  16, 1, 8},
1746 	{ 26000000, 816000000,  816,  26, 1, 12},
1747 
1748 	/* 760 MHz */
1749 	{ 12000000, 760000000,  760,  12, 1, 12},
1750 	{ 13000000, 760000000,  760,  13, 1, 12},
1751 	{ 19200000, 760000000,  950,  24, 1, 8},
1752 	{ 26000000, 760000000,  760,  26, 1, 12},
1753 
1754 	/* 608 MHz */
1755 	{ 12000000, 608000000,  608,  12, 1, 12},
1756 	{ 13000000, 608000000,  608,  13, 1, 12},
1757 	{ 19200000, 608000000,  380,  12, 1, 8},
1758 	{ 26000000, 608000000,  608,  26, 1, 12},
1759 
1760 	/* 456 MHz */
1761 	{ 12000000, 456000000,  456,  12, 1, 12},
1762 	{ 13000000, 456000000,  456,  13, 1, 12},
1763 	{ 19200000, 456000000,  380,  16, 1, 8},
1764 	{ 26000000, 456000000,  456,  26, 1, 12},
1765 
1766 	/* 312 MHz */
1767 	{ 12000000, 312000000,  312,  12, 1, 12},
1768 	{ 13000000, 312000000,  312,  13, 1, 12},
1769 	{ 19200000, 312000000,  260,  16, 1, 8},
1770 	{ 26000000, 312000000,  312,  26, 1, 12},
1771 
1772 	{ 0, 0, 0, 0, 0, 0 },
1773 };
1774 
1775 static struct clk tegra_pll_x = {
1776 	.name      = "pll_x",
1777 	.flags     = PLL_HAS_CPCON | PLL_ALT_MISC_REG,
1778 	.ops       = &tegra_pllx_ops,
1779 	.reg       = 0xe0,
1780 	.parent    = &tegra_clk_m,
1781 	.max_rate  = 1000000000,
1782 	.u.pll = {
1783 		.input_min = 2000000,
1784 		.input_max = 31000000,
1785 		.cf_min    = 1000000,
1786 		.cf_max    = 6000000,
1787 		.vco_min   = 20000000,
1788 		.vco_max   = 1200000000,
1789 		.freq_table = tegra_pll_x_freq_table,
1790 		.lock_delay = 300,
1791 	},
1792 };
1793 
1794 static struct clk_pll_freq_table tegra_pll_e_freq_table[] = {
1795 	{ 12000000, 100000000,  200,  24, 1, 0 },
1796 	{ 0, 0, 0, 0, 0, 0 },
1797 };
1798 
1799 static struct clk tegra_pll_e = {
1800 	.name      = "pll_e",
1801 	.flags	   = PLL_ALT_MISC_REG,
1802 	.ops       = &tegra_plle_ops,
1803 	.parent    = &tegra_clk_m,
1804 	.reg       = 0xe8,
1805 	.max_rate  = 100000000,
1806 	.u.pll = {
1807 		.input_min = 12000000,
1808 		.input_max = 12000000,
1809 		.freq_table = tegra_pll_e_freq_table,
1810 	},
1811 };
1812 
1813 static struct clk tegra_clk_d = {
1814 	.name      = "clk_d",
1815 	.flags     = PERIPH_NO_RESET,
1816 	.ops       = &tegra_clk_double_ops,
1817 	.reg       = 0x34,
1818 	.reg_shift = 12,
1819 	.parent    = &tegra_clk_m,
1820 	.max_rate  = 52000000,
1821 	.u.periph  = {
1822 		.clk_num = 90,
1823 	},
1824 };
1825 
1826 /* dap_mclk1, belongs to the cdev1 pingroup. */
1827 static struct clk tegra_clk_cdev1 = {
1828 	.name      = "cdev1",
1829 	.ops       = &tegra_cdev_clk_ops,
1830 	.rate      = 26000000,
1831 	.max_rate  = 26000000,
1832 	.u.periph  = {
1833 		.clk_num = 94,
1834 	},
1835 };
1836 
1837 /* dap_mclk2, belongs to the cdev2 pingroup. */
1838 static struct clk tegra_clk_cdev2 = {
1839 	.name      = "cdev2",
1840 	.ops       = &tegra_cdev_clk_ops,
1841 	.rate      = 26000000,
1842 	.max_rate  = 26000000,
1843 	.u.periph  = {
1844 		.clk_num   = 93,
1845 	},
1846 };
1847 
1848 /* initialized before peripheral clocks */
1849 static struct clk_mux_sel mux_audio_sync_clk[8+1];
1850 static const struct audio_sources {
1851 	const char *name;
1852 	int value;
1853 } mux_audio_sync_clk_sources[] = {
1854 	{ .name = "spdif_in", .value = 0 },
1855 	{ .name = "i2s1", .value = 1 },
1856 	{ .name = "i2s2", .value = 2 },
1857 	{ .name = "pll_a_out0", .value = 4 },
1858 #if 0 /* FIXME: not implemented */
1859 	{ .name = "ac97", .value = 3 },
1860 	{ .name = "ext_audio_clk2", .value = 5 },
1861 	{ .name = "ext_audio_clk1", .value = 6 },
1862 	{ .name = "ext_vimclk", .value = 7 },
1863 #endif
1864 	{ 0, 0 }
1865 };
1866 
1867 static struct clk tegra_clk_audio = {
1868 	.name      = "audio",
1869 	.inputs    = mux_audio_sync_clk,
1870 	.reg       = 0x38,
1871 	.max_rate  = 73728000,
1872 	.ops       = &tegra_audio_sync_clk_ops
1873 };
1874 
1875 static struct clk tegra_clk_audio_2x = {
1876 	.name      = "audio_2x",
1877 	.flags     = PERIPH_NO_RESET,
1878 	.max_rate  = 48000000,
1879 	.ops       = &tegra_clk_double_ops,
1880 	.reg       = 0x34,
1881 	.reg_shift = 8,
1882 	.parent    = &tegra_clk_audio,
1883 	.u.periph = {
1884 		.clk_num = 89,
1885 	},
1886 };
1887 
1888 struct clk_lookup tegra_audio_clk_lookups[] = {
1889 	{ .con_id = "audio", .clk = &tegra_clk_audio },
1890 	{ .con_id = "audio_2x", .clk = &tegra_clk_audio_2x }
1891 };
1892 
1893 /* This is called after peripheral clocks are initialized, as the
1894  * audio_sync clock depends on some of the peripheral clocks.
1895  */
1896 
init_audio_sync_clock_mux(void)1897 static void init_audio_sync_clock_mux(void)
1898 {
1899 	int i;
1900 	struct clk_mux_sel *sel = mux_audio_sync_clk;
1901 	const struct audio_sources *src = mux_audio_sync_clk_sources;
1902 	struct clk_lookup *lookup;
1903 
1904 	for (i = 0; src->name; i++, sel++, src++) {
1905 		sel->input = tegra_get_clock_by_name(src->name);
1906 		if (!sel->input)
1907 			pr_err("%s: could not find clk %s\n", __func__,
1908 				src->name);
1909 		sel->value = src->value;
1910 	}
1911 
1912 	lookup = tegra_audio_clk_lookups;
1913 	for (i = 0; i < ARRAY_SIZE(tegra_audio_clk_lookups); i++, lookup++) {
1914 		clk_init(lookup->clk);
1915 		clkdev_add(lookup);
1916 	}
1917 }
1918 
1919 static struct clk_mux_sel mux_cclk[] = {
1920 	{ .input = &tegra_clk_m,	.value = 0},
1921 	{ .input = &tegra_pll_c,	.value = 1},
1922 	{ .input = &tegra_clk_32k,	.value = 2},
1923 	{ .input = &tegra_pll_m,	.value = 3},
1924 	{ .input = &tegra_pll_p,	.value = 4},
1925 	{ .input = &tegra_pll_p_out4,	.value = 5},
1926 	{ .input = &tegra_pll_p_out3,	.value = 6},
1927 	{ .input = &tegra_clk_d,	.value = 7},
1928 	{ .input = &tegra_pll_x,	.value = 8},
1929 	{ 0, 0},
1930 };
1931 
1932 static struct clk_mux_sel mux_sclk[] = {
1933 	{ .input = &tegra_clk_m,	.value = 0},
1934 	{ .input = &tegra_pll_c_out1,	.value = 1},
1935 	{ .input = &tegra_pll_p_out4,	.value = 2},
1936 	{ .input = &tegra_pll_p_out3,	.value = 3},
1937 	{ .input = &tegra_pll_p_out2,	.value = 4},
1938 	{ .input = &tegra_clk_d,	.value = 5},
1939 	{ .input = &tegra_clk_32k,	.value = 6},
1940 	{ .input = &tegra_pll_m_out1,	.value = 7},
1941 	{ 0, 0},
1942 };
1943 
1944 static struct clk tegra_clk_cclk = {
1945 	.name	= "cclk",
1946 	.inputs	= mux_cclk,
1947 	.reg	= 0x20,
1948 	.ops	= &tegra_super_ops,
1949 	.max_rate = 1000000000,
1950 };
1951 
1952 static struct clk tegra_clk_sclk = {
1953 	.name	= "sclk",
1954 	.inputs	= mux_sclk,
1955 	.reg	= 0x28,
1956 	.ops	= &tegra_super_ops,
1957 	.max_rate = 240000000,
1958 	.min_rate = 120000000,
1959 };
1960 
1961 static struct clk tegra_clk_virtual_cpu = {
1962 	.name      = "cpu",
1963 	.parent    = &tegra_clk_cclk,
1964 	.ops       = &tegra_cpu_ops,
1965 	.max_rate  = 1000000000,
1966 	.u.cpu = {
1967 		.main      = &tegra_pll_x,
1968 		.backup    = &tegra_pll_p,
1969 	},
1970 };
1971 
1972 static struct clk tegra_clk_cop = {
1973 	.name      = "cop",
1974 	.parent    = &tegra_clk_sclk,
1975 	.ops       = &tegra_cop_ops,
1976 	.max_rate  = 240000000,
1977 };
1978 
1979 static struct clk tegra_clk_hclk = {
1980 	.name		= "hclk",
1981 	.flags		= DIV_BUS,
1982 	.parent		= &tegra_clk_sclk,
1983 	.reg		= 0x30,
1984 	.reg_shift	= 4,
1985 	.ops		= &tegra_bus_ops,
1986 	.max_rate       = 240000000,
1987 };
1988 
1989 static struct clk tegra_clk_pclk = {
1990 	.name		= "pclk",
1991 	.flags		= DIV_BUS,
1992 	.parent		= &tegra_clk_hclk,
1993 	.reg		= 0x30,
1994 	.reg_shift	= 0,
1995 	.ops		= &tegra_bus_ops,
1996 	.max_rate       = 120000000,
1997 };
1998 
1999 static struct clk tegra_clk_blink = {
2000 	.name		= "blink",
2001 	.parent		= &tegra_clk_32k,
2002 	.reg		= 0x40,
2003 	.ops		= &tegra_blink_clk_ops,
2004 	.max_rate	= 32768,
2005 };
2006 
2007 static struct clk_mux_sel mux_pllm_pllc_pllp_plla[] = {
2008 	{ .input = &tegra_pll_m, .value = 0},
2009 	{ .input = &tegra_pll_c, .value = 1},
2010 	{ .input = &tegra_pll_p, .value = 2},
2011 	{ .input = &tegra_pll_a_out0, .value = 3},
2012 	{ 0, 0},
2013 };
2014 
2015 static struct clk_mux_sel mux_pllm_pllc_pllp_clkm[] = {
2016 	{ .input = &tegra_pll_m, .value = 0},
2017 	{ .input = &tegra_pll_c, .value = 1},
2018 	{ .input = &tegra_pll_p, .value = 2},
2019 	{ .input = &tegra_clk_m, .value = 3},
2020 	{ 0, 0},
2021 };
2022 
2023 static struct clk_mux_sel mux_pllp_pllc_pllm_clkm[] = {
2024 	{ .input = &tegra_pll_p, .value = 0},
2025 	{ .input = &tegra_pll_c, .value = 1},
2026 	{ .input = &tegra_pll_m, .value = 2},
2027 	{ .input = &tegra_clk_m, .value = 3},
2028 	{ 0, 0},
2029 };
2030 
2031 static struct clk_mux_sel mux_pllaout0_audio2x_pllp_clkm[] = {
2032 	{.input = &tegra_pll_a_out0, .value = 0},
2033 	{.input = &tegra_clk_audio_2x, .value = 1},
2034 	{.input = &tegra_pll_p, .value = 2},
2035 	{.input = &tegra_clk_m, .value = 3},
2036 	{ 0, 0},
2037 };
2038 
2039 static struct clk_mux_sel mux_pllp_plld_pllc_clkm[] = {
2040 	{.input = &tegra_pll_p, .value = 0},
2041 	{.input = &tegra_pll_d_out0, .value = 1},
2042 	{.input = &tegra_pll_c, .value = 2},
2043 	{.input = &tegra_clk_m, .value = 3},
2044 	{ 0, 0},
2045 };
2046 
2047 static struct clk_mux_sel mux_pllp_pllc_audio_clkm_clk32[] = {
2048 	{.input = &tegra_pll_p,     .value = 0},
2049 	{.input = &tegra_pll_c,     .value = 1},
2050 	{.input = &tegra_clk_audio,     .value = 2},
2051 	{.input = &tegra_clk_m,     .value = 3},
2052 	{.input = &tegra_clk_32k,   .value = 4},
2053 	{ 0, 0},
2054 };
2055 
2056 static struct clk_mux_sel mux_pllp_pllc_pllm[] = {
2057 	{.input = &tegra_pll_p,     .value = 0},
2058 	{.input = &tegra_pll_c,     .value = 1},
2059 	{.input = &tegra_pll_m,     .value = 2},
2060 	{ 0, 0},
2061 };
2062 
2063 static struct clk_mux_sel mux_clk_m[] = {
2064 	{ .input = &tegra_clk_m, .value = 0},
2065 	{ 0, 0},
2066 };
2067 
2068 static struct clk_mux_sel mux_pllp_out3[] = {
2069 	{ .input = &tegra_pll_p_out3, .value = 0},
2070 	{ 0, 0},
2071 };
2072 
2073 static struct clk_mux_sel mux_plld[] = {
2074 	{ .input = &tegra_pll_d, .value = 0},
2075 	{ 0, 0},
2076 };
2077 
2078 static struct clk_mux_sel mux_clk_32k[] = {
2079 	{ .input = &tegra_clk_32k, .value = 0},
2080 	{ 0, 0},
2081 };
2082 
2083 static struct clk_mux_sel mux_pclk[] = {
2084 	{ .input = &tegra_clk_pclk, .value = 0},
2085 	{ 0, 0},
2086 };
2087 
2088 static struct clk tegra_clk_emc = {
2089 	.name = "emc",
2090 	.ops = &tegra_emc_clk_ops,
2091 	.reg = 0x19c,
2092 	.max_rate = 800000000,
2093 	.inputs = mux_pllm_pllc_pllp_clkm,
2094 	.flags = MUX | DIV_U71 | PERIPH_EMC_ENB,
2095 	.u.periph = {
2096 		.clk_num = 57,
2097 	},
2098 };
2099 
2100 #define PERIPH_CLK(_name, _dev, _con, _clk_num, _reg, _max, _inputs, _flags) \
2101 	{						\
2102 		.name      = _name,			\
2103 		.lookup    = {				\
2104 			.dev_id    = _dev,		\
2105 			.con_id	   = _con,		\
2106 		},					\
2107 		.ops       = &tegra_periph_clk_ops,	\
2108 		.reg       = _reg,			\
2109 		.inputs    = _inputs,			\
2110 		.flags     = _flags,			\
2111 		.max_rate  = _max,			\
2112 		.u.periph = {				\
2113 			.clk_num   = _clk_num,		\
2114 		},					\
2115 	}
2116 
2117 #define SHARED_CLK(_name, _dev, _con, _parent)		\
2118 	{						\
2119 		.name      = _name,			\
2120 		.lookup    = {				\
2121 			.dev_id    = _dev,		\
2122 			.con_id    = _con,		\
2123 		},					\
2124 		.ops       = &tegra_clk_shared_bus_ops,	\
2125 		.parent = _parent,			\
2126 	}
2127 
2128 struct clk tegra_list_clks[] = {
2129 	PERIPH_CLK("apbdma",	"tegra-dma",		NULL,	34,	0,	108000000, mux_pclk,			0),
2130 	PERIPH_CLK("rtc",	"rtc-tegra",		NULL,	4,	0,	32768,     mux_clk_32k,			PERIPH_NO_RESET),
2131 	PERIPH_CLK("timer",	"timer",		NULL,	5,	0,	26000000,  mux_clk_m,			0),
2132 	PERIPH_CLK("i2s1",	"tegra-i2s.0",		NULL,	11,	0x100,	26000000,  mux_pllaout0_audio2x_pllp_clkm,	MUX | DIV_U71),
2133 	PERIPH_CLK("i2s2",	"tegra-i2s.1",		NULL,	18,	0x104,	26000000,  mux_pllaout0_audio2x_pllp_clkm,	MUX | DIV_U71),
2134 	PERIPH_CLK("spdif_out",	"spdif_out",		NULL,	10,	0x108,	100000000, mux_pllaout0_audio2x_pllp_clkm,	MUX | DIV_U71),
2135 	PERIPH_CLK("spdif_in",	"spdif_in",		NULL,	10,	0x10c,	100000000, mux_pllp_pllc_pllm,		MUX | DIV_U71),
2136 	PERIPH_CLK("pwm",	"pwm",			NULL,	17,	0x110,	432000000, mux_pllp_pllc_audio_clkm_clk32,	MUX | DIV_U71),
2137 	PERIPH_CLK("spi",	"spi",			NULL,	43,	0x114,	40000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71),
2138 	PERIPH_CLK("xio",	"xio",			NULL,	45,	0x120,	150000000, mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71),
2139 	PERIPH_CLK("twc",	"twc",			NULL,	16,	0x12c,	150000000, mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71),
2140 	PERIPH_CLK("sbc1",	"spi_tegra.0",		NULL,	41,	0x134,	160000000, mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71),
2141 	PERIPH_CLK("sbc2",	"spi_tegra.1",		NULL,	44,	0x118,	160000000, mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71),
2142 	PERIPH_CLK("sbc3",	"spi_tegra.2",		NULL,	46,	0x11c,	160000000, mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71),
2143 	PERIPH_CLK("sbc4",	"spi_tegra.3",		NULL,	68,	0x1b4,	160000000, mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71),
2144 	PERIPH_CLK("ide",	"ide",			NULL,	25,	0x144,	100000000, mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71), /* requires min voltage */
2145 	PERIPH_CLK("ndflash",	"tegra_nand",		NULL,	13,	0x160,	164000000, mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71), /* scales with voltage */
2146 	PERIPH_CLK("vfir",	"vfir",			NULL,	7,	0x168,	72000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71),
2147 	PERIPH_CLK("sdmmc1",	"sdhci-tegra.0",	NULL,	14,	0x150,	52000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71), /* scales with voltage */
2148 	PERIPH_CLK("sdmmc2",	"sdhci-tegra.1",	NULL,	9,	0x154,	52000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71), /* scales with voltage */
2149 	PERIPH_CLK("sdmmc3",	"sdhci-tegra.2",	NULL,	69,	0x1bc,	52000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71), /* scales with voltage */
2150 	PERIPH_CLK("sdmmc4",	"sdhci-tegra.3",	NULL,	15,	0x164,	52000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71), /* scales with voltage */
2151 	PERIPH_CLK("vcp",	"tegra-avp",		"vcp",	29,	0,	250000000, mux_clk_m,			0),
2152 	PERIPH_CLK("bsea",	"tegra-avp",		"bsea",	62,	0,	250000000, mux_clk_m,			0),
2153 	PERIPH_CLK("bsev",	"tegra-aes",		"bsev",	63,	0,	250000000, mux_clk_m,			0),
2154 	PERIPH_CLK("vde",	"tegra-avp",		"vde",	61,	0x1c8,	250000000, mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71), /* scales with voltage and process_id */
2155 	PERIPH_CLK("csite",	"csite",		NULL,	73,	0x1d4,	144000000, mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71), /* max rate ??? */
2156 	/* FIXME: what is la? */
2157 	PERIPH_CLK("la",	"la",			NULL,	76,	0x1f8,	26000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71),
2158 	PERIPH_CLK("owr",	"tegra_w1",		NULL,	71,	0x1cc,	26000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71),
2159 	PERIPH_CLK("nor",	"nor",			NULL,	42,	0x1d0,	92000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71), /* requires min voltage */
2160 	PERIPH_CLK("mipi",	"mipi",			NULL,	50,	0x174,	60000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U71), /* scales with voltage */
2161 	PERIPH_CLK("i2c1",	"tegra-i2c.0",		NULL,	12,	0x124,	26000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U16),
2162 	PERIPH_CLK("i2c2",	"tegra-i2c.1",		NULL,	54,	0x198,	26000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U16),
2163 	PERIPH_CLK("i2c3",	"tegra-i2c.2",		NULL,	67,	0x1b8,	26000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U16),
2164 	PERIPH_CLK("dvc",	"tegra-i2c.3",		NULL,	47,	0x128,	26000000,  mux_pllp_pllc_pllm_clkm,	MUX | DIV_U16),
2165 	PERIPH_CLK("i2c1_i2c",	"tegra-i2c.0",		"i2c",	0,	0,	72000000,  mux_pllp_out3,			0),
2166 	PERIPH_CLK("i2c2_i2c",	"tegra-i2c.1",		"i2c",	0,	0,	72000000,  mux_pllp_out3,			0),
2167 	PERIPH_CLK("i2c3_i2c",	"tegra-i2c.2",		"i2c",	0,	0,	72000000,  mux_pllp_out3,			0),
2168 	PERIPH_CLK("dvc_i2c",	"tegra-i2c.3",		"i2c",	0,	0,	72000000,  mux_pllp_out3,			0),
2169 	PERIPH_CLK("uarta",	"uart.0",		NULL,	6,	0x178,	600000000, mux_pllp_pllc_pllm_clkm,	MUX),
2170 	PERIPH_CLK("uartb",	"uart.1",		NULL,	7,	0x17c,	600000000, mux_pllp_pllc_pllm_clkm,	MUX),
2171 	PERIPH_CLK("uartc",	"uart.2",		NULL,	55,	0x1a0,	600000000, mux_pllp_pllc_pllm_clkm,	MUX),
2172 	PERIPH_CLK("uartd",	"uart.3",		NULL,	65,	0x1c0,	600000000, mux_pllp_pllc_pllm_clkm,	MUX),
2173 	PERIPH_CLK("uarte",	"uart.4",		NULL,	66,	0x1c4,	600000000, mux_pllp_pllc_pllm_clkm,	MUX),
2174 	PERIPH_CLK("3d",	"3d",			NULL,	24,	0x158,	300000000, mux_pllm_pllc_pllp_plla,	MUX | DIV_U71 | PERIPH_MANUAL_RESET), /* scales with voltage and process_id */
2175 	PERIPH_CLK("2d",	"2d",			NULL,	21,	0x15c,	300000000, mux_pllm_pllc_pllp_plla,	MUX | DIV_U71), /* scales with voltage and process_id */
2176 	PERIPH_CLK("vi",	"tegra_camera",		"vi",	20,	0x148,	150000000, mux_pllm_pllc_pllp_plla,	MUX | DIV_U71), /* scales with voltage and process_id */
2177 	PERIPH_CLK("vi_sensor",	"tegra_camera",		"vi_sensor",	20,	0x1a8,	150000000, mux_pllm_pllc_pllp_plla,	MUX | DIV_U71 | PERIPH_NO_RESET), /* scales with voltage and process_id */
2178 	PERIPH_CLK("epp",	"epp",			NULL,	19,	0x16c,	300000000, mux_pllm_pllc_pllp_plla,	MUX | DIV_U71), /* scales with voltage and process_id */
2179 	PERIPH_CLK("mpe",	"mpe",			NULL,	60,	0x170,	250000000, mux_pllm_pllc_pllp_plla,	MUX | DIV_U71), /* scales with voltage and process_id */
2180 	PERIPH_CLK("host1x",	"host1x",		NULL,	28,	0x180,	166000000, mux_pllm_pllc_pllp_plla,	MUX | DIV_U71), /* scales with voltage and process_id */
2181 	PERIPH_CLK("cve",	"cve",			NULL,	49,	0x140,	250000000, mux_pllp_plld_pllc_clkm,	MUX | DIV_U71), /* requires min voltage */
2182 	PERIPH_CLK("tvo",	"tvo",			NULL,	49,	0x188,	250000000, mux_pllp_plld_pllc_clkm,	MUX | DIV_U71), /* requires min voltage */
2183 	PERIPH_CLK("hdmi",	"hdmi",			NULL,	51,	0x18c,	600000000, mux_pllp_plld_pllc_clkm,	MUX | DIV_U71), /* requires min voltage */
2184 	PERIPH_CLK("tvdac",	"tvdac",		NULL,	53,	0x194,	250000000, mux_pllp_plld_pllc_clkm,	MUX | DIV_U71), /* requires min voltage */
2185 	PERIPH_CLK("disp1",	"tegradc.0",		NULL,	27,	0x138,	600000000, mux_pllp_plld_pllc_clkm,	MUX | DIV_U71), /* scales with voltage and process_id */
2186 	PERIPH_CLK("disp2",	"tegradc.1",		NULL,	26,	0x13c,	600000000, mux_pllp_plld_pllc_clkm,	MUX | DIV_U71), /* scales with voltage and process_id */
2187 	PERIPH_CLK("usbd",	"fsl-tegra-udc",	NULL,	22,	0,	480000000, mux_clk_m,			0), /* requires min voltage */
2188 	PERIPH_CLK("usb2",	"tegra-ehci.1",		NULL,	58,	0,	480000000, mux_clk_m,			0), /* requires min voltage */
2189 	PERIPH_CLK("usb3",	"tegra-ehci.2",		NULL,	59,	0,	480000000, mux_clk_m,			0), /* requires min voltage */
2190 	PERIPH_CLK("dsi",	"dsi",			NULL,	48,	0,	500000000, mux_plld,			0), /* scales with voltage */
2191 	PERIPH_CLK("csi",	"tegra_camera",		"csi",	52,	0,	72000000,  mux_pllp_out3,		0),
2192 	PERIPH_CLK("isp",	"tegra_camera",		"isp",	23,	0,	150000000, mux_clk_m,			0), /* same frequency as VI */
2193 	PERIPH_CLK("csus",	"tegra_camera",		"csus",	92,	0,	150000000, mux_clk_m,			PERIPH_NO_RESET),
2194 	PERIPH_CLK("pex",       NULL,			"pex",  70,     0,	26000000,  mux_clk_m,			PERIPH_MANUAL_RESET),
2195 	PERIPH_CLK("afi",       NULL,			"afi",  72,     0,	26000000,  mux_clk_m,			PERIPH_MANUAL_RESET),
2196 	PERIPH_CLK("pcie_xclk", NULL,		  "pcie_xclk",  74,     0,	26000000,  mux_clk_m,			PERIPH_MANUAL_RESET),
2197 
2198 	SHARED_CLK("avp.sclk",	"tegra-avp",		"sclk",	&tegra_clk_sclk),
2199 	SHARED_CLK("avp.emc",	"tegra-avp",		"emc",	&tegra_clk_emc),
2200 	SHARED_CLK("cpu.emc",	"cpu",			"emc",	&tegra_clk_emc),
2201 	SHARED_CLK("disp1.emc",	"tegradc.0",		"emc",	&tegra_clk_emc),
2202 	SHARED_CLK("disp2.emc",	"tegradc.1",		"emc",	&tegra_clk_emc),
2203 	SHARED_CLK("hdmi.emc",	"hdmi",			"emc",	&tegra_clk_emc),
2204 	SHARED_CLK("host.emc",	"tegra_grhost",		"emc",	&tegra_clk_emc),
2205 	SHARED_CLK("usbd.emc",	"fsl-tegra-udc",	"emc",	&tegra_clk_emc),
2206 	SHARED_CLK("usb1.emc",	"tegra-ehci.0",		"emc",	&tegra_clk_emc),
2207 	SHARED_CLK("usb2.emc",	"tegra-ehci.1",		"emc",	&tegra_clk_emc),
2208 	SHARED_CLK("usb3.emc",	"tegra-ehci.2",		"emc",	&tegra_clk_emc),
2209 };
2210 
2211 #define CLK_DUPLICATE(_name, _dev, _con)		\
2212 	{						\
2213 		.name	= _name,			\
2214 		.lookup	= {				\
2215 			.dev_id	= _dev,			\
2216 			.con_id		= _con,		\
2217 		},					\
2218 	}
2219 
2220 /* Some clocks may be used by different drivers depending on the board
2221  * configuration.  List those here to register them twice in the clock lookup
2222  * table under two names.
2223  */
2224 struct clk_duplicate tegra_clk_duplicates[] = {
2225 	CLK_DUPLICATE("uarta",	"tegra_uart.0",	NULL),
2226 	CLK_DUPLICATE("uartb",	"tegra_uart.1",	NULL),
2227 	CLK_DUPLICATE("uartc",	"tegra_uart.2",	NULL),
2228 	CLK_DUPLICATE("uartd",	"tegra_uart.3",	NULL),
2229 	CLK_DUPLICATE("uarte",	"tegra_uart.4",	NULL),
2230 	CLK_DUPLICATE("usbd", "utmip-pad", NULL),
2231 	CLK_DUPLICATE("usbd", "tegra-ehci.0", NULL),
2232 	CLK_DUPLICATE("usbd", "tegra-otg", NULL),
2233 	CLK_DUPLICATE("hdmi", "tegradc.0", "hdmi"),
2234 	CLK_DUPLICATE("hdmi", "tegradc.1", "hdmi"),
2235 	CLK_DUPLICATE("pwm", "tegra_pwm.0", NULL),
2236 	CLK_DUPLICATE("pwm", "tegra_pwm.1", NULL),
2237 	CLK_DUPLICATE("pwm", "tegra_pwm.2", NULL),
2238 	CLK_DUPLICATE("pwm", "tegra_pwm.3", NULL),
2239 	CLK_DUPLICATE("host1x", "tegra_grhost", "host1x"),
2240 	CLK_DUPLICATE("2d", "tegra_grhost", "gr2d"),
2241 	CLK_DUPLICATE("3d", "tegra_grhost", "gr3d"),
2242 	CLK_DUPLICATE("epp", "tegra_grhost", "epp"),
2243 	CLK_DUPLICATE("mpe", "tegra_grhost", "mpe"),
2244 	CLK_DUPLICATE("cop", "tegra-avp", "cop"),
2245 	CLK_DUPLICATE("vde", "tegra-aes", "vde"),
2246 };
2247 
2248 #define CLK(dev, con, ck)	\
2249 	{			\
2250 		.dev_id = dev,	\
2251 		.con_id = con,	\
2252 		.clk = ck,	\
2253 	}
2254 
2255 struct clk *tegra_ptr_clks[] = {
2256 	&tegra_clk_32k,
2257 	&tegra_pll_s,
2258 	&tegra_clk_m,
2259 	&tegra_pll_m,
2260 	&tegra_pll_m_out1,
2261 	&tegra_pll_c,
2262 	&tegra_pll_c_out1,
2263 	&tegra_pll_p,
2264 	&tegra_pll_p_out1,
2265 	&tegra_pll_p_out2,
2266 	&tegra_pll_p_out3,
2267 	&tegra_pll_p_out4,
2268 	&tegra_pll_a,
2269 	&tegra_pll_a_out0,
2270 	&tegra_pll_d,
2271 	&tegra_pll_d_out0,
2272 	&tegra_pll_u,
2273 	&tegra_pll_x,
2274 	&tegra_pll_e,
2275 	&tegra_clk_cclk,
2276 	&tegra_clk_sclk,
2277 	&tegra_clk_hclk,
2278 	&tegra_clk_pclk,
2279 	&tegra_clk_d,
2280 	&tegra_clk_cdev1,
2281 	&tegra_clk_cdev2,
2282 	&tegra_clk_virtual_cpu,
2283 	&tegra_clk_blink,
2284 	&tegra_clk_cop,
2285 	&tegra_clk_emc,
2286 };
2287 
tegra2_init_one_clock(struct clk * c)2288 static void tegra2_init_one_clock(struct clk *c)
2289 {
2290 	clk_init(c);
2291 	INIT_LIST_HEAD(&c->shared_bus_list);
2292 	if (!c->lookup.dev_id && !c->lookup.con_id)
2293 		c->lookup.con_id = c->name;
2294 	c->lookup.clk = c;
2295 	clkdev_add(&c->lookup);
2296 }
2297 
tegra2_init_clocks(void)2298 void __init tegra2_init_clocks(void)
2299 {
2300 	int i;
2301 	struct clk *c;
2302 
2303 	for (i = 0; i < ARRAY_SIZE(tegra_ptr_clks); i++)
2304 		tegra2_init_one_clock(tegra_ptr_clks[i]);
2305 
2306 	for (i = 0; i < ARRAY_SIZE(tegra_list_clks); i++)
2307 		tegra2_init_one_clock(&tegra_list_clks[i]);
2308 
2309 	for (i = 0; i < ARRAY_SIZE(tegra_clk_duplicates); i++) {
2310 		c = tegra_get_clock_by_name(tegra_clk_duplicates[i].name);
2311 		if (!c) {
2312 			pr_err("%s: Unknown duplicate clock %s\n", __func__,
2313 				tegra_clk_duplicates[i].name);
2314 			continue;
2315 		}
2316 
2317 		tegra_clk_duplicates[i].lookup.clk = c;
2318 		clkdev_add(&tegra_clk_duplicates[i].lookup);
2319 	}
2320 
2321 	init_audio_sync_clock_mux();
2322 }
2323 
2324 #ifdef CONFIG_PM
2325 static u32 clk_rst_suspend[RST_DEVICES_NUM + CLK_OUT_ENB_NUM +
2326 			   PERIPH_CLK_SOURCE_NUM + 22];
2327 
tegra_clk_suspend(void)2328 void tegra_clk_suspend(void)
2329 {
2330 	unsigned long off, i;
2331 	u32 *ctx = clk_rst_suspend;
2332 
2333 	*ctx++ = clk_readl(OSC_CTRL) & OSC_CTRL_MASK;
2334 	*ctx++ = clk_readl(tegra_pll_c.reg + PLL_BASE);
2335 	*ctx++ = clk_readl(tegra_pll_c.reg + PLL_MISC(&tegra_pll_c));
2336 	*ctx++ = clk_readl(tegra_pll_a.reg + PLL_BASE);
2337 	*ctx++ = clk_readl(tegra_pll_a.reg + PLL_MISC(&tegra_pll_a));
2338 	*ctx++ = clk_readl(tegra_pll_s.reg + PLL_BASE);
2339 	*ctx++ = clk_readl(tegra_pll_s.reg + PLL_MISC(&tegra_pll_s));
2340 	*ctx++ = clk_readl(tegra_pll_d.reg + PLL_BASE);
2341 	*ctx++ = clk_readl(tegra_pll_d.reg + PLL_MISC(&tegra_pll_d));
2342 	*ctx++ = clk_readl(tegra_pll_u.reg + PLL_BASE);
2343 	*ctx++ = clk_readl(tegra_pll_u.reg + PLL_MISC(&tegra_pll_u));
2344 
2345 	*ctx++ = clk_readl(tegra_pll_m_out1.reg);
2346 	*ctx++ = clk_readl(tegra_pll_a_out0.reg);
2347 	*ctx++ = clk_readl(tegra_pll_c_out1.reg);
2348 
2349 	*ctx++ = clk_readl(tegra_clk_cclk.reg);
2350 	*ctx++ = clk_readl(tegra_clk_cclk.reg + SUPER_CLK_DIVIDER);
2351 
2352 	*ctx++ = clk_readl(tegra_clk_sclk.reg);
2353 	*ctx++ = clk_readl(tegra_clk_sclk.reg + SUPER_CLK_DIVIDER);
2354 	*ctx++ = clk_readl(tegra_clk_pclk.reg);
2355 
2356 	*ctx++ = clk_readl(tegra_clk_audio.reg);
2357 
2358 	for (off = PERIPH_CLK_SOURCE_I2S1; off <= PERIPH_CLK_SOURCE_OSC;
2359 			off += 4) {
2360 		if (off == PERIPH_CLK_SOURCE_EMC)
2361 			continue;
2362 		*ctx++ = clk_readl(off);
2363 	}
2364 
2365 	off = RST_DEVICES;
2366 	for (i = 0; i < RST_DEVICES_NUM; i++, off += 4)
2367 		*ctx++ = clk_readl(off);
2368 
2369 	off = CLK_OUT_ENB;
2370 	for (i = 0; i < CLK_OUT_ENB_NUM; i++, off += 4)
2371 		*ctx++ = clk_readl(off);
2372 
2373 	*ctx++ = clk_readl(MISC_CLK_ENB);
2374 	*ctx++ = clk_readl(CLK_MASK_ARM);
2375 
2376 	BUG_ON(ctx - clk_rst_suspend != ARRAY_SIZE(clk_rst_suspend));
2377 }
2378 
tegra_clk_resume(void)2379 void tegra_clk_resume(void)
2380 {
2381 	unsigned long off, i;
2382 	const u32 *ctx = clk_rst_suspend;
2383 	u32 val;
2384 
2385 	val = clk_readl(OSC_CTRL) & ~OSC_CTRL_MASK;
2386 	val |= *ctx++;
2387 	clk_writel(val, OSC_CTRL);
2388 
2389 	clk_writel(*ctx++, tegra_pll_c.reg + PLL_BASE);
2390 	clk_writel(*ctx++, tegra_pll_c.reg + PLL_MISC(&tegra_pll_c));
2391 	clk_writel(*ctx++, tegra_pll_a.reg + PLL_BASE);
2392 	clk_writel(*ctx++, tegra_pll_a.reg + PLL_MISC(&tegra_pll_a));
2393 	clk_writel(*ctx++, tegra_pll_s.reg + PLL_BASE);
2394 	clk_writel(*ctx++, tegra_pll_s.reg + PLL_MISC(&tegra_pll_s));
2395 	clk_writel(*ctx++, tegra_pll_d.reg + PLL_BASE);
2396 	clk_writel(*ctx++, tegra_pll_d.reg + PLL_MISC(&tegra_pll_d));
2397 	clk_writel(*ctx++, tegra_pll_u.reg + PLL_BASE);
2398 	clk_writel(*ctx++, tegra_pll_u.reg + PLL_MISC(&tegra_pll_u));
2399 	udelay(1000);
2400 
2401 	clk_writel(*ctx++, tegra_pll_m_out1.reg);
2402 	clk_writel(*ctx++, tegra_pll_a_out0.reg);
2403 	clk_writel(*ctx++, tegra_pll_c_out1.reg);
2404 
2405 	clk_writel(*ctx++, tegra_clk_cclk.reg);
2406 	clk_writel(*ctx++, tegra_clk_cclk.reg + SUPER_CLK_DIVIDER);
2407 
2408 	clk_writel(*ctx++, tegra_clk_sclk.reg);
2409 	clk_writel(*ctx++, tegra_clk_sclk.reg + SUPER_CLK_DIVIDER);
2410 	clk_writel(*ctx++, tegra_clk_pclk.reg);
2411 
2412 	clk_writel(*ctx++, tegra_clk_audio.reg);
2413 
2414 	/* enable all clocks before configuring clock sources */
2415 	clk_writel(0xbffffff9ul, CLK_OUT_ENB);
2416 	clk_writel(0xfefffff7ul, CLK_OUT_ENB + 4);
2417 	clk_writel(0x77f01bfful, CLK_OUT_ENB + 8);
2418 	wmb();
2419 
2420 	for (off = PERIPH_CLK_SOURCE_I2S1; off <= PERIPH_CLK_SOURCE_OSC;
2421 			off += 4) {
2422 		if (off == PERIPH_CLK_SOURCE_EMC)
2423 			continue;
2424 		clk_writel(*ctx++, off);
2425 	}
2426 	wmb();
2427 
2428 	off = RST_DEVICES;
2429 	for (i = 0; i < RST_DEVICES_NUM; i++, off += 4)
2430 		clk_writel(*ctx++, off);
2431 	wmb();
2432 
2433 	off = CLK_OUT_ENB;
2434 	for (i = 0; i < CLK_OUT_ENB_NUM; i++, off += 4)
2435 		clk_writel(*ctx++, off);
2436 	wmb();
2437 
2438 	clk_writel(*ctx++, MISC_CLK_ENB);
2439 	clk_writel(*ctx++, CLK_MASK_ARM);
2440 }
2441 #endif
2442