1 // SPDX-License-Identifier: GPL-2.0-only
3 * Hardware modules present on the OMAP54xx chips
5 * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com
10 * This file is automatically generated from the OMAP hardware databases.
11 * We respectfully ask that any modifications to this file be coordinated
12 * with the public linux-omap@vger.kernel.org mailing list and the
13 * authors above to ensure that the autogeneration scripts are kept
14 * up-to-date with the file contents.
18 #include <linux/power/smartreflex.h>
20 #include "omap_hwmod.h"
21 #include "omap_hwmod_common_data.h"
26 /* Base offset for all OMAP5 interrupts external to MPUSS */
27 #define OMAP54XX_IRQ_GIC_START 32
35 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
37 static struct omap_hwmod_class omap54xx_l3_hwmod_class = {
42 static struct omap_hwmod omap54xx_l3_instr_hwmod = {
44 .class = &omap54xx_l3_hwmod_class,
45 .clkdm_name = "l3instr_clkdm",
48 .clkctrl_offs = OMAP54XX_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET,
49 .context_offs = OMAP54XX_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET,
50 .modulemode = MODULEMODE_HWCTRL,
56 static struct omap_hwmod omap54xx_l3_main_1_hwmod = {
58 .class = &omap54xx_l3_hwmod_class,
59 .clkdm_name = "l3main1_clkdm",
62 .clkctrl_offs = OMAP54XX_CM_L3MAIN1_L3_MAIN_1_CLKCTRL_OFFSET,
63 .context_offs = OMAP54XX_RM_L3MAIN1_L3_MAIN_1_CONTEXT_OFFSET,
69 static struct omap_hwmod omap54xx_l3_main_2_hwmod = {
71 .class = &omap54xx_l3_hwmod_class,
72 .clkdm_name = "l3main2_clkdm",
75 .clkctrl_offs = OMAP54XX_CM_L3MAIN2_L3_MAIN_2_CLKCTRL_OFFSET,
76 .context_offs = OMAP54XX_RM_L3MAIN2_L3_MAIN_2_CONTEXT_OFFSET,
82 static struct omap_hwmod omap54xx_l3_main_3_hwmod = {
84 .class = &omap54xx_l3_hwmod_class,
85 .clkdm_name = "l3instr_clkdm",
88 .clkctrl_offs = OMAP54XX_CM_L3INSTR_L3_MAIN_3_CLKCTRL_OFFSET,
89 .context_offs = OMAP54XX_RM_L3INSTR_L3_MAIN_3_CONTEXT_OFFSET,
90 .modulemode = MODULEMODE_HWCTRL,
97 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
99 static struct omap_hwmod_class omap54xx_l4_hwmod_class = {
104 static struct omap_hwmod omap54xx_l4_cfg_hwmod = {
106 .class = &omap54xx_l4_hwmod_class,
107 .clkdm_name = "l4cfg_clkdm",
110 .clkctrl_offs = OMAP54XX_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET,
111 .context_offs = OMAP54XX_RM_L4CFG_L4_CFG_CONTEXT_OFFSET,
117 static struct omap_hwmod omap54xx_l4_per_hwmod = {
119 .class = &omap54xx_l4_hwmod_class,
120 .clkdm_name = "l4per_clkdm",
123 .clkctrl_offs = OMAP54XX_CM_L4PER_L4_PER_CLKCTRL_OFFSET,
124 .context_offs = OMAP54XX_RM_L4PER_L4_PER_CONTEXT_OFFSET,
130 static struct omap_hwmod omap54xx_l4_wkup_hwmod = {
132 .class = &omap54xx_l4_hwmod_class,
133 .clkdm_name = "wkupaon_clkdm",
136 .clkctrl_offs = OMAP54XX_CM_WKUPAON_L4_WKUP_CLKCTRL_OFFSET,
137 .context_offs = OMAP54XX_RM_WKUPAON_L4_WKUP_CONTEXT_OFFSET,
144 * instance(s): mpu_private
146 static struct omap_hwmod_class omap54xx_mpu_bus_hwmod_class = {
151 static struct omap_hwmod omap54xx_mpu_private_hwmod = {
152 .name = "mpu_private",
153 .class = &omap54xx_mpu_bus_hwmod_class,
154 .clkdm_name = "mpu_clkdm",
157 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
164 * external memory interface no1 (wrapper)
167 static struct omap_hwmod_class_sysconfig omap54xx_emif_sysc = {
171 static struct omap_hwmod_class omap54xx_emif_hwmod_class = {
173 .sysc = &omap54xx_emif_sysc,
177 static struct omap_hwmod omap54xx_emif1_hwmod = {
179 .class = &omap54xx_emif_hwmod_class,
180 .clkdm_name = "emif_clkdm",
181 .flags = HWMOD_INIT_NO_IDLE,
182 .main_clk = "dpll_core_h11x2_ck",
185 .clkctrl_offs = OMAP54XX_CM_EMIF_EMIF1_CLKCTRL_OFFSET,
186 .context_offs = OMAP54XX_RM_EMIF_EMIF1_CONTEXT_OFFSET,
187 .modulemode = MODULEMODE_HWCTRL,
193 static struct omap_hwmod omap54xx_emif2_hwmod = {
195 .class = &omap54xx_emif_hwmod_class,
196 .clkdm_name = "emif_clkdm",
197 .flags = HWMOD_INIT_NO_IDLE,
198 .main_clk = "dpll_core_h11x2_ck",
201 .clkctrl_offs = OMAP54XX_CM_EMIF_EMIF2_CLKCTRL_OFFSET,
202 .context_offs = OMAP54XX_RM_EMIF_EMIF2_CONTEXT_OFFSET,
203 .modulemode = MODULEMODE_HWCTRL,
216 static struct omap_hwmod_class omap54xx_mpu_hwmod_class = {
221 static struct omap_hwmod omap54xx_mpu_hwmod = {
223 .class = &omap54xx_mpu_hwmod_class,
224 .clkdm_name = "mpu_clkdm",
225 .flags = HWMOD_INIT_NO_IDLE,
226 .main_clk = "dpll_mpu_m2_ck",
229 .clkctrl_offs = OMAP54XX_CM_MPU_MPU_CLKCTRL_OFFSET,
230 .context_offs = OMAP54XX_RM_MPU_MPU_CONTEXT_OFFSET,
237 * sata: serial ata interface gen2 compliant ( 1 rx/ 1 tx)
240 static struct omap_hwmod_class_sysconfig omap54xx_sata_sysc = {
243 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
244 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
245 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
246 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
247 .sysc_fields = &omap_hwmod_sysc_type2,
250 static struct omap_hwmod_class omap54xx_sata_hwmod_class = {
252 .sysc = &omap54xx_sata_sysc,
256 static struct omap_hwmod omap54xx_sata_hwmod = {
258 .class = &omap54xx_sata_hwmod_class,
259 .clkdm_name = "l3init_clkdm",
260 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
261 .main_clk = "func_48m_fclk",
265 .clkctrl_offs = OMAP54XX_CM_L3INIT_SATA_CLKCTRL_OFFSET,
266 .context_offs = OMAP54XX_RM_L3INIT_SATA_CONTEXT_OFFSET,
267 .modulemode = MODULEMODE_SWCTRL,
273 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__sata = {
274 .master = &omap54xx_l4_cfg_hwmod,
275 .slave = &omap54xx_sata_hwmod,
276 .clk = "l3_iclk_div",
277 .user = OCP_USER_MPU | OCP_USER_SDMA,
284 /* l3_main_3 -> l3_instr */
285 static struct omap_hwmod_ocp_if omap54xx_l3_main_3__l3_instr = {
286 .master = &omap54xx_l3_main_3_hwmod,
287 .slave = &omap54xx_l3_instr_hwmod,
288 .clk = "l3_iclk_div",
289 .user = OCP_USER_MPU | OCP_USER_SDMA,
292 /* l3_main_2 -> l3_main_1 */
293 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_1 = {
294 .master = &omap54xx_l3_main_2_hwmod,
295 .slave = &omap54xx_l3_main_1_hwmod,
296 .clk = "l3_iclk_div",
297 .user = OCP_USER_MPU | OCP_USER_SDMA,
300 /* l4_cfg -> l3_main_1 */
301 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_1 = {
302 .master = &omap54xx_l4_cfg_hwmod,
303 .slave = &omap54xx_l3_main_1_hwmod,
304 .clk = "l3_iclk_div",
305 .user = OCP_USER_MPU | OCP_USER_SDMA,
308 /* mpu -> l3_main_1 */
309 static struct omap_hwmod_ocp_if omap54xx_mpu__l3_main_1 = {
310 .master = &omap54xx_mpu_hwmod,
311 .slave = &omap54xx_l3_main_1_hwmod,
312 .clk = "l3_iclk_div",
313 .user = OCP_USER_MPU,
316 /* l3_main_1 -> l3_main_2 */
317 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_2 = {
318 .master = &omap54xx_l3_main_1_hwmod,
319 .slave = &omap54xx_l3_main_2_hwmod,
320 .clk = "l3_iclk_div",
321 .user = OCP_USER_MPU,
324 /* l4_cfg -> l3_main_2 */
325 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_2 = {
326 .master = &omap54xx_l4_cfg_hwmod,
327 .slave = &omap54xx_l3_main_2_hwmod,
328 .clk = "l3_iclk_div",
329 .user = OCP_USER_MPU | OCP_USER_SDMA,
332 /* l3_main_1 -> l3_main_3 */
333 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_3 = {
334 .master = &omap54xx_l3_main_1_hwmod,
335 .slave = &omap54xx_l3_main_3_hwmod,
336 .clk = "l3_iclk_div",
337 .user = OCP_USER_MPU,
340 /* l3_main_2 -> l3_main_3 */
341 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_3 = {
342 .master = &omap54xx_l3_main_2_hwmod,
343 .slave = &omap54xx_l3_main_3_hwmod,
344 .clk = "l3_iclk_div",
345 .user = OCP_USER_MPU | OCP_USER_SDMA,
348 /* l4_cfg -> l3_main_3 */
349 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_3 = {
350 .master = &omap54xx_l4_cfg_hwmod,
351 .slave = &omap54xx_l3_main_3_hwmod,
352 .clk = "l3_iclk_div",
353 .user = OCP_USER_MPU | OCP_USER_SDMA,
356 /* l3_main_1 -> l4_cfg */
357 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_cfg = {
358 .master = &omap54xx_l3_main_1_hwmod,
359 .slave = &omap54xx_l4_cfg_hwmod,
360 .clk = "l4_root_clk_div",
361 .user = OCP_USER_MPU | OCP_USER_SDMA,
364 /* l3_main_2 -> l4_per */
365 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l4_per = {
366 .master = &omap54xx_l3_main_2_hwmod,
367 .slave = &omap54xx_l4_per_hwmod,
368 .clk = "l4_root_clk_div",
369 .user = OCP_USER_MPU | OCP_USER_SDMA,
372 /* l3_main_1 -> l4_wkup */
373 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_wkup = {
374 .master = &omap54xx_l3_main_1_hwmod,
375 .slave = &omap54xx_l4_wkup_hwmod,
376 .clk = "wkupaon_iclk_mux",
377 .user = OCP_USER_MPU | OCP_USER_SDMA,
380 /* mpu -> mpu_private */
381 static struct omap_hwmod_ocp_if omap54xx_mpu__mpu_private = {
382 .master = &omap54xx_mpu_hwmod,
383 .slave = &omap54xx_mpu_private_hwmod,
384 .clk = "l3_iclk_div",
385 .user = OCP_USER_MPU | OCP_USER_SDMA,
389 static struct omap_hwmod_ocp_if omap54xx_mpu__emif1 = {
390 .master = &omap54xx_mpu_hwmod,
391 .slave = &omap54xx_emif1_hwmod,
392 .clk = "dpll_core_h11x2_ck",
393 .user = OCP_USER_MPU | OCP_USER_SDMA,
397 static struct omap_hwmod_ocp_if omap54xx_mpu__emif2 = {
398 .master = &omap54xx_mpu_hwmod,
399 .slave = &omap54xx_emif2_hwmod,
400 .clk = "dpll_core_h11x2_ck",
401 .user = OCP_USER_MPU | OCP_USER_SDMA,
405 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mpu = {
406 .master = &omap54xx_l4_cfg_hwmod,
407 .slave = &omap54xx_mpu_hwmod,
408 .clk = "l4_root_clk_div",
409 .user = OCP_USER_MPU | OCP_USER_SDMA,
412 static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {
413 &omap54xx_l3_main_3__l3_instr,
414 &omap54xx_l3_main_2__l3_main_1,
415 &omap54xx_l4_cfg__l3_main_1,
416 &omap54xx_mpu__l3_main_1,
417 &omap54xx_l3_main_1__l3_main_2,
418 &omap54xx_l4_cfg__l3_main_2,
419 &omap54xx_l3_main_1__l3_main_3,
420 &omap54xx_l3_main_2__l3_main_3,
421 &omap54xx_l4_cfg__l3_main_3,
422 &omap54xx_l3_main_1__l4_cfg,
423 &omap54xx_l3_main_2__l4_per,
424 &omap54xx_l3_main_1__l4_wkup,
425 &omap54xx_mpu__mpu_private,
426 &omap54xx_mpu__emif1,
427 &omap54xx_mpu__emif2,
428 &omap54xx_l4_cfg__mpu,
429 &omap54xx_l4_cfg__sata,
433 int __init omap54xx_hwmod_init(void)
436 return omap_hwmod_register_links(omap54xx_hwmod_ocp_ifs);