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