xref: /linux/arch/arm/mach-omap1/clock_data.c (revision 95e9fd10f06cb5642028b6b851e32b8c8afb4571)
1 /*
2  *  linux/arch/arm/mach-omap1/clock_data.c
3  *
4  *  Copyright (C) 2004 - 2005, 2009-2010 Nokia Corporation
5  *  Written by Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com>
6  *  Based on clocks.h by Tony Lindgren, Gordon McNutt and RidgeRun, Inc
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
12  * To do:
13  * - Clocks that are only available on some chips should be marked with the
14  *   chips that they are present on.
15  */
16 
17 #include <linux/kernel.h>
18 #include <linux/io.h>
19 #include <linux/clk.h>
20 #include <linux/cpufreq.h>
21 #include <linux/delay.h>
22 
23 #include <asm/mach-types.h>  /* for machine_is_* */
24 
25 #include <plat/clock.h>
26 #include <plat/cpu.h>
27 #include <plat/clkdev_omap.h>
28 #include <plat/board.h>
29 #include <plat/sram.h>	/* for omap_sram_reprogram_clock() */
30 
31 #include <mach/hardware.h>
32 #include <mach/usb.h>   /* for OTG_BASE */
33 
34 #include "iomap.h"
35 #include "clock.h"
36 
37 /* Some ARM_IDLECT1 bit shifts - used in struct arm_idlect1_clk */
38 #define IDL_CLKOUT_ARM_SHIFT			12
39 #define IDLTIM_ARM_SHIFT			9
40 #define IDLAPI_ARM_SHIFT			8
41 #define IDLIF_ARM_SHIFT				6
42 #define IDLLB_ARM_SHIFT				4	/* undocumented? */
43 #define OMAP1510_IDLLCD_ARM_SHIFT		3	/* undocumented? */
44 #define IDLPER_ARM_SHIFT			2
45 #define IDLXORP_ARM_SHIFT			1
46 #define IDLWDT_ARM_SHIFT			0
47 
48 /* Some MOD_CONF_CTRL_0 bit shifts - used in struct clk.enable_bit */
49 #define CONF_MOD_UART3_CLK_MODE_R		31
50 #define CONF_MOD_UART2_CLK_MODE_R		30
51 #define CONF_MOD_UART1_CLK_MODE_R		29
52 #define CONF_MOD_MMC_SD_CLK_REQ_R		23
53 #define CONF_MOD_MCBSP3_AUXON			20
54 
55 /* Some MOD_CONF_CTRL_1 bit shifts - used in struct clk.enable_bit */
56 #define CONF_MOD_SOSSI_CLK_EN_R			16
57 
58 /* Some OTG_SYSCON_2-specific bit fields */
59 #define OTG_SYSCON_2_UHOST_EN_SHIFT		8
60 
61 /* Some SOFT_REQ_REG bit fields - used in struct clk.enable_bit */
62 #define SOFT_MMC2_DPLL_REQ_SHIFT	13
63 #define SOFT_MMC_DPLL_REQ_SHIFT		12
64 #define SOFT_UART3_DPLL_REQ_SHIFT	11
65 #define SOFT_UART2_DPLL_REQ_SHIFT	10
66 #define SOFT_UART1_DPLL_REQ_SHIFT	9
67 #define SOFT_USB_OTG_DPLL_REQ_SHIFT	8
68 #define SOFT_CAM_DPLL_REQ_SHIFT		7
69 #define SOFT_COM_MCKO_REQ_SHIFT		6
70 #define SOFT_PERIPH_REQ_SHIFT		5	/* sys_ck gate for UART2 ? */
71 #define USB_REQ_EN_SHIFT		4
72 #define SOFT_USB_REQ_SHIFT		3	/* sys_ck gate for USB host? */
73 #define SOFT_SDW_REQ_SHIFT		2	/* sys_ck gate for Bluetooth? */
74 #define SOFT_COM_REQ_SHIFT		1	/* sys_ck gate for com proc? */
75 #define SOFT_DPLL_REQ_SHIFT		0
76 
77 /*
78  * Omap1 clocks
79  */
80 
81 static struct clk ck_ref = {
82 	.name		= "ck_ref",
83 	.ops		= &clkops_null,
84 	.rate		= 12000000,
85 };
86 
87 static struct clk ck_dpll1 = {
88 	.name		= "ck_dpll1",
89 	.ops		= &clkops_null,
90 	.parent		= &ck_ref,
91 };
92 
93 /*
94  * FIXME: This clock seems to be necessary but no-one has asked for its
95  * activation.  [ FIX: SoSSI, SSR ]
96  */
97 static struct arm_idlect1_clk ck_dpll1out = {
98 	.clk = {
99 		.name		= "ck_dpll1out",
100 		.ops		= &clkops_generic,
101 		.parent		= &ck_dpll1,
102 		.flags		= CLOCK_IDLE_CONTROL | ENABLE_REG_32BIT |
103 				  ENABLE_ON_INIT,
104 		.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT2),
105 		.enable_bit	= EN_CKOUT_ARM,
106 		.recalc		= &followparent_recalc,
107 	},
108 	.idlect_shift	= IDL_CLKOUT_ARM_SHIFT,
109 };
110 
111 static struct clk sossi_ck = {
112 	.name		= "ck_sossi",
113 	.ops		= &clkops_generic,
114 	.parent		= &ck_dpll1out.clk,
115 	.flags		= CLOCK_NO_IDLE_PARENT | ENABLE_REG_32BIT,
116 	.enable_reg	= OMAP1_IO_ADDRESS(MOD_CONF_CTRL_1),
117 	.enable_bit	= CONF_MOD_SOSSI_CLK_EN_R,
118 	.recalc		= &omap1_sossi_recalc,
119 	.set_rate	= &omap1_set_sossi_rate,
120 };
121 
122 static struct clk arm_ck = {
123 	.name		= "arm_ck",
124 	.ops		= &clkops_null,
125 	.parent		= &ck_dpll1,
126 	.rate_offset	= CKCTL_ARMDIV_OFFSET,
127 	.recalc		= &omap1_ckctl_recalc,
128 	.round_rate	= omap1_clk_round_rate_ckctl_arm,
129 	.set_rate	= omap1_clk_set_rate_ckctl_arm,
130 };
131 
132 static struct arm_idlect1_clk armper_ck = {
133 	.clk = {
134 		.name		= "armper_ck",
135 		.ops		= &clkops_generic,
136 		.parent		= &ck_dpll1,
137 		.flags		= CLOCK_IDLE_CONTROL,
138 		.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT2),
139 		.enable_bit	= EN_PERCK,
140 		.rate_offset	= CKCTL_PERDIV_OFFSET,
141 		.recalc		= &omap1_ckctl_recalc,
142 		.round_rate	= omap1_clk_round_rate_ckctl_arm,
143 		.set_rate	= omap1_clk_set_rate_ckctl_arm,
144 	},
145 	.idlect_shift	= IDLPER_ARM_SHIFT,
146 };
147 
148 /*
149  * FIXME: This clock seems to be necessary but no-one has asked for its
150  * activation.  [ GPIO code for 1510 ]
151  */
152 static struct clk arm_gpio_ck = {
153 	.name		= "ick",
154 	.ops		= &clkops_generic,
155 	.parent		= &ck_dpll1,
156 	.flags		= ENABLE_ON_INIT,
157 	.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT2),
158 	.enable_bit	= EN_GPIOCK,
159 	.recalc		= &followparent_recalc,
160 };
161 
162 static struct arm_idlect1_clk armxor_ck = {
163 	.clk = {
164 		.name		= "armxor_ck",
165 		.ops		= &clkops_generic,
166 		.parent		= &ck_ref,
167 		.flags		= CLOCK_IDLE_CONTROL,
168 		.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT2),
169 		.enable_bit	= EN_XORPCK,
170 		.recalc		= &followparent_recalc,
171 	},
172 	.idlect_shift	= IDLXORP_ARM_SHIFT,
173 };
174 
175 static struct arm_idlect1_clk armtim_ck = {
176 	.clk = {
177 		.name		= "armtim_ck",
178 		.ops		= &clkops_generic,
179 		.parent		= &ck_ref,
180 		.flags		= CLOCK_IDLE_CONTROL,
181 		.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT2),
182 		.enable_bit	= EN_TIMCK,
183 		.recalc		= &followparent_recalc,
184 	},
185 	.idlect_shift	= IDLTIM_ARM_SHIFT,
186 };
187 
188 static struct arm_idlect1_clk armwdt_ck = {
189 	.clk = {
190 		.name		= "armwdt_ck",
191 		.ops		= &clkops_generic,
192 		.parent		= &ck_ref,
193 		.flags		= CLOCK_IDLE_CONTROL,
194 		.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT2),
195 		.enable_bit	= EN_WDTCK,
196 		.fixed_div	= 14,
197 		.recalc		= &omap_fixed_divisor_recalc,
198 	},
199 	.idlect_shift	= IDLWDT_ARM_SHIFT,
200 };
201 
202 static struct clk arminth_ck16xx = {
203 	.name		= "arminth_ck",
204 	.ops		= &clkops_null,
205 	.parent		= &arm_ck,
206 	.recalc		= &followparent_recalc,
207 	/* Note: On 16xx the frequency can be divided by 2 by programming
208 	 * ARM_CKCTL:ARM_INTHCK_SEL(14) to 1
209 	 *
210 	 * 1510 version is in TC clocks.
211 	 */
212 };
213 
214 static struct clk dsp_ck = {
215 	.name		= "dsp_ck",
216 	.ops		= &clkops_generic,
217 	.parent		= &ck_dpll1,
218 	.enable_reg	= OMAP1_IO_ADDRESS(ARM_CKCTL),
219 	.enable_bit	= EN_DSPCK,
220 	.rate_offset	= CKCTL_DSPDIV_OFFSET,
221 	.recalc		= &omap1_ckctl_recalc,
222 	.round_rate	= omap1_clk_round_rate_ckctl_arm,
223 	.set_rate	= omap1_clk_set_rate_ckctl_arm,
224 };
225 
226 static struct clk dspmmu_ck = {
227 	.name		= "dspmmu_ck",
228 	.ops		= &clkops_null,
229 	.parent		= &ck_dpll1,
230 	.rate_offset	= CKCTL_DSPMMUDIV_OFFSET,
231 	.recalc		= &omap1_ckctl_recalc,
232 	.round_rate	= omap1_clk_round_rate_ckctl_arm,
233 	.set_rate	= omap1_clk_set_rate_ckctl_arm,
234 };
235 
236 static struct clk dspper_ck = {
237 	.name		= "dspper_ck",
238 	.ops		= &clkops_dspck,
239 	.parent		= &ck_dpll1,
240 	.enable_reg	= DSP_IDLECT2,
241 	.enable_bit	= EN_PERCK,
242 	.rate_offset	= CKCTL_PERDIV_OFFSET,
243 	.recalc		= &omap1_ckctl_recalc_dsp_domain,
244 	.round_rate	= omap1_clk_round_rate_ckctl_arm,
245 	.set_rate	= &omap1_clk_set_rate_dsp_domain,
246 };
247 
248 static struct clk dspxor_ck = {
249 	.name		= "dspxor_ck",
250 	.ops		= &clkops_dspck,
251 	.parent		= &ck_ref,
252 	.enable_reg	= DSP_IDLECT2,
253 	.enable_bit	= EN_XORPCK,
254 	.recalc		= &followparent_recalc,
255 };
256 
257 static struct clk dsptim_ck = {
258 	.name		= "dsptim_ck",
259 	.ops		= &clkops_dspck,
260 	.parent		= &ck_ref,
261 	.enable_reg	= DSP_IDLECT2,
262 	.enable_bit	= EN_DSPTIMCK,
263 	.recalc		= &followparent_recalc,
264 };
265 
266 static struct arm_idlect1_clk tc_ck = {
267 	.clk = {
268 		.name		= "tc_ck",
269 		.ops		= &clkops_null,
270 		.parent		= &ck_dpll1,
271 		.flags		= CLOCK_IDLE_CONTROL,
272 		.rate_offset	= CKCTL_TCDIV_OFFSET,
273 		.recalc		= &omap1_ckctl_recalc,
274 		.round_rate	= omap1_clk_round_rate_ckctl_arm,
275 		.set_rate	= omap1_clk_set_rate_ckctl_arm,
276 	},
277 	.idlect_shift	= IDLIF_ARM_SHIFT,
278 };
279 
280 static struct clk arminth_ck1510 = {
281 	.name		= "arminth_ck",
282 	.ops		= &clkops_null,
283 	.parent		= &tc_ck.clk,
284 	.recalc		= &followparent_recalc,
285 	/* Note: On 1510 the frequency follows TC_CK
286 	 *
287 	 * 16xx version is in MPU clocks.
288 	 */
289 };
290 
291 static struct clk tipb_ck = {
292 	/* No-idle controlled by "tc_ck" */
293 	.name		= "tipb_ck",
294 	.ops		= &clkops_null,
295 	.parent		= &tc_ck.clk,
296 	.recalc		= &followparent_recalc,
297 };
298 
299 static struct clk l3_ocpi_ck = {
300 	/* No-idle controlled by "tc_ck" */
301 	.name		= "l3_ocpi_ck",
302 	.ops		= &clkops_generic,
303 	.parent		= &tc_ck.clk,
304 	.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT3),
305 	.enable_bit	= EN_OCPI_CK,
306 	.recalc		= &followparent_recalc,
307 };
308 
309 static struct clk tc1_ck = {
310 	.name		= "tc1_ck",
311 	.ops		= &clkops_generic,
312 	.parent		= &tc_ck.clk,
313 	.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT3),
314 	.enable_bit	= EN_TC1_CK,
315 	.recalc		= &followparent_recalc,
316 };
317 
318 /*
319  * FIXME: This clock seems to be necessary but no-one has asked for its
320  * activation.  [ pm.c (SRAM), CCP, Camera ]
321  */
322 static struct clk tc2_ck = {
323 	.name		= "tc2_ck",
324 	.ops		= &clkops_generic,
325 	.parent		= &tc_ck.clk,
326 	.flags		= ENABLE_ON_INIT,
327 	.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT3),
328 	.enable_bit	= EN_TC2_CK,
329 	.recalc		= &followparent_recalc,
330 };
331 
332 static struct clk dma_ck = {
333 	/* No-idle controlled by "tc_ck" */
334 	.name		= "dma_ck",
335 	.ops		= &clkops_null,
336 	.parent		= &tc_ck.clk,
337 	.recalc		= &followparent_recalc,
338 };
339 
340 static struct clk dma_lcdfree_ck = {
341 	.name		= "dma_lcdfree_ck",
342 	.ops		= &clkops_null,
343 	.parent		= &tc_ck.clk,
344 	.recalc		= &followparent_recalc,
345 };
346 
347 static struct arm_idlect1_clk api_ck = {
348 	.clk = {
349 		.name		= "api_ck",
350 		.ops		= &clkops_generic,
351 		.parent		= &tc_ck.clk,
352 		.flags		= CLOCK_IDLE_CONTROL,
353 		.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT2),
354 		.enable_bit	= EN_APICK,
355 		.recalc		= &followparent_recalc,
356 	},
357 	.idlect_shift	= IDLAPI_ARM_SHIFT,
358 };
359 
360 static struct arm_idlect1_clk lb_ck = {
361 	.clk = {
362 		.name		= "lb_ck",
363 		.ops		= &clkops_generic,
364 		.parent		= &tc_ck.clk,
365 		.flags		= CLOCK_IDLE_CONTROL,
366 		.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT2),
367 		.enable_bit	= EN_LBCK,
368 		.recalc		= &followparent_recalc,
369 	},
370 	.idlect_shift	= IDLLB_ARM_SHIFT,
371 };
372 
373 static struct clk rhea1_ck = {
374 	.name		= "rhea1_ck",
375 	.ops		= &clkops_null,
376 	.parent		= &tc_ck.clk,
377 	.recalc		= &followparent_recalc,
378 };
379 
380 static struct clk rhea2_ck = {
381 	.name		= "rhea2_ck",
382 	.ops		= &clkops_null,
383 	.parent		= &tc_ck.clk,
384 	.recalc		= &followparent_recalc,
385 };
386 
387 static struct clk lcd_ck_16xx = {
388 	.name		= "lcd_ck",
389 	.ops		= &clkops_generic,
390 	.parent		= &ck_dpll1,
391 	.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT2),
392 	.enable_bit	= EN_LCDCK,
393 	.rate_offset	= CKCTL_LCDDIV_OFFSET,
394 	.recalc		= &omap1_ckctl_recalc,
395 	.round_rate	= omap1_clk_round_rate_ckctl_arm,
396 	.set_rate	= omap1_clk_set_rate_ckctl_arm,
397 };
398 
399 static struct arm_idlect1_clk lcd_ck_1510 = {
400 	.clk = {
401 		.name		= "lcd_ck",
402 		.ops		= &clkops_generic,
403 		.parent		= &ck_dpll1,
404 		.flags		= CLOCK_IDLE_CONTROL,
405 		.enable_reg	= OMAP1_IO_ADDRESS(ARM_IDLECT2),
406 		.enable_bit	= EN_LCDCK,
407 		.rate_offset	= CKCTL_LCDDIV_OFFSET,
408 		.recalc		= &omap1_ckctl_recalc,
409 		.round_rate	= omap1_clk_round_rate_ckctl_arm,
410 		.set_rate	= omap1_clk_set_rate_ckctl_arm,
411 	},
412 	.idlect_shift	= OMAP1510_IDLLCD_ARM_SHIFT,
413 };
414 
415 /*
416  * XXX The enable_bit here is misused - it simply switches between 12MHz
417  * and 48MHz.  Reimplement with clksel.
418  *
419  * XXX does this need SYSC register handling?
420  */
421 static struct clk uart1_1510 = {
422 	.name		= "uart1_ck",
423 	.ops		= &clkops_null,
424 	/* Direct from ULPD, no real parent */
425 	.parent		= &armper_ck.clk,
426 	.rate		= 12000000,
427 	.flags		= ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
428 	.enable_reg	= OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
429 	.enable_bit	= CONF_MOD_UART1_CLK_MODE_R,
430 	.set_rate	= &omap1_set_uart_rate,
431 	.recalc		= &omap1_uart_recalc,
432 };
433 
434 /*
435  * XXX The enable_bit here is misused - it simply switches between 12MHz
436  * and 48MHz.  Reimplement with clksel.
437  *
438  * XXX SYSC register handling does not belong in the clock framework
439  */
440 static struct uart_clk uart1_16xx = {
441 	.clk	= {
442 		.name		= "uart1_ck",
443 		.ops		= &clkops_uart_16xx,
444 		/* Direct from ULPD, no real parent */
445 		.parent		= &armper_ck.clk,
446 		.rate		= 48000000,
447 		.flags		= ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
448 		.enable_reg	= OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
449 		.enable_bit	= CONF_MOD_UART1_CLK_MODE_R,
450 	},
451 	.sysc_addr	= 0xfffb0054,
452 };
453 
454 /*
455  * XXX The enable_bit here is misused - it simply switches between 12MHz
456  * and 48MHz.  Reimplement with clksel.
457  *
458  * XXX does this need SYSC register handling?
459  */
460 static struct clk uart2_ck = {
461 	.name		= "uart2_ck",
462 	.ops		= &clkops_null,
463 	/* Direct from ULPD, no real parent */
464 	.parent		= &armper_ck.clk,
465 	.rate		= 12000000,
466 	.flags		= ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
467 	.enable_reg	= OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
468 	.enable_bit	= CONF_MOD_UART2_CLK_MODE_R,
469 	.set_rate	= &omap1_set_uart_rate,
470 	.recalc		= &omap1_uart_recalc,
471 };
472 
473 /*
474  * XXX The enable_bit here is misused - it simply switches between 12MHz
475  * and 48MHz.  Reimplement with clksel.
476  *
477  * XXX does this need SYSC register handling?
478  */
479 static struct clk uart3_1510 = {
480 	.name		= "uart3_ck",
481 	.ops		= &clkops_null,
482 	/* Direct from ULPD, no real parent */
483 	.parent		= &armper_ck.clk,
484 	.rate		= 12000000,
485 	.flags		= ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
486 	.enable_reg	= OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
487 	.enable_bit	= CONF_MOD_UART3_CLK_MODE_R,
488 	.set_rate	= &omap1_set_uart_rate,
489 	.recalc		= &omap1_uart_recalc,
490 };
491 
492 /*
493  * XXX The enable_bit here is misused - it simply switches between 12MHz
494  * and 48MHz.  Reimplement with clksel.
495  *
496  * XXX SYSC register handling does not belong in the clock framework
497  */
498 static struct uart_clk uart3_16xx = {
499 	.clk	= {
500 		.name		= "uart3_ck",
501 		.ops		= &clkops_uart_16xx,
502 		/* Direct from ULPD, no real parent */
503 		.parent		= &armper_ck.clk,
504 		.rate		= 48000000,
505 		.flags		= ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
506 		.enable_reg	= OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
507 		.enable_bit	= CONF_MOD_UART3_CLK_MODE_R,
508 	},
509 	.sysc_addr	= 0xfffb9854,
510 };
511 
512 static struct clk usb_clko = {	/* 6 MHz output on W4_USB_CLKO */
513 	.name		= "usb_clko",
514 	.ops		= &clkops_generic,
515 	/* Direct from ULPD, no parent */
516 	.rate		= 6000000,
517 	.flags		= ENABLE_REG_32BIT,
518 	.enable_reg	= OMAP1_IO_ADDRESS(ULPD_CLOCK_CTRL),
519 	.enable_bit	= USB_MCLK_EN_BIT,
520 };
521 
522 static struct clk usb_hhc_ck1510 = {
523 	.name		= "usb_hhc_ck",
524 	.ops		= &clkops_generic,
525 	/* Direct from ULPD, no parent */
526 	.rate		= 48000000, /* Actually 2 clocks, 12MHz and 48MHz */
527 	.flags		= ENABLE_REG_32BIT,
528 	.enable_reg	= OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
529 	.enable_bit	= USB_HOST_HHC_UHOST_EN,
530 };
531 
532 static struct clk usb_hhc_ck16xx = {
533 	.name		= "usb_hhc_ck",
534 	.ops		= &clkops_generic,
535 	/* Direct from ULPD, no parent */
536 	.rate		= 48000000,
537 	/* OTG_SYSCON_2.OTG_PADEN == 0 (not 1510-compatible) */
538 	.flags		= ENABLE_REG_32BIT,
539 	.enable_reg	= OMAP1_IO_ADDRESS(OTG_BASE + 0x08), /* OTG_SYSCON_2 */
540 	.enable_bit	= OTG_SYSCON_2_UHOST_EN_SHIFT
541 };
542 
543 static struct clk usb_dc_ck = {
544 	.name		= "usb_dc_ck",
545 	.ops		= &clkops_generic,
546 	/* Direct from ULPD, no parent */
547 	.rate		= 48000000,
548 	.enable_reg	= OMAP1_IO_ADDRESS(SOFT_REQ_REG),
549 	.enable_bit	= USB_REQ_EN_SHIFT,
550 };
551 
552 static struct clk usb_dc_ck7xx = {
553 	.name		= "usb_dc_ck",
554 	.ops		= &clkops_generic,
555 	/* Direct from ULPD, no parent */
556 	.rate		= 48000000,
557 	.enable_reg	= OMAP1_IO_ADDRESS(SOFT_REQ_REG),
558 	.enable_bit	= SOFT_USB_OTG_DPLL_REQ_SHIFT,
559 };
560 
561 static struct clk uart1_7xx = {
562 	.name		= "uart1_ck",
563 	.ops		= &clkops_generic,
564 	/* Direct from ULPD, no parent */
565 	.rate		= 12000000,
566 	.enable_reg	= OMAP1_IO_ADDRESS(SOFT_REQ_REG),
567 	.enable_bit	= 9,
568 };
569 
570 static struct clk uart2_7xx = {
571 	.name		= "uart2_ck",
572 	.ops		= &clkops_generic,
573 	/* Direct from ULPD, no parent */
574 	.rate		= 12000000,
575 	.enable_reg	= OMAP1_IO_ADDRESS(SOFT_REQ_REG),
576 	.enable_bit	= 11,
577 };
578 
579 static struct clk mclk_1510 = {
580 	.name		= "mclk",
581 	.ops		= &clkops_generic,
582 	/* Direct from ULPD, no parent. May be enabled by ext hardware. */
583 	.rate		= 12000000,
584 	.enable_reg	= OMAP1_IO_ADDRESS(SOFT_REQ_REG),
585 	.enable_bit	= SOFT_COM_MCKO_REQ_SHIFT,
586 };
587 
588 static struct clk mclk_16xx = {
589 	.name		= "mclk",
590 	.ops		= &clkops_generic,
591 	/* Direct from ULPD, no parent. May be enabled by ext hardware. */
592 	.enable_reg	= OMAP1_IO_ADDRESS(COM_CLK_DIV_CTRL_SEL),
593 	.enable_bit	= COM_ULPD_PLL_CLK_REQ,
594 	.set_rate	= &omap1_set_ext_clk_rate,
595 	.round_rate	= &omap1_round_ext_clk_rate,
596 	.init		= &omap1_init_ext_clk,
597 };
598 
599 static struct clk bclk_1510 = {
600 	.name		= "bclk",
601 	.ops		= &clkops_generic,
602 	/* Direct from ULPD, no parent. May be enabled by ext hardware. */
603 	.rate		= 12000000,
604 };
605 
606 static struct clk bclk_16xx = {
607 	.name		= "bclk",
608 	.ops		= &clkops_generic,
609 	/* Direct from ULPD, no parent. May be enabled by ext hardware. */
610 	.enable_reg	= OMAP1_IO_ADDRESS(SWD_CLK_DIV_CTRL_SEL),
611 	.enable_bit	= SWD_ULPD_PLL_CLK_REQ,
612 	.set_rate	= &omap1_set_ext_clk_rate,
613 	.round_rate	= &omap1_round_ext_clk_rate,
614 	.init		= &omap1_init_ext_clk,
615 };
616 
617 static struct clk mmc1_ck = {
618 	.name		= "mmc1_ck",
619 	.ops		= &clkops_generic,
620 	/* Functional clock is direct from ULPD, interface clock is ARMPER */
621 	.parent		= &armper_ck.clk,
622 	.rate		= 48000000,
623 	.flags		= ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
624 	.enable_reg	= OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
625 	.enable_bit	= CONF_MOD_MMC_SD_CLK_REQ_R,
626 };
627 
628 /*
629  * XXX MOD_CONF_CTRL_0 bit 20 is defined in the 1510 TRM as
630  * CONF_MOD_MCBSP3_AUXON ??
631  */
632 static struct clk mmc2_ck = {
633 	.name		= "mmc2_ck",
634 	.ops		= &clkops_generic,
635 	/* Functional clock is direct from ULPD, interface clock is ARMPER */
636 	.parent		= &armper_ck.clk,
637 	.rate		= 48000000,
638 	.flags		= ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
639 	.enable_reg	= OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
640 	.enable_bit	= 20,
641 };
642 
643 static struct clk mmc3_ck = {
644 	.name		= "mmc3_ck",
645 	.ops		= &clkops_generic,
646 	/* Functional clock is direct from ULPD, interface clock is ARMPER */
647 	.parent		= &armper_ck.clk,
648 	.rate		= 48000000,
649 	.flags		= ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
650 	.enable_reg	= OMAP1_IO_ADDRESS(SOFT_REQ_REG),
651 	.enable_bit	= SOFT_MMC_DPLL_REQ_SHIFT,
652 };
653 
654 static struct clk virtual_ck_mpu = {
655 	.name		= "mpu",
656 	.ops		= &clkops_null,
657 	.parent		= &arm_ck, /* Is smarter alias for */
658 	.recalc		= &followparent_recalc,
659 	.set_rate	= &omap1_select_table_rate,
660 	.round_rate	= &omap1_round_to_table_rate,
661 };
662 
663 /* virtual functional clock domain for I2C. Just for making sure that ARMXOR_CK
664 remains active during MPU idle whenever this is enabled */
665 static struct clk i2c_fck = {
666 	.name		= "i2c_fck",
667 	.ops		= &clkops_null,
668 	.flags		= CLOCK_NO_IDLE_PARENT,
669 	.parent		= &armxor_ck.clk,
670 	.recalc		= &followparent_recalc,
671 };
672 
673 static struct clk i2c_ick = {
674 	.name		= "i2c_ick",
675 	.ops		= &clkops_null,
676 	.flags		= CLOCK_NO_IDLE_PARENT,
677 	.parent		= &armper_ck.clk,
678 	.recalc		= &followparent_recalc,
679 };
680 
681 /*
682  * clkdev integration
683  */
684 
685 static struct omap_clk omap_clks[] = {
686 	/* non-ULPD clocks */
687 	CLK(NULL,	"ck_ref",	&ck_ref,	CK_16XX | CK_1510 | CK_310 | CK_7XX),
688 	CLK(NULL,	"ck_dpll1",	&ck_dpll1,	CK_16XX | CK_1510 | CK_310 | CK_7XX),
689 	/* CK_GEN1 clocks */
690 	CLK(NULL,	"ck_dpll1out",	&ck_dpll1out.clk, CK_16XX),
691 	CLK(NULL,	"ck_sossi",	&sossi_ck,	CK_16XX),
692 	CLK(NULL,	"arm_ck",	&arm_ck,	CK_16XX | CK_1510 | CK_310),
693 	CLK(NULL,	"armper_ck",	&armper_ck.clk,	CK_16XX | CK_1510 | CK_310),
694 	CLK("omap_gpio.0", "ick",	&arm_gpio_ck,	CK_1510 | CK_310),
695 	CLK(NULL,	"armxor_ck",	&armxor_ck.clk,	CK_16XX | CK_1510 | CK_310 | CK_7XX),
696 	CLK(NULL,	"armtim_ck",	&armtim_ck.clk,	CK_16XX | CK_1510 | CK_310),
697 	CLK("omap_wdt",	"fck",		&armwdt_ck.clk,	CK_16XX | CK_1510 | CK_310),
698 	CLK("omap_wdt",	"ick",		&armper_ck.clk,	CK_16XX),
699 	CLK("omap_wdt", "ick",		&dummy_ck,	CK_1510 | CK_310),
700 	CLK(NULL,	"arminth_ck",	&arminth_ck1510, CK_1510 | CK_310),
701 	CLK(NULL,	"arminth_ck",	&arminth_ck16xx, CK_16XX),
702 	/* CK_GEN2 clocks */
703 	CLK(NULL,	"dsp_ck",	&dsp_ck,	CK_16XX | CK_1510 | CK_310),
704 	CLK(NULL,	"dspmmu_ck",	&dspmmu_ck,	CK_16XX | CK_1510 | CK_310),
705 	CLK(NULL,	"dspper_ck",	&dspper_ck,	CK_16XX | CK_1510 | CK_310),
706 	CLK(NULL,	"dspxor_ck",	&dspxor_ck,	CK_16XX | CK_1510 | CK_310),
707 	CLK(NULL,	"dsptim_ck",	&dsptim_ck,	CK_16XX | CK_1510 | CK_310),
708 	/* CK_GEN3 clocks */
709 	CLK(NULL,	"tc_ck",	&tc_ck.clk,	CK_16XX | CK_1510 | CK_310 | CK_7XX),
710 	CLK(NULL,	"tipb_ck",	&tipb_ck,	CK_1510 | CK_310),
711 	CLK(NULL,	"l3_ocpi_ck",	&l3_ocpi_ck,	CK_16XX | CK_7XX),
712 	CLK(NULL,	"tc1_ck",	&tc1_ck,	CK_16XX),
713 	CLK(NULL,	"tc2_ck",	&tc2_ck,	CK_16XX),
714 	CLK(NULL,	"dma_ck",	&dma_ck,	CK_16XX | CK_1510 | CK_310),
715 	CLK(NULL,	"dma_lcdfree_ck", &dma_lcdfree_ck, CK_16XX),
716 	CLK(NULL,	"api_ck",	&api_ck.clk,	CK_16XX | CK_1510 | CK_310 | CK_7XX),
717 	CLK(NULL,	"lb_ck",	&lb_ck.clk,	CK_1510 | CK_310),
718 	CLK(NULL,	"rhea1_ck",	&rhea1_ck,	CK_16XX),
719 	CLK(NULL,	"rhea2_ck",	&rhea2_ck,	CK_16XX),
720 	CLK(NULL,	"lcd_ck",	&lcd_ck_16xx,	CK_16XX | CK_7XX),
721 	CLK(NULL,	"lcd_ck",	&lcd_ck_1510.clk, CK_1510 | CK_310),
722 	/* ULPD clocks */
723 	CLK(NULL,	"uart1_ck",	&uart1_1510,	CK_1510 | CK_310),
724 	CLK(NULL,	"uart1_ck",	&uart1_16xx.clk, CK_16XX),
725 	CLK(NULL,	"uart1_ck",	&uart1_7xx,	CK_7XX),
726 	CLK(NULL,	"uart2_ck",	&uart2_ck,	CK_16XX | CK_1510 | CK_310),
727 	CLK(NULL,	"uart2_ck",	&uart2_7xx,	CK_7XX),
728 	CLK(NULL,	"uart3_ck",	&uart3_1510,	CK_1510 | CK_310),
729 	CLK(NULL,	"uart3_ck",	&uart3_16xx.clk, CK_16XX),
730 	CLK(NULL,	"usb_clko",	&usb_clko,	CK_16XX | CK_1510 | CK_310),
731 	CLK(NULL,	"usb_hhc_ck",	&usb_hhc_ck1510, CK_1510 | CK_310),
732 	CLK(NULL,	"usb_hhc_ck",	&usb_hhc_ck16xx, CK_16XX),
733 	CLK(NULL,	"usb_dc_ck",	&usb_dc_ck,	CK_16XX),
734 	CLK(NULL,	"usb_dc_ck",	&usb_dc_ck7xx,	CK_7XX),
735 	CLK(NULL,	"mclk",		&mclk_1510,	CK_1510 | CK_310),
736 	CLK(NULL,	"mclk",		&mclk_16xx,	CK_16XX),
737 	CLK(NULL,	"bclk",		&bclk_1510,	CK_1510 | CK_310),
738 	CLK(NULL,	"bclk",		&bclk_16xx,	CK_16XX),
739 	CLK("mmci-omap.0", "fck",	&mmc1_ck,	CK_16XX | CK_1510 | CK_310),
740 	CLK("mmci-omap.0", "fck",	&mmc3_ck,	CK_7XX),
741 	CLK("mmci-omap.0", "ick",	&armper_ck.clk,	CK_16XX | CK_1510 | CK_310 | CK_7XX),
742 	CLK("mmci-omap.1", "fck",	&mmc2_ck,	CK_16XX),
743 	CLK("mmci-omap.1", "ick",	&armper_ck.clk,	CK_16XX),
744 	/* Virtual clocks */
745 	CLK(NULL,	"mpu",		&virtual_ck_mpu, CK_16XX | CK_1510 | CK_310),
746 	CLK("omap_i2c.1", "fck",	&i2c_fck,	CK_16XX | CK_1510 | CK_310 | CK_7XX),
747 	CLK("omap_i2c.1", "ick",	&i2c_ick,	CK_16XX),
748 	CLK("omap_i2c.1", "ick",	&dummy_ck,	CK_1510 | CK_310 | CK_7XX),
749 	CLK("omap1_spi100k.1", "fck",	&dummy_ck,	CK_7XX),
750 	CLK("omap1_spi100k.1", "ick",	&dummy_ck,	CK_7XX),
751 	CLK("omap1_spi100k.2", "fck",	&dummy_ck,	CK_7XX),
752 	CLK("omap1_spi100k.2", "ick",	&dummy_ck,	CK_7XX),
753 	CLK("omap_uwire", "fck",	&armxor_ck.clk,	CK_16XX | CK_1510 | CK_310),
754 	CLK("omap-mcbsp.1", "ick",	&dspper_ck,	CK_16XX),
755 	CLK("omap-mcbsp.1", "ick",	&dummy_ck,	CK_1510 | CK_310),
756 	CLK("omap-mcbsp.2", "ick",	&armper_ck.clk,	CK_16XX),
757 	CLK("omap-mcbsp.2", "ick",	&dummy_ck,	CK_1510 | CK_310),
758 	CLK("omap-mcbsp.3", "ick",	&dspper_ck,	CK_16XX),
759 	CLK("omap-mcbsp.3", "ick",	&dummy_ck,	CK_1510 | CK_310),
760 	CLK("omap-mcbsp.1", "fck",	&dspxor_ck,	CK_16XX | CK_1510 | CK_310),
761 	CLK("omap-mcbsp.2", "fck",	&armper_ck.clk,	CK_16XX | CK_1510 | CK_310),
762 	CLK("omap-mcbsp.3", "fck",	&dspxor_ck,	CK_16XX | CK_1510 | CK_310),
763 };
764 
765 /*
766  * init
767  */
768 
769 static struct clk_functions omap1_clk_functions = {
770 	.clk_enable		= omap1_clk_enable,
771 	.clk_disable		= omap1_clk_disable,
772 	.clk_round_rate		= omap1_clk_round_rate,
773 	.clk_set_rate		= omap1_clk_set_rate,
774 	.clk_disable_unused	= omap1_clk_disable_unused,
775 };
776 
777 static void __init omap1_show_rates(void)
778 {
779 	pr_notice("Clocking rate (xtal/DPLL1/MPU): "
780 			"%ld.%01ld/%ld.%01ld/%ld.%01ld MHz\n",
781 		ck_ref.rate / 1000000, (ck_ref.rate / 100000) % 10,
782 		ck_dpll1.rate / 1000000, (ck_dpll1.rate / 100000) % 10,
783 		arm_ck.rate / 1000000, (arm_ck.rate / 100000) % 10);
784 }
785 
786 u32 cpu_mask;
787 
788 int __init omap1_clk_init(void)
789 {
790 	struct omap_clk *c;
791 	const struct omap_clock_config *info;
792 	int crystal_type = 0; /* Default 12 MHz */
793 	u32 reg;
794 
795 #ifdef CONFIG_DEBUG_LL
796 	/*
797 	 * Resets some clocks that may be left on from bootloader,
798 	 * but leaves serial clocks on.
799 	 */
800 	omap_writel(0x3 << 29, MOD_CONF_CTRL_0);
801 #endif
802 
803 	/* USB_REQ_EN will be disabled later if necessary (usb_dc_ck) */
804 	reg = omap_readw(SOFT_REQ_REG) & (1 << 4);
805 	omap_writew(reg, SOFT_REQ_REG);
806 	if (!cpu_is_omap15xx())
807 		omap_writew(0, SOFT_REQ_REG2);
808 
809 	clk_init(&omap1_clk_functions);
810 
811 	/* By default all idlect1 clocks are allowed to idle */
812 	arm_idlect1_mask = ~0;
813 
814 	for (c = omap_clks; c < omap_clks + ARRAY_SIZE(omap_clks); c++)
815 		clk_preinit(c->lk.clk);
816 
817 	cpu_mask = 0;
818 	if (cpu_is_omap1710())
819 		cpu_mask |= CK_1710;
820 	if (cpu_is_omap16xx())
821 		cpu_mask |= CK_16XX;
822 	if (cpu_is_omap1510())
823 		cpu_mask |= CK_1510;
824 	if (cpu_is_omap7xx())
825 		cpu_mask |= CK_7XX;
826 	if (cpu_is_omap310())
827 		cpu_mask |= CK_310;
828 
829 	for (c = omap_clks; c < omap_clks + ARRAY_SIZE(omap_clks); c++)
830 		if (c->cpu & cpu_mask) {
831 			clkdev_add(&c->lk);
832 			clk_register(c->lk.clk);
833 		}
834 
835 	/* Pointers to these clocks are needed by code in clock.c */
836 	api_ck_p = clk_get(NULL, "api_ck");
837 	ck_dpll1_p = clk_get(NULL, "ck_dpll1");
838 	ck_ref_p = clk_get(NULL, "ck_ref");
839 
840 	info = omap_get_config(OMAP_TAG_CLOCK, struct omap_clock_config);
841 	if (info != NULL) {
842 		if (!cpu_is_omap15xx())
843 			crystal_type = info->system_clock_type;
844 	}
845 
846 	if (cpu_is_omap7xx())
847 		ck_ref.rate = 13000000;
848 	if (cpu_is_omap16xx() && crystal_type == 2)
849 		ck_ref.rate = 19200000;
850 
851 	pr_info("Clocks: ARM_SYSST: 0x%04x DPLL_CTL: 0x%04x ARM_CKCTL: "
852 		"0x%04x\n", omap_readw(ARM_SYSST), omap_readw(DPLL_CTL),
853 		omap_readw(ARM_CKCTL));
854 
855 	/* We want to be in syncronous scalable mode */
856 	omap_writew(0x1000, ARM_SYSST);
857 
858 
859 	/*
860 	 * Initially use the values set by bootloader. Determine PLL rate and
861 	 * recalculate dependent clocks as if kernel had changed PLL or
862 	 * divisors. See also omap1_clk_late_init() that can reprogram dpll1
863 	 * after the SRAM is initialized.
864 	 */
865 	{
866 		unsigned pll_ctl_val = omap_readw(DPLL_CTL);
867 
868 		ck_dpll1.rate = ck_ref.rate; /* Base xtal rate */
869 		if (pll_ctl_val & 0x10) {
870 			/* PLL enabled, apply multiplier and divisor */
871 			if (pll_ctl_val & 0xf80)
872 				ck_dpll1.rate *= (pll_ctl_val & 0xf80) >> 7;
873 			ck_dpll1.rate /= ((pll_ctl_val & 0x60) >> 5) + 1;
874 		} else {
875 			/* PLL disabled, apply bypass divisor */
876 			switch (pll_ctl_val & 0xc) {
877 			case 0:
878 				break;
879 			case 0x4:
880 				ck_dpll1.rate /= 2;
881 				break;
882 			default:
883 				ck_dpll1.rate /= 4;
884 				break;
885 			}
886 		}
887 	}
888 	propagate_rate(&ck_dpll1);
889 	/* Cache rates for clocks connected to ck_ref (not dpll1) */
890 	propagate_rate(&ck_ref);
891 	omap1_show_rates();
892 	if (machine_is_omap_perseus2() || machine_is_omap_fsample()) {
893 		/* Select slicer output as OMAP input clock */
894 		omap_writew(omap_readw(OMAP7XX_PCC_UPLD_CTRL) & ~0x1,
895 				OMAP7XX_PCC_UPLD_CTRL);
896 	}
897 
898 	/* Amstrad Delta wants BCLK high when inactive */
899 	if (machine_is_ams_delta())
900 		omap_writel(omap_readl(ULPD_CLOCK_CTRL) |
901 				(1 << SDW_MCLK_INV_BIT),
902 				ULPD_CLOCK_CTRL);
903 
904 	/* Turn off DSP and ARM_TIMXO. Make sure ARM_INTHCK is not divided */
905 	/* (on 730, bit 13 must not be cleared) */
906 	if (cpu_is_omap7xx())
907 		omap_writew(omap_readw(ARM_CKCTL) & 0x2fff, ARM_CKCTL);
908 	else
909 		omap_writew(omap_readw(ARM_CKCTL) & 0x0fff, ARM_CKCTL);
910 
911 	/* Put DSP/MPUI into reset until needed */
912 	omap_writew(0, ARM_RSTCT1);
913 	omap_writew(1, ARM_RSTCT2);
914 	omap_writew(0x400, ARM_IDLECT1);
915 
916 	/*
917 	 * According to OMAP5910 Erratum SYS_DMA_1, bit DMACK_REQ (bit 8)
918 	 * of the ARM_IDLECT2 register must be set to zero. The power-on
919 	 * default value of this bit is one.
920 	 */
921 	omap_writew(0x0000, ARM_IDLECT2);	/* Turn LCD clock off also */
922 
923 	/*
924 	 * Only enable those clocks we will need, let the drivers
925 	 * enable other clocks as necessary
926 	 */
927 	clk_enable(&armper_ck.clk);
928 	clk_enable(&armxor_ck.clk);
929 	clk_enable(&armtim_ck.clk); /* This should be done by timer code */
930 
931 	if (cpu_is_omap15xx())
932 		clk_enable(&arm_gpio_ck);
933 
934 	return 0;
935 }
936 
937 #define OMAP1_DPLL1_SANE_VALUE	60000000
938 
939 void __init omap1_clk_late_init(void)
940 {
941 	unsigned long rate = ck_dpll1.rate;
942 
943 	/* Find the highest supported frequency and enable it */
944 	if (omap1_select_table_rate(&virtual_ck_mpu, ~0)) {
945 		pr_err("System frequencies not set, using default. Check your config.\n");
946 		/*
947 		 * Reprogramming the DPLL is tricky, it must be done from SRAM.
948 		 */
949 		omap_sram_reprogram_clock(0x2290, 0x0005);
950 		ck_dpll1.rate = OMAP1_DPLL1_SANE_VALUE;
951 	}
952 	propagate_rate(&ck_dpll1);
953 	omap1_show_rates();
954 	loops_per_jiffy = cpufreq_scale(loops_per_jiffy, rate, ck_dpll1.rate);
955 }
956