xref: /linux/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c (revision 4e95bc268b915c3a19ec8b9110f61e4ea41a1ed0)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * omap_hwmod_2xxx_ipblock_data.c - common IP block data for OMAP2xxx
4  *
5  * Copyright (C) 2011 Nokia Corporation
6  * Paul Walmsley
7  */
8 
9 #include <linux/types.h>
10 #include <linux/omap-dma.h>
11 
12 #include "omap_hwmod.h"
13 #include "omap_hwmod_common_data.h"
14 #include "cm-regbits-24xx.h"
15 #include "prm-regbits-24xx.h"
16 #include "wd_timer.h"
17 
18 /*
19  * 'dispc' class
20  * display controller
21  */
22 
23 static struct omap_hwmod_class_sysconfig omap2_dispc_sysc = {
24 	.rev_offs	= 0x0000,
25 	.sysc_offs	= 0x0010,
26 	.syss_offs	= 0x0014,
27 	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
28 			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
29 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
30 			   MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
31 	.sysc_fields	= &omap_hwmod_sysc_type1,
32 };
33 
34 struct omap_hwmod_class omap2_dispc_hwmod_class = {
35 	.name	= "dispc",
36 	.sysc	= &omap2_dispc_sysc,
37 };
38 
39 /* OMAP2xxx Timer Common */
40 static struct omap_hwmod_class_sysconfig omap2xxx_timer_sysc = {
41 	.rev_offs	= 0x0000,
42 	.sysc_offs	= 0x0010,
43 	.syss_offs	= 0x0014,
44 	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
45 			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
46 			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
47 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
48 	.sysc_fields	= &omap_hwmod_sysc_type1,
49 };
50 
51 struct omap_hwmod_class omap2xxx_timer_hwmod_class = {
52 	.name	= "timer",
53 	.sysc	= &omap2xxx_timer_sysc,
54 };
55 
56 /*
57  * 'wd_timer' class
58  * 32-bit watchdog upward counter that generates a pulse on the reset pin on
59  * overflow condition
60  */
61 
62 static struct omap_hwmod_class_sysconfig omap2xxx_wd_timer_sysc = {
63 	.rev_offs	= 0x0000,
64 	.sysc_offs	= 0x0010,
65 	.syss_offs	= 0x0014,
66 	.sysc_flags	= (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
67 			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
68 	.sysc_fields	= &omap_hwmod_sysc_type1,
69 };
70 
71 struct omap_hwmod_class omap2xxx_wd_timer_hwmod_class = {
72 	.name		= "wd_timer",
73 	.sysc		= &omap2xxx_wd_timer_sysc,
74 	.pre_shutdown	= &omap2_wd_timer_disable,
75 	.reset		= &omap2_wd_timer_reset,
76 };
77 
78 /*
79  * 'gpio' class
80  * general purpose io module
81  */
82 static struct omap_hwmod_class_sysconfig omap2xxx_gpio_sysc = {
83 	.rev_offs	= 0x0000,
84 	.sysc_offs	= 0x0010,
85 	.syss_offs	= 0x0014,
86 	.sysc_flags	= (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
87 			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
88 			   SYSS_HAS_RESET_STATUS),
89 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
90 	.sysc_fields	= &omap_hwmod_sysc_type1,
91 };
92 
93 struct omap_hwmod_class omap2xxx_gpio_hwmod_class = {
94 	.name = "gpio",
95 	.sysc = &omap2xxx_gpio_sysc,
96 };
97 
98 /* system dma */
99 static struct omap_hwmod_class_sysconfig omap2xxx_dma_sysc = {
100 	.rev_offs	= 0x0000,
101 	.sysc_offs	= 0x002c,
102 	.syss_offs	= 0x0028,
103 	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSC_HAS_MIDLEMODE |
104 			   SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_EMUFREE |
105 			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
106 	.idlemodes	= (MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
107 	.sysc_fields	= &omap_hwmod_sysc_type1,
108 };
109 
110 struct omap_hwmod_class omap2xxx_dma_hwmod_class = {
111 	.name	= "dma",
112 	.sysc	= &omap2xxx_dma_sysc,
113 };
114 
115 /*
116  * 'mailbox' class
117  * mailbox module allowing communication between the on-chip processors
118  * using a queued mailbox-interrupt mechanism.
119  */
120 
121 static struct omap_hwmod_class_sysconfig omap2xxx_mailbox_sysc = {
122 	.rev_offs	= 0x000,
123 	.sysc_offs	= 0x010,
124 	.syss_offs	= 0x014,
125 	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
126 			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
127 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
128 	.sysc_fields	= &omap_hwmod_sysc_type1,
129 };
130 
131 struct omap_hwmod_class omap2xxx_mailbox_hwmod_class = {
132 	.name	= "mailbox",
133 	.sysc	= &omap2xxx_mailbox_sysc,
134 };
135 
136 /*
137  * 'mcspi' class
138  * multichannel serial port interface (mcspi) / master/slave synchronous serial
139  * bus
140  */
141 
142 static struct omap_hwmod_class_sysconfig omap2xxx_mcspi_sysc = {
143 	.rev_offs	= 0x0000,
144 	.sysc_offs	= 0x0010,
145 	.syss_offs	= 0x0014,
146 	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
147 				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
148 				SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
149 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
150 	.sysc_fields	= &omap_hwmod_sysc_type1,
151 };
152 
153 struct omap_hwmod_class omap2xxx_mcspi_class = {
154 	.name	= "mcspi",
155 	.sysc	= &omap2xxx_mcspi_sysc,
156 };
157 
158 /*
159  * 'gpmc' class
160  * general purpose memory controller
161  */
162 
163 static struct omap_hwmod_class_sysconfig omap2xxx_gpmc_sysc = {
164 	.rev_offs	= 0x0000,
165 	.sysc_offs	= 0x0010,
166 	.syss_offs	= 0x0014,
167 	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
168 			   SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
169 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
170 	.sysc_fields	= &omap_hwmod_sysc_type1,
171 };
172 
173 static struct omap_hwmod_class omap2xxx_gpmc_hwmod_class = {
174 	.name	= "gpmc",
175 	.sysc	= &omap2xxx_gpmc_sysc,
176 };
177 
178 /*
179  * IP blocks
180  */
181 
182 /* L3 */
183 struct omap_hwmod omap2xxx_l3_main_hwmod = {
184 	.name		= "l3_main",
185 	.class		= &l3_hwmod_class,
186 	.flags		= HWMOD_NO_IDLEST,
187 };
188 
189 /* L4 CORE */
190 struct omap_hwmod omap2xxx_l4_core_hwmod = {
191 	.name		= "l4_core",
192 	.class		= &l4_hwmod_class,
193 	.flags		= HWMOD_NO_IDLEST,
194 };
195 
196 /* L4 WKUP */
197 struct omap_hwmod omap2xxx_l4_wkup_hwmod = {
198 	.name		= "l4_wkup",
199 	.class		= &l4_hwmod_class,
200 	.flags		= HWMOD_NO_IDLEST,
201 };
202 
203 /* MPU */
204 struct omap_hwmod omap2xxx_mpu_hwmod = {
205 	.name		= "mpu",
206 	.class		= &mpu_hwmod_class,
207 	.main_clk	= "mpu_ck",
208 };
209 
210 /* IVA2 */
211 struct omap_hwmod omap2xxx_iva_hwmod = {
212 	.name		= "iva",
213 	.class		= &iva_hwmod_class,
214 };
215 
216 /* timer1 */
217 struct omap_hwmod omap2xxx_timer1_hwmod = {
218 	.name		= "timer1",
219 	.main_clk	= "gpt1_fck",
220 	.prcm		= {
221 		.omap2 = {
222 			.module_offs = WKUP_MOD,
223 			.idlest_reg_id = 1,
224 			.idlest_idle_bit = OMAP24XX_ST_GPT1_SHIFT,
225 		},
226 	},
227 	.class		= &omap2xxx_timer_hwmod_class,
228 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
229 };
230 
231 /* timer2 */
232 struct omap_hwmod omap2xxx_timer2_hwmod = {
233 	.name		= "timer2",
234 	.main_clk	= "gpt2_fck",
235 	.prcm		= {
236 		.omap2 = {
237 			.module_offs = CORE_MOD,
238 			.idlest_reg_id = 1,
239 			.idlest_idle_bit = OMAP24XX_ST_GPT2_SHIFT,
240 		},
241 	},
242 	.class		= &omap2xxx_timer_hwmod_class,
243 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
244 };
245 
246 /* timer3 */
247 struct omap_hwmod omap2xxx_timer3_hwmod = {
248 	.name		= "timer3",
249 	.main_clk	= "gpt3_fck",
250 	.prcm		= {
251 		.omap2 = {
252 			.module_offs = CORE_MOD,
253 			.idlest_reg_id = 1,
254 			.idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
255 		},
256 	},
257 	.class		= &omap2xxx_timer_hwmod_class,
258 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
259 };
260 
261 /* timer4 */
262 struct omap_hwmod omap2xxx_timer4_hwmod = {
263 	.name		= "timer4",
264 	.main_clk	= "gpt4_fck",
265 	.prcm		= {
266 		.omap2 = {
267 			.module_offs = CORE_MOD,
268 			.idlest_reg_id = 1,
269 			.idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
270 		},
271 	},
272 	.class		= &omap2xxx_timer_hwmod_class,
273 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
274 };
275 
276 /* timer5 */
277 struct omap_hwmod omap2xxx_timer5_hwmod = {
278 	.name		= "timer5",
279 	.main_clk	= "gpt5_fck",
280 	.prcm		= {
281 		.omap2 = {
282 			.module_offs = CORE_MOD,
283 			.idlest_reg_id = 1,
284 			.idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
285 		},
286 	},
287 	.class		= &omap2xxx_timer_hwmod_class,
288 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
289 };
290 
291 /* timer6 */
292 struct omap_hwmod omap2xxx_timer6_hwmod = {
293 	.name		= "timer6",
294 	.main_clk	= "gpt6_fck",
295 	.prcm		= {
296 		.omap2 = {
297 			.module_offs = CORE_MOD,
298 			.idlest_reg_id = 1,
299 			.idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
300 		},
301 	},
302 	.class		= &omap2xxx_timer_hwmod_class,
303 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
304 };
305 
306 /* timer7 */
307 struct omap_hwmod omap2xxx_timer7_hwmod = {
308 	.name		= "timer7",
309 	.main_clk	= "gpt7_fck",
310 	.prcm		= {
311 		.omap2 = {
312 			.module_offs = CORE_MOD,
313 			.idlest_reg_id = 1,
314 			.idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
315 		},
316 	},
317 	.class		= &omap2xxx_timer_hwmod_class,
318 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
319 };
320 
321 /* timer8 */
322 struct omap_hwmod omap2xxx_timer8_hwmod = {
323 	.name		= "timer8",
324 	.main_clk	= "gpt8_fck",
325 	.prcm		= {
326 		.omap2 = {
327 			.module_offs = CORE_MOD,
328 			.idlest_reg_id = 1,
329 			.idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
330 		},
331 	},
332 	.class		= &omap2xxx_timer_hwmod_class,
333 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
334 };
335 
336 /* timer9 */
337 struct omap_hwmod omap2xxx_timer9_hwmod = {
338 	.name		= "timer9",
339 	.main_clk	= "gpt9_fck",
340 	.prcm		= {
341 		.omap2 = {
342 			.module_offs = CORE_MOD,
343 			.idlest_reg_id = 1,
344 			.idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
345 		},
346 	},
347 	.class		= &omap2xxx_timer_hwmod_class,
348 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
349 };
350 
351 /* timer10 */
352 struct omap_hwmod omap2xxx_timer10_hwmod = {
353 	.name		= "timer10",
354 	.main_clk	= "gpt10_fck",
355 	.prcm		= {
356 		.omap2 = {
357 			.module_offs = CORE_MOD,
358 			.idlest_reg_id = 1,
359 			.idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT,
360 		},
361 	},
362 	.class		= &omap2xxx_timer_hwmod_class,
363 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
364 };
365 
366 /* timer11 */
367 struct omap_hwmod omap2xxx_timer11_hwmod = {
368 	.name		= "timer11",
369 	.main_clk	= "gpt11_fck",
370 	.prcm		= {
371 		.omap2 = {
372 			.module_offs = CORE_MOD,
373 			.idlest_reg_id = 1,
374 			.idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT,
375 		},
376 	},
377 	.class		= &omap2xxx_timer_hwmod_class,
378 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
379 };
380 
381 /* timer12 */
382 struct omap_hwmod omap2xxx_timer12_hwmod = {
383 	.name		= "timer12",
384 	.main_clk	= "gpt12_fck",
385 	.prcm		= {
386 		.omap2 = {
387 			.module_offs = CORE_MOD,
388 			.idlest_reg_id = 1,
389 			.idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT,
390 		},
391 	},
392 	.class		= &omap2xxx_timer_hwmod_class,
393 	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,
394 };
395 
396 /* wd_timer2 */
397 struct omap_hwmod omap2xxx_wd_timer2_hwmod = {
398 	.name		= "wd_timer2",
399 	.class		= &omap2xxx_wd_timer_hwmod_class,
400 	.main_clk	= "mpu_wdt_fck",
401 	.prcm		= {
402 		.omap2 = {
403 			.module_offs = WKUP_MOD,
404 			.idlest_reg_id = 1,
405 			.idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
406 		},
407 	},
408 };
409 
410 /* UART1 */
411 
412 struct omap_hwmod omap2xxx_uart1_hwmod = {
413 	.name		= "uart1",
414 	.main_clk	= "uart1_fck",
415 	.flags		= DEBUG_OMAP2UART1_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
416 	.prcm		= {
417 		.omap2 = {
418 			.module_offs = CORE_MOD,
419 			.idlest_reg_id = 1,
420 			.idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
421 		},
422 	},
423 	.class		= &omap2_uart_class,
424 };
425 
426 /* UART2 */
427 
428 struct omap_hwmod omap2xxx_uart2_hwmod = {
429 	.name		= "uart2",
430 	.main_clk	= "uart2_fck",
431 	.flags		= DEBUG_OMAP2UART2_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
432 	.prcm		= {
433 		.omap2 = {
434 			.module_offs = CORE_MOD,
435 			.idlest_reg_id = 1,
436 			.idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
437 		},
438 	},
439 	.class		= &omap2_uart_class,
440 };
441 
442 /* UART3 */
443 
444 struct omap_hwmod omap2xxx_uart3_hwmod = {
445 	.name		= "uart3",
446 	.main_clk	= "uart3_fck",
447 	.flags		= DEBUG_OMAP2UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
448 	.prcm		= {
449 		.omap2 = {
450 			.module_offs = CORE_MOD,
451 			.idlest_reg_id = 2,
452 			.idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
453 		},
454 	},
455 	.class		= &omap2_uart_class,
456 };
457 
458 /* dss */
459 
460 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
461 	/*
462 	 * The DSS HW needs all DSS clocks enabled during reset. The dss_core
463 	 * driver does not use these clocks.
464 	 */
465 	{ .role = "tv_clk", .clk = "dss_54m_fck" },
466 	{ .role = "sys_clk", .clk = "dss2_fck" },
467 };
468 
469 struct omap_hwmod omap2xxx_dss_core_hwmod = {
470 	.name		= "dss_core",
471 	.class		= &omap2_dss_hwmod_class,
472 	.main_clk	= "dss1_fck", /* instead of dss_fck */
473 	.prcm		= {
474 		.omap2 = {
475 			.module_offs = CORE_MOD,
476 			.idlest_reg_id = 1,
477 		},
478 	},
479 	.opt_clks	= dss_opt_clks,
480 	.opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
481 	.flags		= HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET,
482 };
483 
484 struct omap_hwmod omap2xxx_dss_dispc_hwmod = {
485 	.name		= "dss_dispc",
486 	.class		= &omap2_dispc_hwmod_class,
487 	.main_clk	= "dss1_fck",
488 	.prcm		= {
489 		.omap2 = {
490 			.module_offs = CORE_MOD,
491 			.idlest_reg_id = 1,
492 		},
493 	},
494 	.flags		= HWMOD_NO_IDLEST,
495 	.dev_attr	= &omap2_3_dss_dispc_dev_attr,
496 };
497 
498 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
499 	{ .role = "ick", .clk = "dss_ick" },
500 };
501 
502 struct omap_hwmod omap2xxx_dss_rfbi_hwmod = {
503 	.name		= "dss_rfbi",
504 	.class		= &omap2_rfbi_hwmod_class,
505 	.main_clk	= "dss1_fck",
506 	.prcm		= {
507 		.omap2 = {
508 			.module_offs = CORE_MOD,
509 		},
510 	},
511 	.opt_clks	= dss_rfbi_opt_clks,
512 	.opt_clks_cnt	= ARRAY_SIZE(dss_rfbi_opt_clks),
513 	.flags		= HWMOD_NO_IDLEST,
514 };
515 
516 struct omap_hwmod omap2xxx_dss_venc_hwmod = {
517 	.name		= "dss_venc",
518 	.class		= &omap2_venc_hwmod_class,
519 	.main_clk	= "dss_54m_fck",
520 	.prcm		= {
521 		.omap2 = {
522 			.module_offs = CORE_MOD,
523 		},
524 	},
525 	.flags		= HWMOD_NO_IDLEST,
526 };
527 
528 /* gpio1 */
529 struct omap_hwmod omap2xxx_gpio1_hwmod = {
530 	.name		= "gpio1",
531 	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
532 	.main_clk	= "gpios_fck",
533 	.prcm		= {
534 		.omap2 = {
535 			.module_offs = WKUP_MOD,
536 			.idlest_reg_id = 1,
537 			.idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
538 		},
539 	},
540 	.class		= &omap2xxx_gpio_hwmod_class,
541 };
542 
543 /* gpio2 */
544 struct omap_hwmod omap2xxx_gpio2_hwmod = {
545 	.name		= "gpio2",
546 	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
547 	.main_clk	= "gpios_fck",
548 	.prcm		= {
549 		.omap2 = {
550 			.module_offs = WKUP_MOD,
551 			.idlest_reg_id = 1,
552 			.idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
553 		},
554 	},
555 	.class		= &omap2xxx_gpio_hwmod_class,
556 };
557 
558 /* gpio3 */
559 struct omap_hwmod omap2xxx_gpio3_hwmod = {
560 	.name		= "gpio3",
561 	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
562 	.main_clk	= "gpios_fck",
563 	.prcm		= {
564 		.omap2 = {
565 			.module_offs = WKUP_MOD,
566 			.idlest_reg_id = 1,
567 			.idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
568 		},
569 	},
570 	.class		= &omap2xxx_gpio_hwmod_class,
571 };
572 
573 /* gpio4 */
574 struct omap_hwmod omap2xxx_gpio4_hwmod = {
575 	.name		= "gpio4",
576 	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
577 	.main_clk	= "gpios_fck",
578 	.prcm		= {
579 		.omap2 = {
580 			.module_offs = WKUP_MOD,
581 			.idlest_reg_id = 1,
582 			.idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
583 		},
584 	},
585 	.class		= &omap2xxx_gpio_hwmod_class,
586 };
587 
588 /* mcspi1 */
589 struct omap_hwmod omap2xxx_mcspi1_hwmod = {
590 	.name		= "mcspi1",
591 	.main_clk	= "mcspi1_fck",
592 	.prcm		= {
593 		.omap2 = {
594 			.module_offs = CORE_MOD,
595 			.idlest_reg_id = 1,
596 			.idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
597 		},
598 	},
599 	.class		= &omap2xxx_mcspi_class,
600 };
601 
602 /* mcspi2 */
603 struct omap_hwmod omap2xxx_mcspi2_hwmod = {
604 	.name		= "mcspi2",
605 	.main_clk	= "mcspi2_fck",
606 	.prcm		= {
607 		.omap2 = {
608 			.module_offs = CORE_MOD,
609 			.idlest_reg_id = 1,
610 			.idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
611 		},
612 	},
613 	.class		= &omap2xxx_mcspi_class,
614 };
615 
616 static struct omap_hwmod_class omap2xxx_counter_hwmod_class = {
617 	.name	= "counter",
618 };
619 
620 struct omap_hwmod omap2xxx_counter_32k_hwmod = {
621 	.name		= "counter_32k",
622 	.main_clk	= "func_32k_ck",
623 	.prcm		= {
624 		.omap2	= {
625 			.module_offs = WKUP_MOD,
626 			.idlest_reg_id = 1,
627 			.idlest_idle_bit = OMAP24XX_ST_32KSYNC_SHIFT,
628 		},
629 	},
630 	.class		= &omap2xxx_counter_hwmod_class,
631 };
632 
633 /* gpmc */
634 struct omap_hwmod omap2xxx_gpmc_hwmod = {
635 	.name		= "gpmc",
636 	.class		= &omap2xxx_gpmc_hwmod_class,
637 	.main_clk	= "gpmc_fck",
638 	/* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
639 	.flags		= HWMOD_NO_IDLEST | DEBUG_OMAP_GPMC_HWMOD_FLAGS,
640 	.prcm		= {
641 		.omap2	= {
642 			.module_offs = CORE_MOD,
643 		},
644 	},
645 };
646 
647 /* RNG */
648 
649 static struct omap_hwmod_class_sysconfig omap2_rng_sysc = {
650 	.rev_offs	= 0x3c,
651 	.sysc_offs	= 0x40,
652 	.syss_offs	= 0x44,
653 	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
654 			   SYSS_HAS_RESET_STATUS),
655 	.sysc_fields	= &omap_hwmod_sysc_type1,
656 };
657 
658 static struct omap_hwmod_class omap2_rng_hwmod_class = {
659 	.name		= "rng",
660 	.sysc		= &omap2_rng_sysc,
661 };
662 
663 struct omap_hwmod omap2xxx_rng_hwmod = {
664 	.name		= "rng",
665 	.main_clk	= "l4_ck",
666 	.prcm		= {
667 		.omap2 = {
668 			.module_offs = CORE_MOD,
669 			.idlest_reg_id = 4,
670 			.idlest_idle_bit = OMAP24XX_ST_RNG_SHIFT,
671 		},
672 	},
673 	/*
674 	 * XXX The first read from the SYSSTATUS register of the RNG
675 	 * after the SYSCONFIG SOFTRESET bit is set triggers an
676 	 * imprecise external abort.  It's unclear why this happens.
677 	 * Until this is analyzed, skip the IP block reset.
678 	 */
679 	.flags		= HWMOD_INIT_NO_RESET,
680 	.class		= &omap2_rng_hwmod_class,
681 };
682 
683 /* SHAM */
684 
685 static struct omap_hwmod_class_sysconfig omap2_sham_sysc = {
686 	.rev_offs	= 0x5c,
687 	.sysc_offs	= 0x60,
688 	.syss_offs	= 0x64,
689 	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
690 			   SYSS_HAS_RESET_STATUS),
691 	.sysc_fields	= &omap_hwmod_sysc_type1,
692 };
693 
694 static struct omap_hwmod_class omap2xxx_sham_class = {
695 	.name	= "sham",
696 	.sysc	= &omap2_sham_sysc,
697 };
698 
699 struct omap_hwmod omap2xxx_sham_hwmod = {
700 	.name		= "sham",
701 	.main_clk	= "l4_ck",
702 	.prcm		= {
703 		.omap2 = {
704 			.module_offs = CORE_MOD,
705 			.idlest_reg_id = 4,
706 			.idlest_idle_bit = OMAP24XX_ST_SHA_SHIFT,
707 		},
708 	},
709 	.class		= &omap2xxx_sham_class,
710 };
711 
712 /* AES */
713 
714 static struct omap_hwmod_class_sysconfig omap2_aes_sysc = {
715 	.rev_offs	= 0x44,
716 	.sysc_offs	= 0x48,
717 	.syss_offs	= 0x4c,
718 	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
719 			   SYSS_HAS_RESET_STATUS),
720 	.sysc_fields	= &omap_hwmod_sysc_type1,
721 };
722 
723 static struct omap_hwmod_class omap2xxx_aes_class = {
724 	.name	= "aes",
725 	.sysc	= &omap2_aes_sysc,
726 };
727 
728 struct omap_hwmod omap2xxx_aes_hwmod = {
729 	.name		= "aes",
730 	.main_clk	= "l4_ck",
731 	.prcm		= {
732 		.omap2 = {
733 			.module_offs = CORE_MOD,
734 			.idlest_reg_id = 4,
735 			.idlest_idle_bit = OMAP24XX_ST_AES_SHIFT,
736 		},
737 	},
738 	.class		= &omap2xxx_aes_class,
739 };
740