omap_hwmod_2420_data.c 39 KB

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