omap_hwmod_33xx_data.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. /*
  2. * omap_hwmod_33xx_data.c: Hardware modules present on the AM33XX chips
  3. *
  4. * Copyright (C) {2012} Texas Instruments Incorporated - http://www.ti.com/
  5. *
  6. * This file is automatically generated from the AM33XX hardware databases.
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License as
  9. * published by the Free Software Foundation version 2.
  10. *
  11. * This program is distributed "as is" WITHOUT ANY WARRANTY of any
  12. * kind, whether express or implied; without even the implied warranty
  13. * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. */
  16. #include <linux/i2c-omap.h>
  17. #include "omap_hwmod.h"
  18. #include <linux/platform_data/gpio-omap.h>
  19. #include <linux/platform_data/spi-omap2-mcspi.h>
  20. #include "omap_hwmod_common_data.h"
  21. #include "control.h"
  22. #include "cm33xx.h"
  23. #include "prm33xx.h"
  24. #include "prm-regbits-33xx.h"
  25. #include "i2c.h"
  26. #include "mmc.h"
  27. #include "wd_timer.h"
  28. #include "omap_hwmod_33xx_43xx_common_data.h"
  29. /*
  30. * IP blocks
  31. */
  32. /*
  33. * 'emif' class
  34. * instance(s): emif
  35. */
  36. static struct omap_hwmod_class_sysconfig am33xx_emif_sysc = {
  37. .rev_offs = 0x0000,
  38. };
  39. static struct omap_hwmod_class am33xx_emif_hwmod_class = {
  40. .name = "emif",
  41. .sysc = &am33xx_emif_sysc,
  42. };
  43. /* emif */
  44. static struct omap_hwmod am33xx_emif_hwmod = {
  45. .name = "emif",
  46. .class = &am33xx_emif_hwmod_class,
  47. .clkdm_name = "l3_clkdm",
  48. .flags = HWMOD_INIT_NO_IDLE,
  49. .main_clk = "dpll_ddr_m2_div2_ck",
  50. .prcm = {
  51. .omap4 = {
  52. .clkctrl_offs = AM33XX_CM_PER_EMIF_CLKCTRL_OFFSET,
  53. .modulemode = MODULEMODE_SWCTRL,
  54. },
  55. },
  56. };
  57. /* l4_hs */
  58. static struct omap_hwmod am33xx_l4_hs_hwmod = {
  59. .name = "l4_hs",
  60. .class = &am33xx_l4_hwmod_class,
  61. .clkdm_name = "l4hs_clkdm",
  62. .flags = HWMOD_INIT_NO_IDLE,
  63. .main_clk = "l4hs_gclk",
  64. .prcm = {
  65. .omap4 = {
  66. .clkctrl_offs = AM33XX_CM_PER_L4HS_CLKCTRL_OFFSET,
  67. .modulemode = MODULEMODE_SWCTRL,
  68. },
  69. },
  70. };
  71. static struct omap_hwmod_rst_info am33xx_wkup_m3_resets[] = {
  72. { .name = "wkup_m3", .rst_shift = 3, .st_shift = 5 },
  73. };
  74. /* wkup_m3 */
  75. static struct omap_hwmod am33xx_wkup_m3_hwmod = {
  76. .name = "wkup_m3",
  77. .class = &am33xx_wkup_m3_hwmod_class,
  78. .clkdm_name = "l4_wkup_aon_clkdm",
  79. /* Keep hardreset asserted */
  80. .flags = HWMOD_INIT_NO_RESET | HWMOD_NO_IDLEST,
  81. .main_clk = "dpll_core_m4_div2_ck",
  82. .prcm = {
  83. .omap4 = {
  84. .clkctrl_offs = AM33XX_CM_WKUP_WKUP_M3_CLKCTRL_OFFSET,
  85. .rstctrl_offs = AM33XX_RM_WKUP_RSTCTRL_OFFSET,
  86. .rstst_offs = AM33XX_RM_WKUP_RSTST_OFFSET,
  87. .modulemode = MODULEMODE_SWCTRL,
  88. },
  89. },
  90. .rst_lines = am33xx_wkup_m3_resets,
  91. .rst_lines_cnt = ARRAY_SIZE(am33xx_wkup_m3_resets),
  92. };
  93. /*
  94. * 'adc/tsc' class
  95. * TouchScreen Controller (Anolog-To-Digital Converter)
  96. */
  97. static struct omap_hwmod_class_sysconfig am33xx_adc_tsc_sysc = {
  98. .rev_offs = 0x00,
  99. .sysc_offs = 0x10,
  100. .sysc_flags = SYSC_HAS_SIDLEMODE,
  101. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  102. SIDLE_SMART_WKUP),
  103. .sysc_fields = &omap_hwmod_sysc_type2,
  104. };
  105. static struct omap_hwmod_class am33xx_adc_tsc_hwmod_class = {
  106. .name = "adc_tsc",
  107. .sysc = &am33xx_adc_tsc_sysc,
  108. };
  109. static struct omap_hwmod am33xx_adc_tsc_hwmod = {
  110. .name = "adc_tsc",
  111. .class = &am33xx_adc_tsc_hwmod_class,
  112. .clkdm_name = "l4_wkup_clkdm",
  113. .main_clk = "adc_tsc_fck",
  114. .prcm = {
  115. .omap4 = {
  116. .clkctrl_offs = AM33XX_CM_WKUP_ADC_TSC_CLKCTRL_OFFSET,
  117. .modulemode = MODULEMODE_SWCTRL,
  118. },
  119. },
  120. };
  121. /*
  122. * Modules omap_hwmod structures
  123. *
  124. * The following IPs are excluded for the moment because:
  125. * - They do not need an explicit SW control using omap_hwmod API.
  126. * - They still need to be validated with the driver
  127. * properly adapted to omap_hwmod / omap_device
  128. *
  129. * - cEFUSE (doesn't fall under any ocp_if)
  130. * - clkdiv32k
  131. * - ocp watch point
  132. */
  133. #if 0
  134. /*
  135. * 'cefuse' class
  136. */
  137. static struct omap_hwmod_class am33xx_cefuse_hwmod_class = {
  138. .name = "cefuse",
  139. };
  140. static struct omap_hwmod am33xx_cefuse_hwmod = {
  141. .name = "cefuse",
  142. .class = &am33xx_cefuse_hwmod_class,
  143. .clkdm_name = "l4_cefuse_clkdm",
  144. .main_clk = "cefuse_fck",
  145. .prcm = {
  146. .omap4 = {
  147. .clkctrl_offs = AM33XX_CM_CEFUSE_CEFUSE_CLKCTRL_OFFSET,
  148. .modulemode = MODULEMODE_SWCTRL,
  149. },
  150. },
  151. };
  152. /*
  153. * 'clkdiv32k' class
  154. */
  155. static struct omap_hwmod_class am33xx_clkdiv32k_hwmod_class = {
  156. .name = "clkdiv32k",
  157. };
  158. static struct omap_hwmod am33xx_clkdiv32k_hwmod = {
  159. .name = "clkdiv32k",
  160. .class = &am33xx_clkdiv32k_hwmod_class,
  161. .clkdm_name = "clk_24mhz_clkdm",
  162. .main_clk = "clkdiv32k_ick",
  163. .prcm = {
  164. .omap4 = {
  165. .clkctrl_offs = AM33XX_CM_PER_CLKDIV32K_CLKCTRL_OFFSET,
  166. .modulemode = MODULEMODE_SWCTRL,
  167. },
  168. },
  169. };
  170. /* ocpwp */
  171. static struct omap_hwmod_class am33xx_ocpwp_hwmod_class = {
  172. .name = "ocpwp",
  173. };
  174. static struct omap_hwmod am33xx_ocpwp_hwmod = {
  175. .name = "ocpwp",
  176. .class = &am33xx_ocpwp_hwmod_class,
  177. .clkdm_name = "l4ls_clkdm",
  178. .main_clk = "l4ls_gclk",
  179. .prcm = {
  180. .omap4 = {
  181. .clkctrl_offs = AM33XX_CM_PER_OCPWP_CLKCTRL_OFFSET,
  182. .modulemode = MODULEMODE_SWCTRL,
  183. },
  184. },
  185. };
  186. #endif
  187. /*
  188. * 'debugss' class
  189. * debug sub system
  190. */
  191. static struct omap_hwmod_opt_clk debugss_opt_clks[] = {
  192. { .role = "dbg_sysclk", .clk = "dbg_sysclk_ck" },
  193. { .role = "dbg_clka", .clk = "dbg_clka_ck" },
  194. };
  195. static struct omap_hwmod_class am33xx_debugss_hwmod_class = {
  196. .name = "debugss",
  197. };
  198. static struct omap_hwmod am33xx_debugss_hwmod = {
  199. .name = "debugss",
  200. .class = &am33xx_debugss_hwmod_class,
  201. .clkdm_name = "l3_aon_clkdm",
  202. .main_clk = "trace_clk_div_ck",
  203. .prcm = {
  204. .omap4 = {
  205. .clkctrl_offs = AM33XX_CM_WKUP_DEBUGSS_CLKCTRL_OFFSET,
  206. .modulemode = MODULEMODE_SWCTRL,
  207. },
  208. },
  209. .opt_clks = debugss_opt_clks,
  210. .opt_clks_cnt = ARRAY_SIZE(debugss_opt_clks),
  211. };
  212. static struct omap_hwmod am33xx_control_hwmod = {
  213. .name = "control",
  214. .class = &am33xx_control_hwmod_class,
  215. .clkdm_name = "l4_wkup_clkdm",
  216. .flags = HWMOD_INIT_NO_IDLE,
  217. .main_clk = "dpll_core_m4_div2_ck",
  218. .prcm = {
  219. .omap4 = {
  220. .clkctrl_offs = AM33XX_CM_WKUP_CONTROL_CLKCTRL_OFFSET,
  221. .modulemode = MODULEMODE_SWCTRL,
  222. },
  223. },
  224. };
  225. /* gpio0 */
  226. static struct omap_hwmod_opt_clk gpio0_opt_clks[] = {
  227. { .role = "dbclk", .clk = "gpio0_dbclk" },
  228. };
  229. static struct omap_hwmod am33xx_gpio0_hwmod = {
  230. .name = "gpio1",
  231. .class = &am33xx_gpio_hwmod_class,
  232. .clkdm_name = "l4_wkup_clkdm",
  233. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  234. .main_clk = "dpll_core_m4_div2_ck",
  235. .prcm = {
  236. .omap4 = {
  237. .clkctrl_offs = AM33XX_CM_WKUP_GPIO0_CLKCTRL_OFFSET,
  238. .modulemode = MODULEMODE_SWCTRL,
  239. },
  240. },
  241. .opt_clks = gpio0_opt_clks,
  242. .opt_clks_cnt = ARRAY_SIZE(gpio0_opt_clks),
  243. .dev_attr = &gpio_dev_attr,
  244. };
  245. /* lcdc */
  246. static struct omap_hwmod_class_sysconfig lcdc_sysc = {
  247. .rev_offs = 0x0,
  248. .sysc_offs = 0x54,
  249. .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE),
  250. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  251. .sysc_fields = &omap_hwmod_sysc_type2,
  252. };
  253. static struct omap_hwmod_class am33xx_lcdc_hwmod_class = {
  254. .name = "lcdc",
  255. .sysc = &lcdc_sysc,
  256. };
  257. static struct omap_hwmod am33xx_lcdc_hwmod = {
  258. .name = "lcdc",
  259. .class = &am33xx_lcdc_hwmod_class,
  260. .clkdm_name = "lcdc_clkdm",
  261. .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
  262. .main_clk = "lcd_gclk",
  263. .prcm = {
  264. .omap4 = {
  265. .clkctrl_offs = AM33XX_CM_PER_LCDC_CLKCTRL_OFFSET,
  266. .modulemode = MODULEMODE_SWCTRL,
  267. },
  268. },
  269. };
  270. /*
  271. * 'usb_otg' class
  272. * high-speed on-the-go universal serial bus (usb_otg) controller
  273. */
  274. static struct omap_hwmod_class_sysconfig am33xx_usbhsotg_sysc = {
  275. .rev_offs = 0x0,
  276. .sysc_offs = 0x10,
  277. .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE),
  278. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  279. MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
  280. .sysc_fields = &omap_hwmod_sysc_type2,
  281. };
  282. static struct omap_hwmod_class am33xx_usbotg_class = {
  283. .name = "usbotg",
  284. .sysc = &am33xx_usbhsotg_sysc,
  285. };
  286. static struct omap_hwmod am33xx_usbss_hwmod = {
  287. .name = "usb_otg_hs",
  288. .class = &am33xx_usbotg_class,
  289. .clkdm_name = "l3s_clkdm",
  290. .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
  291. .main_clk = "usbotg_fck",
  292. .prcm = {
  293. .omap4 = {
  294. .clkctrl_offs = AM33XX_CM_PER_USB0_CLKCTRL_OFFSET,
  295. .modulemode = MODULEMODE_SWCTRL,
  296. },
  297. },
  298. };
  299. /*
  300. * Interfaces
  301. */
  302. static struct omap_hwmod_addr_space am33xx_emif_addrs[] = {
  303. {
  304. .pa_start = 0x4c000000,
  305. .pa_end = 0x4c000fff,
  306. .flags = ADDR_TYPE_RT
  307. },
  308. { }
  309. };
  310. /* l3 main -> emif */
  311. static struct omap_hwmod_ocp_if am33xx_l3_main__emif = {
  312. .master = &am33xx_l3_main_hwmod,
  313. .slave = &am33xx_emif_hwmod,
  314. .clk = "dpll_core_m4_ck",
  315. .addr = am33xx_emif_addrs,
  316. .user = OCP_USER_MPU | OCP_USER_SDMA,
  317. };
  318. /* l3 main -> l4 hs */
  319. static struct omap_hwmod_ocp_if am33xx_l3_main__l4_hs = {
  320. .master = &am33xx_l3_main_hwmod,
  321. .slave = &am33xx_l4_hs_hwmod,
  322. .clk = "l3s_gclk",
  323. .user = OCP_USER_MPU | OCP_USER_SDMA,
  324. };
  325. /* wkup m3 -> l4 wkup */
  326. static struct omap_hwmod_ocp_if am33xx_wkup_m3__l4_wkup = {
  327. .master = &am33xx_wkup_m3_hwmod,
  328. .slave = &am33xx_l4_wkup_hwmod,
  329. .clk = "dpll_core_m4_div2_ck",
  330. .user = OCP_USER_MPU | OCP_USER_SDMA,
  331. };
  332. /* l4 wkup -> wkup m3 */
  333. static struct omap_hwmod_ocp_if am33xx_l4_wkup__wkup_m3 = {
  334. .master = &am33xx_l4_wkup_hwmod,
  335. .slave = &am33xx_wkup_m3_hwmod,
  336. .clk = "dpll_core_m4_div2_ck",
  337. .user = OCP_USER_MPU | OCP_USER_SDMA,
  338. };
  339. /* l4 hs -> pru-icss */
  340. static struct omap_hwmod_ocp_if am33xx_l4_hs__pruss = {
  341. .master = &am33xx_l4_hs_hwmod,
  342. .slave = &am33xx_pruss_hwmod,
  343. .clk = "dpll_core_m4_ck",
  344. .user = OCP_USER_MPU | OCP_USER_SDMA,
  345. };
  346. /* l3_main -> debugss */
  347. static struct omap_hwmod_addr_space am33xx_debugss_addrs[] = {
  348. {
  349. .pa_start = 0x4b000000,
  350. .pa_end = 0x4b000000 + SZ_16M - 1,
  351. .flags = ADDR_TYPE_RT
  352. },
  353. { }
  354. };
  355. static struct omap_hwmod_ocp_if am33xx_l3_main__debugss = {
  356. .master = &am33xx_l3_main_hwmod,
  357. .slave = &am33xx_debugss_hwmod,
  358. .clk = "dpll_core_m4_ck",
  359. .addr = am33xx_debugss_addrs,
  360. .user = OCP_USER_MPU,
  361. };
  362. /* l4 wkup -> smartreflex0 */
  363. static struct omap_hwmod_ocp_if am33xx_l4_wkup__smartreflex0 = {
  364. .master = &am33xx_l4_wkup_hwmod,
  365. .slave = &am33xx_smartreflex0_hwmod,
  366. .clk = "dpll_core_m4_div2_ck",
  367. .user = OCP_USER_MPU,
  368. };
  369. /* l4 wkup -> smartreflex1 */
  370. static struct omap_hwmod_ocp_if am33xx_l4_wkup__smartreflex1 = {
  371. .master = &am33xx_l4_wkup_hwmod,
  372. .slave = &am33xx_smartreflex1_hwmod,
  373. .clk = "dpll_core_m4_div2_ck",
  374. .user = OCP_USER_MPU,
  375. };
  376. /* l4 wkup -> control */
  377. static struct omap_hwmod_ocp_if am33xx_l4_wkup__control = {
  378. .master = &am33xx_l4_wkup_hwmod,
  379. .slave = &am33xx_control_hwmod,
  380. .clk = "dpll_core_m4_div2_ck",
  381. .user = OCP_USER_MPU,
  382. };
  383. /* L4 WKUP -> I2C1 */
  384. static struct omap_hwmod_ocp_if am33xx_l4_wkup__i2c1 = {
  385. .master = &am33xx_l4_wkup_hwmod,
  386. .slave = &am33xx_i2c1_hwmod,
  387. .clk = "dpll_core_m4_div2_ck",
  388. .user = OCP_USER_MPU,
  389. };
  390. /* L4 WKUP -> GPIO1 */
  391. static struct omap_hwmod_ocp_if am33xx_l4_wkup__gpio0 = {
  392. .master = &am33xx_l4_wkup_hwmod,
  393. .slave = &am33xx_gpio0_hwmod,
  394. .clk = "dpll_core_m4_div2_ck",
  395. .user = OCP_USER_MPU | OCP_USER_SDMA,
  396. };
  397. /* L4 WKUP -> ADC_TSC */
  398. static struct omap_hwmod_addr_space am33xx_adc_tsc_addrs[] = {
  399. {
  400. .pa_start = 0x44E0D000,
  401. .pa_end = 0x44E0D000 + SZ_8K - 1,
  402. .flags = ADDR_TYPE_RT
  403. },
  404. { }
  405. };
  406. static struct omap_hwmod_ocp_if am33xx_l4_wkup__adc_tsc = {
  407. .master = &am33xx_l4_wkup_hwmod,
  408. .slave = &am33xx_adc_tsc_hwmod,
  409. .clk = "dpll_core_m4_div2_ck",
  410. .addr = am33xx_adc_tsc_addrs,
  411. .user = OCP_USER_MPU,
  412. };
  413. static struct omap_hwmod_ocp_if am33xx_l4_hs__cpgmac0 = {
  414. .master = &am33xx_l4_hs_hwmod,
  415. .slave = &am33xx_cpgmac0_hwmod,
  416. .clk = "cpsw_125mhz_gclk",
  417. .user = OCP_USER_MPU,
  418. };
  419. static struct omap_hwmod_addr_space am33xx_lcdc_addr_space[] = {
  420. {
  421. .pa_start = 0x4830E000,
  422. .pa_end = 0x4830E000 + SZ_8K - 1,
  423. .flags = ADDR_TYPE_RT,
  424. },
  425. { }
  426. };
  427. static struct omap_hwmod_ocp_if am33xx_l3_main__lcdc = {
  428. .master = &am33xx_l3_main_hwmod,
  429. .slave = &am33xx_lcdc_hwmod,
  430. .clk = "dpll_core_m4_ck",
  431. .addr = am33xx_lcdc_addr_space,
  432. .user = OCP_USER_MPU,
  433. };
  434. /* l4 wkup -> timer1 */
  435. static struct omap_hwmod_ocp_if am33xx_l4_wkup__timer1 = {
  436. .master = &am33xx_l4_wkup_hwmod,
  437. .slave = &am33xx_timer1_hwmod,
  438. .clk = "dpll_core_m4_div2_ck",
  439. .user = OCP_USER_MPU,
  440. };
  441. /* l4 wkup -> uart1 */
  442. static struct omap_hwmod_ocp_if am33xx_l4_wkup__uart1 = {
  443. .master = &am33xx_l4_wkup_hwmod,
  444. .slave = &am33xx_uart1_hwmod,
  445. .clk = "dpll_core_m4_div2_ck",
  446. .user = OCP_USER_MPU,
  447. };
  448. /* l4 wkup -> wd_timer1 */
  449. static struct omap_hwmod_ocp_if am33xx_l4_wkup__wd_timer1 = {
  450. .master = &am33xx_l4_wkup_hwmod,
  451. .slave = &am33xx_wd_timer1_hwmod,
  452. .clk = "dpll_core_m4_div2_ck",
  453. .user = OCP_USER_MPU,
  454. };
  455. /* usbss */
  456. /* l3 s -> USBSS interface */
  457. static struct omap_hwmod_ocp_if am33xx_l3_s__usbss = {
  458. .master = &am33xx_l3_s_hwmod,
  459. .slave = &am33xx_usbss_hwmod,
  460. .clk = "l3s_gclk",
  461. .user = OCP_USER_MPU,
  462. .flags = OCPIF_SWSUP_IDLE,
  463. };
  464. /* rng */
  465. static struct omap_hwmod_class_sysconfig am33xx_rng_sysc = {
  466. .rev_offs = 0x1fe0,
  467. .sysc_offs = 0x1fe4,
  468. .sysc_flags = SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE,
  469. .idlemodes = SIDLE_FORCE | SIDLE_NO,
  470. .sysc_fields = &omap_hwmod_sysc_type1,
  471. };
  472. static struct omap_hwmod_class am33xx_rng_hwmod_class = {
  473. .name = "rng",
  474. .sysc = &am33xx_rng_sysc,
  475. };
  476. static struct omap_hwmod am33xx_rng_hwmod = {
  477. .name = "rng",
  478. .class = &am33xx_rng_hwmod_class,
  479. .clkdm_name = "l4ls_clkdm",
  480. .flags = HWMOD_SWSUP_SIDLE,
  481. .main_clk = "rng_fck",
  482. .prcm = {
  483. .omap4 = {
  484. .clkctrl_offs = AM33XX_CM_PER_RNG_CLKCTRL_OFFSET,
  485. .modulemode = MODULEMODE_SWCTRL,
  486. },
  487. },
  488. };
  489. static struct omap_hwmod_ocp_if am33xx_l4_per__rng = {
  490. .master = &am33xx_l4_ls_hwmod,
  491. .slave = &am33xx_rng_hwmod,
  492. .clk = "rng_fck",
  493. .user = OCP_USER_MPU,
  494. };
  495. static struct omap_hwmod_ocp_if *am33xx_hwmod_ocp_ifs[] __initdata = {
  496. &am33xx_l3_main__emif,
  497. &am33xx_mpu__l3_main,
  498. &am33xx_mpu__prcm,
  499. &am33xx_l3_s__l4_ls,
  500. &am33xx_l3_s__l4_wkup,
  501. &am33xx_l3_main__l4_hs,
  502. &am33xx_l3_main__l3_s,
  503. &am33xx_l3_main__l3_instr,
  504. &am33xx_l3_main__gfx,
  505. &am33xx_l3_s__l3_main,
  506. &am33xx_pruss__l3_main,
  507. &am33xx_wkup_m3__l4_wkup,
  508. &am33xx_gfx__l3_main,
  509. &am33xx_l3_main__debugss,
  510. &am33xx_l4_wkup__wkup_m3,
  511. &am33xx_l4_wkup__control,
  512. &am33xx_l4_wkup__smartreflex0,
  513. &am33xx_l4_wkup__smartreflex1,
  514. &am33xx_l4_wkup__uart1,
  515. &am33xx_l4_wkup__timer1,
  516. &am33xx_l4_wkup__rtc,
  517. &am33xx_l4_wkup__i2c1,
  518. &am33xx_l4_wkup__gpio0,
  519. &am33xx_l4_wkup__adc_tsc,
  520. &am33xx_l4_wkup__wd_timer1,
  521. &am33xx_l4_hs__pruss,
  522. &am33xx_l4_per__dcan0,
  523. &am33xx_l4_per__dcan1,
  524. &am33xx_l4_per__gpio1,
  525. &am33xx_l4_per__gpio2,
  526. &am33xx_l4_per__gpio3,
  527. &am33xx_l4_per__i2c2,
  528. &am33xx_l4_per__i2c3,
  529. &am33xx_l4_per__mailbox,
  530. &am33xx_l4_ls__mcasp0,
  531. &am33xx_l4_ls__mcasp1,
  532. &am33xx_l4_ls__mmc0,
  533. &am33xx_l4_ls__mmc1,
  534. &am33xx_l3_s__mmc2,
  535. &am33xx_l4_ls__timer2,
  536. &am33xx_l4_ls__timer3,
  537. &am33xx_l4_ls__timer4,
  538. &am33xx_l4_ls__timer5,
  539. &am33xx_l4_ls__timer6,
  540. &am33xx_l4_ls__timer7,
  541. &am33xx_l3_main__tpcc,
  542. &am33xx_l4_ls__uart2,
  543. &am33xx_l4_ls__uart3,
  544. &am33xx_l4_ls__uart4,
  545. &am33xx_l4_ls__uart5,
  546. &am33xx_l4_ls__uart6,
  547. &am33xx_l4_ls__spinlock,
  548. &am33xx_l4_ls__elm,
  549. &am33xx_l4_ls__epwmss0,
  550. &am33xx_epwmss0__ecap0,
  551. &am33xx_epwmss0__eqep0,
  552. &am33xx_epwmss0__ehrpwm0,
  553. &am33xx_l4_ls__epwmss1,
  554. &am33xx_epwmss1__ecap1,
  555. &am33xx_epwmss1__eqep1,
  556. &am33xx_epwmss1__ehrpwm1,
  557. &am33xx_l4_ls__epwmss2,
  558. &am33xx_epwmss2__ecap2,
  559. &am33xx_epwmss2__eqep2,
  560. &am33xx_epwmss2__ehrpwm2,
  561. &am33xx_l3_s__gpmc,
  562. &am33xx_l3_main__lcdc,
  563. &am33xx_l4_ls__mcspi0,
  564. &am33xx_l4_ls__mcspi1,
  565. &am33xx_l3_main__tptc0,
  566. &am33xx_l3_main__tptc1,
  567. &am33xx_l3_main__tptc2,
  568. &am33xx_l3_main__ocmc,
  569. &am33xx_l3_s__usbss,
  570. &am33xx_l4_hs__cpgmac0,
  571. &am33xx_cpgmac0__mdio,
  572. &am33xx_l3_main__sha0,
  573. &am33xx_l3_main__aes0,
  574. &am33xx_l4_per__rng,
  575. NULL,
  576. };
  577. int __init am33xx_hwmod_init(void)
  578. {
  579. omap_hwmod_am33xx_reg();
  580. omap_hwmod_init();
  581. return omap_hwmod_register_links(am33xx_hwmod_ocp_ifs);
  582. }