omap_hwmod_2420_data.c 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209
  1. /*
  2. * omap_hwmod_2420_data.c - hardware modules present on the OMAP2420 chips
  3. *
  4. * Copyright (C) 2009-2011 Nokia Corporation
  5. * Copyright (C) 2012 Texas Instruments, Inc.
  6. * Paul Walmsley
  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. * XXX handle crossbar/shared link difference for L3?
  13. * XXX these should be marked initdata for multi-OMAP kernels
  14. */
  15. #include <plat/omap_hwmod.h>
  16. #include <mach/irqs.h>
  17. #include <plat/cpu.h>
  18. #include <plat/dma.h>
  19. #include <plat/serial.h>
  20. #include <plat/i2c.h>
  21. #include <plat/gpio.h>
  22. #include <plat/mcspi.h>
  23. #include <plat/dmtimer.h>
  24. #include <plat/l3_2xxx.h>
  25. #include <plat/l4_2xxx.h>
  26. #include "omap_hwmod_common_data.h"
  27. #include "cm-regbits-24xx.h"
  28. #include "prm-regbits-24xx.h"
  29. #include "wd_timer.h"
  30. /*
  31. * OMAP2420 hardware module integration data
  32. *
  33. * All of the data in this section should be autogeneratable from the
  34. * TI hardware database or other technical documentation. Data that
  35. * is driver-specific or driver-kernel integration-specific belongs
  36. * elsewhere.
  37. */
  38. /*
  39. * IP blocks
  40. */
  41. /* L3 */
  42. static struct omap_hwmod omap2420_l3_main_hwmod = {
  43. .name = "l3_main",
  44. .class = &l3_hwmod_class,
  45. .flags = HWMOD_NO_IDLEST,
  46. };
  47. /* L4 CORE */
  48. static struct omap_hwmod omap2420_l4_core_hwmod = {
  49. .name = "l4_core",
  50. .class = &l4_hwmod_class,
  51. .flags = HWMOD_NO_IDLEST,
  52. };
  53. /* L4 WKUP */
  54. static struct omap_hwmod omap2420_l4_wkup_hwmod = {
  55. .name = "l4_wkup",
  56. .class = &l4_hwmod_class,
  57. .flags = HWMOD_NO_IDLEST,
  58. };
  59. /* MPU */
  60. static struct omap_hwmod omap2420_mpu_hwmod = {
  61. .name = "mpu",
  62. .class = &mpu_hwmod_class,
  63. .main_clk = "mpu_ck",
  64. };
  65. /* IVA2 (IVA2) */
  66. static struct omap_hwmod omap2420_iva_hwmod = {
  67. .name = "iva",
  68. .class = &iva_hwmod_class,
  69. };
  70. /* always-on timers dev attribute */
  71. static struct omap_timer_capability_dev_attr capability_alwon_dev_attr = {
  72. .timer_capability = OMAP_TIMER_ALWON,
  73. };
  74. /* pwm timers dev attribute */
  75. static struct omap_timer_capability_dev_attr capability_pwm_dev_attr = {
  76. .timer_capability = OMAP_TIMER_HAS_PWM,
  77. };
  78. /* timer1 */
  79. static struct omap_hwmod omap2420_timer1_hwmod = {
  80. .name = "timer1",
  81. .mpu_irqs = omap2_timer1_mpu_irqs,
  82. .main_clk = "gpt1_fck",
  83. .prcm = {
  84. .omap2 = {
  85. .prcm_reg_id = 1,
  86. .module_bit = OMAP24XX_EN_GPT1_SHIFT,
  87. .module_offs = WKUP_MOD,
  88. .idlest_reg_id = 1,
  89. .idlest_idle_bit = OMAP24XX_ST_GPT1_SHIFT,
  90. },
  91. },
  92. .dev_attr = &capability_alwon_dev_attr,
  93. .class = &omap2xxx_timer_hwmod_class,
  94. };
  95. /* timer2 */
  96. static struct omap_hwmod omap2420_timer2_hwmod = {
  97. .name = "timer2",
  98. .mpu_irqs = omap2_timer2_mpu_irqs,
  99. .main_clk = "gpt2_fck",
  100. .prcm = {
  101. .omap2 = {
  102. .prcm_reg_id = 1,
  103. .module_bit = OMAP24XX_EN_GPT2_SHIFT,
  104. .module_offs = CORE_MOD,
  105. .idlest_reg_id = 1,
  106. .idlest_idle_bit = OMAP24XX_ST_GPT2_SHIFT,
  107. },
  108. },
  109. .dev_attr = &capability_alwon_dev_attr,
  110. .class = &omap2xxx_timer_hwmod_class,
  111. };
  112. /* timer3 */
  113. static struct omap_hwmod omap2420_timer3_hwmod = {
  114. .name = "timer3",
  115. .mpu_irqs = omap2_timer3_mpu_irqs,
  116. .main_clk = "gpt3_fck",
  117. .prcm = {
  118. .omap2 = {
  119. .prcm_reg_id = 1,
  120. .module_bit = OMAP24XX_EN_GPT3_SHIFT,
  121. .module_offs = CORE_MOD,
  122. .idlest_reg_id = 1,
  123. .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
  124. },
  125. },
  126. .dev_attr = &capability_alwon_dev_attr,
  127. .class = &omap2xxx_timer_hwmod_class,
  128. };
  129. /* timer4 */
  130. static struct omap_hwmod omap2420_timer4_hwmod = {
  131. .name = "timer4",
  132. .mpu_irqs = omap2_timer4_mpu_irqs,
  133. .main_clk = "gpt4_fck",
  134. .prcm = {
  135. .omap2 = {
  136. .prcm_reg_id = 1,
  137. .module_bit = OMAP24XX_EN_GPT4_SHIFT,
  138. .module_offs = CORE_MOD,
  139. .idlest_reg_id = 1,
  140. .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
  141. },
  142. },
  143. .dev_attr = &capability_alwon_dev_attr,
  144. .class = &omap2xxx_timer_hwmod_class,
  145. };
  146. /* timer5 */
  147. static struct omap_hwmod omap2420_timer5_hwmod = {
  148. .name = "timer5",
  149. .mpu_irqs = omap2_timer5_mpu_irqs,
  150. .main_clk = "gpt5_fck",
  151. .prcm = {
  152. .omap2 = {
  153. .prcm_reg_id = 1,
  154. .module_bit = OMAP24XX_EN_GPT5_SHIFT,
  155. .module_offs = CORE_MOD,
  156. .idlest_reg_id = 1,
  157. .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
  158. },
  159. },
  160. .dev_attr = &capability_alwon_dev_attr,
  161. .class = &omap2xxx_timer_hwmod_class,
  162. };
  163. /* timer6 */
  164. static struct omap_hwmod omap2420_timer6_hwmod = {
  165. .name = "timer6",
  166. .mpu_irqs = omap2_timer6_mpu_irqs,
  167. .main_clk = "gpt6_fck",
  168. .prcm = {
  169. .omap2 = {
  170. .prcm_reg_id = 1,
  171. .module_bit = OMAP24XX_EN_GPT6_SHIFT,
  172. .module_offs = CORE_MOD,
  173. .idlest_reg_id = 1,
  174. .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
  175. },
  176. },
  177. .dev_attr = &capability_alwon_dev_attr,
  178. .class = &omap2xxx_timer_hwmod_class,
  179. };
  180. /* timer7 */
  181. static struct omap_hwmod omap2420_timer7_hwmod = {
  182. .name = "timer7",
  183. .mpu_irqs = omap2_timer7_mpu_irqs,
  184. .main_clk = "gpt7_fck",
  185. .prcm = {
  186. .omap2 = {
  187. .prcm_reg_id = 1,
  188. .module_bit = OMAP24XX_EN_GPT7_SHIFT,
  189. .module_offs = CORE_MOD,
  190. .idlest_reg_id = 1,
  191. .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
  192. },
  193. },
  194. .dev_attr = &capability_alwon_dev_attr,
  195. .class = &omap2xxx_timer_hwmod_class,
  196. };
  197. /* timer8 */
  198. static struct omap_hwmod omap2420_timer8_hwmod = {
  199. .name = "timer8",
  200. .mpu_irqs = omap2_timer8_mpu_irqs,
  201. .main_clk = "gpt8_fck",
  202. .prcm = {
  203. .omap2 = {
  204. .prcm_reg_id = 1,
  205. .module_bit = OMAP24XX_EN_GPT8_SHIFT,
  206. .module_offs = CORE_MOD,
  207. .idlest_reg_id = 1,
  208. .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
  209. },
  210. },
  211. .dev_attr = &capability_alwon_dev_attr,
  212. .class = &omap2xxx_timer_hwmod_class,
  213. };
  214. /* timer9 */
  215. static struct omap_hwmod omap2420_timer9_hwmod = {
  216. .name = "timer9",
  217. .mpu_irqs = omap2_timer9_mpu_irqs,
  218. .main_clk = "gpt9_fck",
  219. .prcm = {
  220. .omap2 = {
  221. .prcm_reg_id = 1,
  222. .module_bit = OMAP24XX_EN_GPT9_SHIFT,
  223. .module_offs = CORE_MOD,
  224. .idlest_reg_id = 1,
  225. .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
  226. },
  227. },
  228. .dev_attr = &capability_pwm_dev_attr,
  229. .class = &omap2xxx_timer_hwmod_class,
  230. };
  231. /* timer10 */
  232. static struct omap_hwmod omap2420_timer10_hwmod = {
  233. .name = "timer10",
  234. .mpu_irqs = omap2_timer10_mpu_irqs,
  235. .main_clk = "gpt10_fck",
  236. .prcm = {
  237. .omap2 = {
  238. .prcm_reg_id = 1,
  239. .module_bit = OMAP24XX_EN_GPT10_SHIFT,
  240. .module_offs = CORE_MOD,
  241. .idlest_reg_id = 1,
  242. .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT,
  243. },
  244. },
  245. .dev_attr = &capability_pwm_dev_attr,
  246. .class = &omap2xxx_timer_hwmod_class,
  247. };
  248. /* timer11 */
  249. static struct omap_hwmod omap2420_timer11_hwmod = {
  250. .name = "timer11",
  251. .mpu_irqs = omap2_timer11_mpu_irqs,
  252. .main_clk = "gpt11_fck",
  253. .prcm = {
  254. .omap2 = {
  255. .prcm_reg_id = 1,
  256. .module_bit = OMAP24XX_EN_GPT11_SHIFT,
  257. .module_offs = CORE_MOD,
  258. .idlest_reg_id = 1,
  259. .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT,
  260. },
  261. },
  262. .dev_attr = &capability_pwm_dev_attr,
  263. .class = &omap2xxx_timer_hwmod_class,
  264. };
  265. /* timer12 */
  266. static struct omap_hwmod omap2420_timer12_hwmod = {
  267. .name = "timer12",
  268. .mpu_irqs = omap2xxx_timer12_mpu_irqs,
  269. .main_clk = "gpt12_fck",
  270. .prcm = {
  271. .omap2 = {
  272. .prcm_reg_id = 1,
  273. .module_bit = OMAP24XX_EN_GPT12_SHIFT,
  274. .module_offs = CORE_MOD,
  275. .idlest_reg_id = 1,
  276. .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT,
  277. },
  278. },
  279. .dev_attr = &capability_pwm_dev_attr,
  280. .class = &omap2xxx_timer_hwmod_class,
  281. };
  282. static struct omap_hwmod omap2420_wd_timer2_hwmod = {
  283. .name = "wd_timer2",
  284. .class = &omap2xxx_wd_timer_hwmod_class,
  285. .main_clk = "mpu_wdt_fck",
  286. .prcm = {
  287. .omap2 = {
  288. .prcm_reg_id = 1,
  289. .module_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
  290. .module_offs = WKUP_MOD,
  291. .idlest_reg_id = 1,
  292. .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
  293. },
  294. },
  295. };
  296. /* UART1 */
  297. static struct omap_hwmod omap2420_uart1_hwmod = {
  298. .name = "uart1",
  299. .mpu_irqs = omap2_uart1_mpu_irqs,
  300. .sdma_reqs = omap2_uart1_sdma_reqs,
  301. .main_clk = "uart1_fck",
  302. .prcm = {
  303. .omap2 = {
  304. .module_offs = CORE_MOD,
  305. .prcm_reg_id = 1,
  306. .module_bit = OMAP24XX_EN_UART1_SHIFT,
  307. .idlest_reg_id = 1,
  308. .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
  309. },
  310. },
  311. .class = &omap2_uart_class,
  312. };
  313. /* UART2 */
  314. static struct omap_hwmod omap2420_uart2_hwmod = {
  315. .name = "uart2",
  316. .mpu_irqs = omap2_uart2_mpu_irqs,
  317. .sdma_reqs = omap2_uart2_sdma_reqs,
  318. .main_clk = "uart2_fck",
  319. .prcm = {
  320. .omap2 = {
  321. .module_offs = CORE_MOD,
  322. .prcm_reg_id = 1,
  323. .module_bit = OMAP24XX_EN_UART2_SHIFT,
  324. .idlest_reg_id = 1,
  325. .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
  326. },
  327. },
  328. .class = &omap2_uart_class,
  329. };
  330. /* UART3 */
  331. static struct omap_hwmod omap2420_uart3_hwmod = {
  332. .name = "uart3",
  333. .mpu_irqs = omap2_uart3_mpu_irqs,
  334. .sdma_reqs = omap2_uart3_sdma_reqs,
  335. .main_clk = "uart3_fck",
  336. .prcm = {
  337. .omap2 = {
  338. .module_offs = CORE_MOD,
  339. .prcm_reg_id = 2,
  340. .module_bit = OMAP24XX_EN_UART3_SHIFT,
  341. .idlest_reg_id = 2,
  342. .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
  343. },
  344. },
  345. .class = &omap2_uart_class,
  346. };
  347. /* dss */
  348. static struct omap_hwmod_opt_clk dss_opt_clks[] = {
  349. /*
  350. * The DSS HW needs all DSS clocks enabled during reset. The dss_core
  351. * driver does not use these clocks.
  352. */
  353. { .role = "tv_clk", .clk = "dss_54m_fck" },
  354. { .role = "sys_clk", .clk = "dss2_fck" },
  355. };
  356. static struct omap_hwmod omap2420_dss_core_hwmod = {
  357. .name = "dss_core",
  358. .class = &omap2_dss_hwmod_class,
  359. .main_clk = "dss1_fck", /* instead of dss_fck */
  360. .sdma_reqs = omap2xxx_dss_sdma_chs,
  361. .prcm = {
  362. .omap2 = {
  363. .prcm_reg_id = 1,
  364. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  365. .module_offs = CORE_MOD,
  366. .idlest_reg_id = 1,
  367. .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
  368. },
  369. },
  370. .opt_clks = dss_opt_clks,
  371. .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
  372. .flags = HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  373. };
  374. static struct omap_hwmod omap2420_dss_dispc_hwmod = {
  375. .name = "dss_dispc",
  376. .class = &omap2_dispc_hwmod_class,
  377. .mpu_irqs = omap2_dispc_irqs,
  378. .main_clk = "dss1_fck",
  379. .prcm = {
  380. .omap2 = {
  381. .prcm_reg_id = 1,
  382. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  383. .module_offs = CORE_MOD,
  384. .idlest_reg_id = 1,
  385. .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
  386. },
  387. },
  388. .flags = HWMOD_NO_IDLEST,
  389. .dev_attr = &omap2_3_dss_dispc_dev_attr
  390. };
  391. static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
  392. { .role = "ick", .clk = "dss_ick" },
  393. };
  394. static struct omap_hwmod omap2420_dss_rfbi_hwmod = {
  395. .name = "dss_rfbi",
  396. .class = &omap2_rfbi_hwmod_class,
  397. .main_clk = "dss1_fck",
  398. .prcm = {
  399. .omap2 = {
  400. .prcm_reg_id = 1,
  401. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  402. .module_offs = CORE_MOD,
  403. },
  404. },
  405. .opt_clks = dss_rfbi_opt_clks,
  406. .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
  407. .flags = HWMOD_NO_IDLEST,
  408. };
  409. static struct omap_hwmod omap2420_dss_venc_hwmod = {
  410. .name = "dss_venc",
  411. .class = &omap2_venc_hwmod_class,
  412. .main_clk = "dss_54m_fck",
  413. .prcm = {
  414. .omap2 = {
  415. .prcm_reg_id = 1,
  416. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  417. .module_offs = CORE_MOD,
  418. },
  419. },
  420. .flags = HWMOD_NO_IDLEST,
  421. };
  422. /* I2C common */
  423. static struct omap_hwmod_class_sysconfig i2c_sysc = {
  424. .rev_offs = 0x00,
  425. .sysc_offs = 0x20,
  426. .syss_offs = 0x10,
  427. .sysc_flags = (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
  428. .sysc_fields = &omap_hwmod_sysc_type1,
  429. };
  430. static struct omap_hwmod_class i2c_class = {
  431. .name = "i2c",
  432. .sysc = &i2c_sysc,
  433. .rev = OMAP_I2C_IP_VERSION_1,
  434. .reset = &omap_i2c_reset,
  435. };
  436. static struct omap_i2c_dev_attr i2c_dev_attr = {
  437. .flags = OMAP_I2C_FLAG_NO_FIFO |
  438. OMAP_I2C_FLAG_SIMPLE_CLOCK |
  439. OMAP_I2C_FLAG_16BIT_DATA_REG |
  440. OMAP_I2C_FLAG_BUS_SHIFT_2,
  441. };
  442. /* I2C1 */
  443. static struct omap_hwmod omap2420_i2c1_hwmod = {
  444. .name = "i2c1",
  445. .mpu_irqs = omap2_i2c1_mpu_irqs,
  446. .sdma_reqs = omap2_i2c1_sdma_reqs,
  447. .main_clk = "i2c1_fck",
  448. .prcm = {
  449. .omap2 = {
  450. .module_offs = CORE_MOD,
  451. .prcm_reg_id = 1,
  452. .module_bit = OMAP2420_EN_I2C1_SHIFT,
  453. .idlest_reg_id = 1,
  454. .idlest_idle_bit = OMAP2420_ST_I2C1_SHIFT,
  455. },
  456. },
  457. .class = &i2c_class,
  458. .dev_attr = &i2c_dev_attr,
  459. .flags = HWMOD_16BIT_REG,
  460. };
  461. /* I2C2 */
  462. static struct omap_hwmod omap2420_i2c2_hwmod = {
  463. .name = "i2c2",
  464. .mpu_irqs = omap2_i2c2_mpu_irqs,
  465. .sdma_reqs = omap2_i2c2_sdma_reqs,
  466. .main_clk = "i2c2_fck",
  467. .prcm = {
  468. .omap2 = {
  469. .module_offs = CORE_MOD,
  470. .prcm_reg_id = 1,
  471. .module_bit = OMAP2420_EN_I2C2_SHIFT,
  472. .idlest_reg_id = 1,
  473. .idlest_idle_bit = OMAP2420_ST_I2C2_SHIFT,
  474. },
  475. },
  476. .class = &i2c_class,
  477. .dev_attr = &i2c_dev_attr,
  478. .flags = HWMOD_16BIT_REG,
  479. };
  480. /* gpio dev_attr */
  481. static struct omap_gpio_dev_attr gpio_dev_attr = {
  482. .bank_width = 32,
  483. .dbck_flag = false,
  484. };
  485. /* gpio1 */
  486. static struct omap_hwmod omap2420_gpio1_hwmod = {
  487. .name = "gpio1",
  488. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  489. .mpu_irqs = omap2_gpio1_irqs,
  490. .main_clk = "gpios_fck",
  491. .prcm = {
  492. .omap2 = {
  493. .prcm_reg_id = 1,
  494. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  495. .module_offs = WKUP_MOD,
  496. .idlest_reg_id = 1,
  497. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  498. },
  499. },
  500. .class = &omap2xxx_gpio_hwmod_class,
  501. .dev_attr = &gpio_dev_attr,
  502. };
  503. /* gpio2 */
  504. static struct omap_hwmod omap2420_gpio2_hwmod = {
  505. .name = "gpio2",
  506. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  507. .mpu_irqs = omap2_gpio2_irqs,
  508. .main_clk = "gpios_fck",
  509. .prcm = {
  510. .omap2 = {
  511. .prcm_reg_id = 1,
  512. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  513. .module_offs = WKUP_MOD,
  514. .idlest_reg_id = 1,
  515. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  516. },
  517. },
  518. .class = &omap2xxx_gpio_hwmod_class,
  519. .dev_attr = &gpio_dev_attr,
  520. };
  521. /* gpio3 */
  522. static struct omap_hwmod omap2420_gpio3_hwmod = {
  523. .name = "gpio3",
  524. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  525. .mpu_irqs = omap2_gpio3_irqs,
  526. .main_clk = "gpios_fck",
  527. .prcm = {
  528. .omap2 = {
  529. .prcm_reg_id = 1,
  530. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  531. .module_offs = WKUP_MOD,
  532. .idlest_reg_id = 1,
  533. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  534. },
  535. },
  536. .class = &omap2xxx_gpio_hwmod_class,
  537. .dev_attr = &gpio_dev_attr,
  538. };
  539. /* gpio4 */
  540. static struct omap_hwmod omap2420_gpio4_hwmod = {
  541. .name = "gpio4",
  542. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  543. .mpu_irqs = omap2_gpio4_irqs,
  544. .main_clk = "gpios_fck",
  545. .prcm = {
  546. .omap2 = {
  547. .prcm_reg_id = 1,
  548. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  549. .module_offs = WKUP_MOD,
  550. .idlest_reg_id = 1,
  551. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  552. },
  553. },
  554. .class = &omap2xxx_gpio_hwmod_class,
  555. .dev_attr = &gpio_dev_attr,
  556. };
  557. /* dma attributes */
  558. static struct omap_dma_dev_attr dma_dev_attr = {
  559. .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
  560. IS_CSSA_32 | IS_CDSA_32,
  561. .lch_count = 32,
  562. };
  563. static struct omap_hwmod omap2420_dma_system_hwmod = {
  564. .name = "dma",
  565. .class = &omap2xxx_dma_hwmod_class,
  566. .mpu_irqs = omap2_dma_system_irqs,
  567. .main_clk = "core_l3_ck",
  568. .dev_attr = &dma_dev_attr,
  569. .flags = HWMOD_NO_IDLEST,
  570. };
  571. /* mailbox */
  572. static struct omap_hwmod_irq_info omap2420_mailbox_irqs[] = {
  573. { .name = "dsp", .irq = 26 },
  574. { .name = "iva", .irq = 34 },
  575. { .irq = -1 }
  576. };
  577. static struct omap_hwmod omap2420_mailbox_hwmod = {
  578. .name = "mailbox",
  579. .class = &omap2xxx_mailbox_hwmod_class,
  580. .mpu_irqs = omap2420_mailbox_irqs,
  581. .main_clk = "mailboxes_ick",
  582. .prcm = {
  583. .omap2 = {
  584. .prcm_reg_id = 1,
  585. .module_bit = OMAP24XX_EN_MAILBOXES_SHIFT,
  586. .module_offs = CORE_MOD,
  587. .idlest_reg_id = 1,
  588. .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
  589. },
  590. },
  591. };
  592. /* mcspi1 */
  593. static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
  594. .num_chipselect = 4,
  595. };
  596. static struct omap_hwmod omap2420_mcspi1_hwmod = {
  597. .name = "mcspi1",
  598. .mpu_irqs = omap2_mcspi1_mpu_irqs,
  599. .sdma_reqs = omap2_mcspi1_sdma_reqs,
  600. .main_clk = "mcspi1_fck",
  601. .prcm = {
  602. .omap2 = {
  603. .module_offs = CORE_MOD,
  604. .prcm_reg_id = 1,
  605. .module_bit = OMAP24XX_EN_MCSPI1_SHIFT,
  606. .idlest_reg_id = 1,
  607. .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
  608. },
  609. },
  610. .class = &omap2xxx_mcspi_class,
  611. .dev_attr = &omap_mcspi1_dev_attr,
  612. };
  613. /* mcspi2 */
  614. static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
  615. .num_chipselect = 2,
  616. };
  617. static struct omap_hwmod omap2420_mcspi2_hwmod = {
  618. .name = "mcspi2",
  619. .mpu_irqs = omap2_mcspi2_mpu_irqs,
  620. .sdma_reqs = omap2_mcspi2_sdma_reqs,
  621. .main_clk = "mcspi2_fck",
  622. .prcm = {
  623. .omap2 = {
  624. .module_offs = CORE_MOD,
  625. .prcm_reg_id = 1,
  626. .module_bit = OMAP24XX_EN_MCSPI2_SHIFT,
  627. .idlest_reg_id = 1,
  628. .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
  629. },
  630. },
  631. .class = &omap2xxx_mcspi_class,
  632. .dev_attr = &omap_mcspi2_dev_attr,
  633. };
  634. /*
  635. * 'mcbsp' class
  636. * multi channel buffered serial port controller
  637. */
  638. static struct omap_hwmod_class omap2420_mcbsp_hwmod_class = {
  639. .name = "mcbsp",
  640. };
  641. /* mcbsp1 */
  642. static struct omap_hwmod_irq_info omap2420_mcbsp1_irqs[] = {
  643. { .name = "tx", .irq = 59 },
  644. { .name = "rx", .irq = 60 },
  645. { .irq = -1 }
  646. };
  647. static struct omap_hwmod omap2420_mcbsp1_hwmod = {
  648. .name = "mcbsp1",
  649. .class = &omap2420_mcbsp_hwmod_class,
  650. .mpu_irqs = omap2420_mcbsp1_irqs,
  651. .sdma_reqs = omap2_mcbsp1_sdma_reqs,
  652. .main_clk = "mcbsp1_fck",
  653. .prcm = {
  654. .omap2 = {
  655. .prcm_reg_id = 1,
  656. .module_bit = OMAP24XX_EN_MCBSP1_SHIFT,
  657. .module_offs = CORE_MOD,
  658. .idlest_reg_id = 1,
  659. .idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
  660. },
  661. },
  662. };
  663. /* mcbsp2 */
  664. static struct omap_hwmod_irq_info omap2420_mcbsp2_irqs[] = {
  665. { .name = "tx", .irq = 62 },
  666. { .name = "rx", .irq = 63 },
  667. { .irq = -1 }
  668. };
  669. static struct omap_hwmod omap2420_mcbsp2_hwmod = {
  670. .name = "mcbsp2",
  671. .class = &omap2420_mcbsp_hwmod_class,
  672. .mpu_irqs = omap2420_mcbsp2_irqs,
  673. .sdma_reqs = omap2_mcbsp2_sdma_reqs,
  674. .main_clk = "mcbsp2_fck",
  675. .prcm = {
  676. .omap2 = {
  677. .prcm_reg_id = 1,
  678. .module_bit = OMAP24XX_EN_MCBSP2_SHIFT,
  679. .module_offs = CORE_MOD,
  680. .idlest_reg_id = 1,
  681. .idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
  682. },
  683. },
  684. };
  685. /*
  686. * interfaces
  687. */
  688. /* L3 -> L4_CORE interface */
  689. static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = {
  690. .master = &omap2420_l3_main_hwmod,
  691. .slave = &omap2420_l4_core_hwmod,
  692. .user = OCP_USER_MPU | OCP_USER_SDMA,
  693. };
  694. /* MPU -> L3 interface */
  695. static struct omap_hwmod_ocp_if omap2420_mpu__l3_main = {
  696. .master = &omap2420_mpu_hwmod,
  697. .slave = &omap2420_l3_main_hwmod,
  698. .user = OCP_USER_MPU,
  699. };
  700. /* DSS -> l3 */
  701. static struct omap_hwmod_ocp_if omap2420_dss__l3 = {
  702. .master = &omap2420_dss_core_hwmod,
  703. .slave = &omap2420_l3_main_hwmod,
  704. .fw = {
  705. .omap2 = {
  706. .l3_perm_bit = OMAP2_L3_CORE_FW_CONNID_DSS,
  707. .flags = OMAP_FIREWALL_L3,
  708. }
  709. },
  710. .user = OCP_USER_MPU | OCP_USER_SDMA,
  711. };
  712. /* l4 core -> mcspi1 interface */
  713. static struct omap_hwmod_ocp_if omap2420_l4_core__mcspi1 = {
  714. .master = &omap2420_l4_core_hwmod,
  715. .slave = &omap2420_mcspi1_hwmod,
  716. .clk = "mcspi1_ick",
  717. .addr = omap2_mcspi1_addr_space,
  718. .user = OCP_USER_MPU | OCP_USER_SDMA,
  719. };
  720. /* l4 core -> mcspi2 interface */
  721. static struct omap_hwmod_ocp_if omap2420_l4_core__mcspi2 = {
  722. .master = &omap2420_l4_core_hwmod,
  723. .slave = &omap2420_mcspi2_hwmod,
  724. .clk = "mcspi2_ick",
  725. .addr = omap2_mcspi2_addr_space,
  726. .user = OCP_USER_MPU | OCP_USER_SDMA,
  727. };
  728. /* L4_CORE -> L4_WKUP interface */
  729. static struct omap_hwmod_ocp_if omap2420_l4_core__l4_wkup = {
  730. .master = &omap2420_l4_core_hwmod,
  731. .slave = &omap2420_l4_wkup_hwmod,
  732. .user = OCP_USER_MPU | OCP_USER_SDMA,
  733. };
  734. /* L4 CORE -> UART1 interface */
  735. static struct omap_hwmod_ocp_if omap2_l4_core__uart1 = {
  736. .master = &omap2420_l4_core_hwmod,
  737. .slave = &omap2420_uart1_hwmod,
  738. .clk = "uart1_ick",
  739. .addr = omap2xxx_uart1_addr_space,
  740. .user = OCP_USER_MPU | OCP_USER_SDMA,
  741. };
  742. /* L4 CORE -> UART2 interface */
  743. static struct omap_hwmod_ocp_if omap2_l4_core__uart2 = {
  744. .master = &omap2420_l4_core_hwmod,
  745. .slave = &omap2420_uart2_hwmod,
  746. .clk = "uart2_ick",
  747. .addr = omap2xxx_uart2_addr_space,
  748. .user = OCP_USER_MPU | OCP_USER_SDMA,
  749. };
  750. /* L4 PER -> UART3 interface */
  751. static struct omap_hwmod_ocp_if omap2_l4_core__uart3 = {
  752. .master = &omap2420_l4_core_hwmod,
  753. .slave = &omap2420_uart3_hwmod,
  754. .clk = "uart3_ick",
  755. .addr = omap2xxx_uart3_addr_space,
  756. .user = OCP_USER_MPU | OCP_USER_SDMA,
  757. };
  758. /* L4 CORE -> I2C1 interface */
  759. static struct omap_hwmod_ocp_if omap2420_l4_core__i2c1 = {
  760. .master = &omap2420_l4_core_hwmod,
  761. .slave = &omap2420_i2c1_hwmod,
  762. .clk = "i2c1_ick",
  763. .addr = omap2_i2c1_addr_space,
  764. .user = OCP_USER_MPU | OCP_USER_SDMA,
  765. };
  766. /* L4 CORE -> I2C2 interface */
  767. static struct omap_hwmod_ocp_if omap2420_l4_core__i2c2 = {
  768. .master = &omap2420_l4_core_hwmod,
  769. .slave = &omap2420_i2c2_hwmod,
  770. .clk = "i2c2_ick",
  771. .addr = omap2_i2c2_addr_space,
  772. .user = OCP_USER_MPU | OCP_USER_SDMA,
  773. };
  774. /* IVA <- L3 interface */
  775. static struct omap_hwmod_ocp_if omap2420_l3__iva = {
  776. .master = &omap2420_l3_main_hwmod,
  777. .slave = &omap2420_iva_hwmod,
  778. .clk = "iva1_ifck",
  779. .user = OCP_USER_MPU | OCP_USER_SDMA,
  780. };
  781. static struct omap_hwmod_addr_space omap2420_timer1_addrs[] = {
  782. {
  783. .pa_start = 0x48028000,
  784. .pa_end = 0x48028000 + SZ_1K - 1,
  785. .flags = ADDR_TYPE_RT
  786. },
  787. { }
  788. };
  789. /* l4_wkup -> timer1 */
  790. static struct omap_hwmod_ocp_if omap2420_l4_wkup__timer1 = {
  791. .master = &omap2420_l4_wkup_hwmod,
  792. .slave = &omap2420_timer1_hwmod,
  793. .clk = "gpt1_ick",
  794. .addr = omap2420_timer1_addrs,
  795. .user = OCP_USER_MPU | OCP_USER_SDMA,
  796. };
  797. /* l4_core -> timer2 */
  798. static struct omap_hwmod_ocp_if omap2420_l4_core__timer2 = {
  799. .master = &omap2420_l4_core_hwmod,
  800. .slave = &omap2420_timer2_hwmod,
  801. .clk = "gpt2_ick",
  802. .addr = omap2xxx_timer2_addrs,
  803. .user = OCP_USER_MPU | OCP_USER_SDMA,
  804. };
  805. /* l4_core -> timer3 */
  806. static struct omap_hwmod_ocp_if omap2420_l4_core__timer3 = {
  807. .master = &omap2420_l4_core_hwmod,
  808. .slave = &omap2420_timer3_hwmod,
  809. .clk = "gpt3_ick",
  810. .addr = omap2xxx_timer3_addrs,
  811. .user = OCP_USER_MPU | OCP_USER_SDMA,
  812. };
  813. /* l4_core -> timer4 */
  814. static struct omap_hwmod_ocp_if omap2420_l4_core__timer4 = {
  815. .master = &omap2420_l4_core_hwmod,
  816. .slave = &omap2420_timer4_hwmod,
  817. .clk = "gpt4_ick",
  818. .addr = omap2xxx_timer4_addrs,
  819. .user = OCP_USER_MPU | OCP_USER_SDMA,
  820. };
  821. /* l4_core -> timer5 */
  822. static struct omap_hwmod_ocp_if omap2420_l4_core__timer5 = {
  823. .master = &omap2420_l4_core_hwmod,
  824. .slave = &omap2420_timer5_hwmod,
  825. .clk = "gpt5_ick",
  826. .addr = omap2xxx_timer5_addrs,
  827. .user = OCP_USER_MPU | OCP_USER_SDMA,
  828. };
  829. /* l4_core -> timer6 */
  830. static struct omap_hwmod_ocp_if omap2420_l4_core__timer6 = {
  831. .master = &omap2420_l4_core_hwmod,
  832. .slave = &omap2420_timer6_hwmod,
  833. .clk = "gpt6_ick",
  834. .addr = omap2xxx_timer6_addrs,
  835. .user = OCP_USER_MPU | OCP_USER_SDMA,
  836. };
  837. /* l4_core -> timer7 */
  838. static struct omap_hwmod_ocp_if omap2420_l4_core__timer7 = {
  839. .master = &omap2420_l4_core_hwmod,
  840. .slave = &omap2420_timer7_hwmod,
  841. .clk = "gpt7_ick",
  842. .addr = omap2xxx_timer7_addrs,
  843. .user = OCP_USER_MPU | OCP_USER_SDMA,
  844. };
  845. /* l4_core -> timer8 */
  846. static struct omap_hwmod_ocp_if omap2420_l4_core__timer8 = {
  847. .master = &omap2420_l4_core_hwmod,
  848. .slave = &omap2420_timer8_hwmod,
  849. .clk = "gpt8_ick",
  850. .addr = omap2xxx_timer8_addrs,
  851. .user = OCP_USER_MPU | OCP_USER_SDMA,
  852. };
  853. /* l4_core -> timer9 */
  854. static struct omap_hwmod_ocp_if omap2420_l4_core__timer9 = {
  855. .master = &omap2420_l4_core_hwmod,
  856. .slave = &omap2420_timer9_hwmod,
  857. .clk = "gpt9_ick",
  858. .addr = omap2xxx_timer9_addrs,
  859. .user = OCP_USER_MPU | OCP_USER_SDMA,
  860. };
  861. /* l4_core -> timer10 */
  862. static struct omap_hwmod_ocp_if omap2420_l4_core__timer10 = {
  863. .master = &omap2420_l4_core_hwmod,
  864. .slave = &omap2420_timer10_hwmod,
  865. .clk = "gpt10_ick",
  866. .addr = omap2_timer10_addrs,
  867. .user = OCP_USER_MPU | OCP_USER_SDMA,
  868. };
  869. /* l4_core -> timer11 */
  870. static struct omap_hwmod_ocp_if omap2420_l4_core__timer11 = {
  871. .master = &omap2420_l4_core_hwmod,
  872. .slave = &omap2420_timer11_hwmod,
  873. .clk = "gpt11_ick",
  874. .addr = omap2_timer11_addrs,
  875. .user = OCP_USER_MPU | OCP_USER_SDMA,
  876. };
  877. /* l4_core -> timer12 */
  878. static struct omap_hwmod_ocp_if omap2420_l4_core__timer12 = {
  879. .master = &omap2420_l4_core_hwmod,
  880. .slave = &omap2420_timer12_hwmod,
  881. .clk = "gpt12_ick",
  882. .addr = omap2xxx_timer12_addrs,
  883. .user = OCP_USER_MPU | OCP_USER_SDMA,
  884. };
  885. /* l4_wkup -> wd_timer2 */
  886. static struct omap_hwmod_addr_space omap2420_wd_timer2_addrs[] = {
  887. {
  888. .pa_start = 0x48022000,
  889. .pa_end = 0x4802207f,
  890. .flags = ADDR_TYPE_RT
  891. },
  892. { }
  893. };
  894. static struct omap_hwmod_ocp_if omap2420_l4_wkup__wd_timer2 = {
  895. .master = &omap2420_l4_wkup_hwmod,
  896. .slave = &omap2420_wd_timer2_hwmod,
  897. .clk = "mpu_wdt_ick",
  898. .addr = omap2420_wd_timer2_addrs,
  899. .user = OCP_USER_MPU | OCP_USER_SDMA,
  900. };
  901. /* l4_core -> dss */
  902. static struct omap_hwmod_ocp_if omap2420_l4_core__dss = {
  903. .master = &omap2420_l4_core_hwmod,
  904. .slave = &omap2420_dss_core_hwmod,
  905. .clk = "dss_ick",
  906. .addr = omap2_dss_addrs,
  907. .fw = {
  908. .omap2 = {
  909. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
  910. .flags = OMAP_FIREWALL_L4,
  911. }
  912. },
  913. .user = OCP_USER_MPU | OCP_USER_SDMA,
  914. };
  915. /* l4_core -> dss_dispc */
  916. static struct omap_hwmod_ocp_if omap2420_l4_core__dss_dispc = {
  917. .master = &omap2420_l4_core_hwmod,
  918. .slave = &omap2420_dss_dispc_hwmod,
  919. .clk = "dss_ick",
  920. .addr = omap2_dss_dispc_addrs,
  921. .fw = {
  922. .omap2 = {
  923. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_DISPC_REGION,
  924. .flags = OMAP_FIREWALL_L4,
  925. }
  926. },
  927. .user = OCP_USER_MPU | OCP_USER_SDMA,
  928. };
  929. /* l4_core -> dss_rfbi */
  930. static struct omap_hwmod_ocp_if omap2420_l4_core__dss_rfbi = {
  931. .master = &omap2420_l4_core_hwmod,
  932. .slave = &omap2420_dss_rfbi_hwmod,
  933. .clk = "dss_ick",
  934. .addr = omap2_dss_rfbi_addrs,
  935. .fw = {
  936. .omap2 = {
  937. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
  938. .flags = OMAP_FIREWALL_L4,
  939. }
  940. },
  941. .user = OCP_USER_MPU | OCP_USER_SDMA,
  942. };
  943. /* l4_core -> dss_venc */
  944. static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
  945. .master = &omap2420_l4_core_hwmod,
  946. .slave = &omap2420_dss_venc_hwmod,
  947. .clk = "dss_ick",
  948. .addr = omap2_dss_venc_addrs,
  949. .fw = {
  950. .omap2 = {
  951. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_VENC_REGION,
  952. .flags = OMAP_FIREWALL_L4,
  953. }
  954. },
  955. .flags = OCPIF_SWSUP_IDLE,
  956. .user = OCP_USER_MPU | OCP_USER_SDMA,
  957. };
  958. /* l4_wkup -> gpio1 */
  959. static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
  960. {
  961. .pa_start = 0x48018000,
  962. .pa_end = 0x480181ff,
  963. .flags = ADDR_TYPE_RT
  964. },
  965. { }
  966. };
  967. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
  968. .master = &omap2420_l4_wkup_hwmod,
  969. .slave = &omap2420_gpio1_hwmod,
  970. .clk = "gpios_ick",
  971. .addr = omap2420_gpio1_addr_space,
  972. .user = OCP_USER_MPU | OCP_USER_SDMA,
  973. };
  974. /* l4_wkup -> gpio2 */
  975. static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
  976. {
  977. .pa_start = 0x4801a000,
  978. .pa_end = 0x4801a1ff,
  979. .flags = ADDR_TYPE_RT
  980. },
  981. { }
  982. };
  983. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
  984. .master = &omap2420_l4_wkup_hwmod,
  985. .slave = &omap2420_gpio2_hwmod,
  986. .clk = "gpios_ick",
  987. .addr = omap2420_gpio2_addr_space,
  988. .user = OCP_USER_MPU | OCP_USER_SDMA,
  989. };
  990. /* l4_wkup -> gpio3 */
  991. static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
  992. {
  993. .pa_start = 0x4801c000,
  994. .pa_end = 0x4801c1ff,
  995. .flags = ADDR_TYPE_RT
  996. },
  997. { }
  998. };
  999. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
  1000. .master = &omap2420_l4_wkup_hwmod,
  1001. .slave = &omap2420_gpio3_hwmod,
  1002. .clk = "gpios_ick",
  1003. .addr = omap2420_gpio3_addr_space,
  1004. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1005. };
  1006. /* l4_wkup -> gpio4 */
  1007. static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
  1008. {
  1009. .pa_start = 0x4801e000,
  1010. .pa_end = 0x4801e1ff,
  1011. .flags = ADDR_TYPE_RT
  1012. },
  1013. { }
  1014. };
  1015. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
  1016. .master = &omap2420_l4_wkup_hwmod,
  1017. .slave = &omap2420_gpio4_hwmod,
  1018. .clk = "gpios_ick",
  1019. .addr = omap2420_gpio4_addr_space,
  1020. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1021. };
  1022. /* dma_system -> L3 */
  1023. static struct omap_hwmod_ocp_if omap2420_dma_system__l3 = {
  1024. .master = &omap2420_dma_system_hwmod,
  1025. .slave = &omap2420_l3_main_hwmod,
  1026. .clk = "core_l3_ck",
  1027. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1028. };
  1029. /* l4_core -> dma_system */
  1030. static struct omap_hwmod_ocp_if omap2420_l4_core__dma_system = {
  1031. .master = &omap2420_l4_core_hwmod,
  1032. .slave = &omap2420_dma_system_hwmod,
  1033. .clk = "sdma_ick",
  1034. .addr = omap2_dma_system_addrs,
  1035. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1036. };
  1037. /* l4_core -> mailbox */
  1038. static struct omap_hwmod_ocp_if omap2420_l4_core__mailbox = {
  1039. .master = &omap2420_l4_core_hwmod,
  1040. .slave = &omap2420_mailbox_hwmod,
  1041. .addr = omap2_mailbox_addrs,
  1042. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1043. };
  1044. /* l4_core -> mcbsp1 */
  1045. static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp1 = {
  1046. .master = &omap2420_l4_core_hwmod,
  1047. .slave = &omap2420_mcbsp1_hwmod,
  1048. .clk = "mcbsp1_ick",
  1049. .addr = omap2_mcbsp1_addrs,
  1050. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1051. };
  1052. /* l4_core -> mcbsp2 */
  1053. static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp2 = {
  1054. .master = &omap2420_l4_core_hwmod,
  1055. .slave = &omap2420_mcbsp2_hwmod,
  1056. .clk = "mcbsp2_ick",
  1057. .addr = omap2xxx_mcbsp2_addrs,
  1058. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1059. };
  1060. static struct omap_hwmod_ocp_if *omap2420_hwmod_ocp_ifs[] __initdata = {
  1061. &omap2420_l3_main__l4_core,
  1062. &omap2420_mpu__l3_main,
  1063. &omap2420_dss__l3,
  1064. &omap2420_l4_core__mcspi1,
  1065. &omap2420_l4_core__mcspi2,
  1066. &omap2420_l4_core__l4_wkup,
  1067. &omap2_l4_core__uart1,
  1068. &omap2_l4_core__uart2,
  1069. &omap2_l4_core__uart3,
  1070. &omap2420_l4_core__i2c1,
  1071. &omap2420_l4_core__i2c2,
  1072. &omap2420_l3__iva,
  1073. &omap2420_l4_wkup__timer1,
  1074. &omap2420_l4_core__timer2,
  1075. &omap2420_l4_core__timer3,
  1076. &omap2420_l4_core__timer4,
  1077. &omap2420_l4_core__timer5,
  1078. &omap2420_l4_core__timer6,
  1079. &omap2420_l4_core__timer7,
  1080. &omap2420_l4_core__timer8,
  1081. &omap2420_l4_core__timer9,
  1082. &omap2420_l4_core__timer10,
  1083. &omap2420_l4_core__timer11,
  1084. &omap2420_l4_core__timer12,
  1085. &omap2420_l4_wkup__wd_timer2,
  1086. &omap2420_l4_core__dss,
  1087. &omap2420_l4_core__dss_dispc,
  1088. &omap2420_l4_core__dss_rfbi,
  1089. &omap2420_l4_core__dss_venc,
  1090. &omap2420_l4_wkup__gpio1,
  1091. &omap2420_l4_wkup__gpio2,
  1092. &omap2420_l4_wkup__gpio3,
  1093. &omap2420_l4_wkup__gpio4,
  1094. &omap2420_dma_system__l3,
  1095. &omap2420_l4_core__dma_system,
  1096. &omap2420_l4_core__mailbox,
  1097. &omap2420_l4_core__mcbsp1,
  1098. &omap2420_l4_core__mcbsp2,
  1099. NULL,
  1100. };
  1101. int __init omap2420_hwmod_init(void)
  1102. {
  1103. return omap_hwmod_register_links(omap2420_hwmod_ocp_ifs);
  1104. }