omap_hwmod_2420_data.c 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541
  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. /* timer1 */
  240. static struct omap_hwmod omap2420_timer1_hwmod;
  241. static struct omap_hwmod_addr_space omap2420_timer1_addrs[] = {
  242. {
  243. .pa_start = 0x48028000,
  244. .pa_end = 0x48028000 + SZ_1K - 1,
  245. .flags = ADDR_TYPE_RT
  246. },
  247. { }
  248. };
  249. /* l4_wkup -> timer1 */
  250. static struct omap_hwmod_ocp_if omap2420_l4_wkup__timer1 = {
  251. .master = &omap2420_l4_wkup_hwmod,
  252. .slave = &omap2420_timer1_hwmod,
  253. .clk = "gpt1_ick",
  254. .addr = omap2420_timer1_addrs,
  255. .user = OCP_USER_MPU | OCP_USER_SDMA,
  256. };
  257. /* timer1 slave port */
  258. static struct omap_hwmod_ocp_if *omap2420_timer1_slaves[] = {
  259. &omap2420_l4_wkup__timer1,
  260. };
  261. /* timer1 hwmod */
  262. static struct omap_hwmod omap2420_timer1_hwmod = {
  263. .name = "timer1",
  264. .mpu_irqs = omap2_timer1_mpu_irqs,
  265. .main_clk = "gpt1_fck",
  266. .prcm = {
  267. .omap2 = {
  268. .prcm_reg_id = 1,
  269. .module_bit = OMAP24XX_EN_GPT1_SHIFT,
  270. .module_offs = WKUP_MOD,
  271. .idlest_reg_id = 1,
  272. .idlest_idle_bit = OMAP24XX_ST_GPT1_SHIFT,
  273. },
  274. },
  275. .slaves = omap2420_timer1_slaves,
  276. .slaves_cnt = ARRAY_SIZE(omap2420_timer1_slaves),
  277. .class = &omap2xxx_timer_hwmod_class,
  278. };
  279. /* timer2 */
  280. static struct omap_hwmod omap2420_timer2_hwmod;
  281. /* l4_core -> timer2 */
  282. static struct omap_hwmod_ocp_if omap2420_l4_core__timer2 = {
  283. .master = &omap2420_l4_core_hwmod,
  284. .slave = &omap2420_timer2_hwmod,
  285. .clk = "gpt2_ick",
  286. .addr = omap2xxx_timer2_addrs,
  287. .user = OCP_USER_MPU | OCP_USER_SDMA,
  288. };
  289. /* timer2 slave port */
  290. static struct omap_hwmod_ocp_if *omap2420_timer2_slaves[] = {
  291. &omap2420_l4_core__timer2,
  292. };
  293. /* timer2 hwmod */
  294. static struct omap_hwmod omap2420_timer2_hwmod = {
  295. .name = "timer2",
  296. .mpu_irqs = omap2_timer2_mpu_irqs,
  297. .main_clk = "gpt2_fck",
  298. .prcm = {
  299. .omap2 = {
  300. .prcm_reg_id = 1,
  301. .module_bit = OMAP24XX_EN_GPT2_SHIFT,
  302. .module_offs = CORE_MOD,
  303. .idlest_reg_id = 1,
  304. .idlest_idle_bit = OMAP24XX_ST_GPT2_SHIFT,
  305. },
  306. },
  307. .slaves = omap2420_timer2_slaves,
  308. .slaves_cnt = ARRAY_SIZE(omap2420_timer2_slaves),
  309. .class = &omap2xxx_timer_hwmod_class,
  310. };
  311. /* timer3 */
  312. static struct omap_hwmod omap2420_timer3_hwmod;
  313. /* l4_core -> timer3 */
  314. static struct omap_hwmod_ocp_if omap2420_l4_core__timer3 = {
  315. .master = &omap2420_l4_core_hwmod,
  316. .slave = &omap2420_timer3_hwmod,
  317. .clk = "gpt3_ick",
  318. .addr = omap2xxx_timer3_addrs,
  319. .user = OCP_USER_MPU | OCP_USER_SDMA,
  320. };
  321. /* timer3 slave port */
  322. static struct omap_hwmod_ocp_if *omap2420_timer3_slaves[] = {
  323. &omap2420_l4_core__timer3,
  324. };
  325. /* timer3 hwmod */
  326. static struct omap_hwmod omap2420_timer3_hwmod = {
  327. .name = "timer3",
  328. .mpu_irqs = omap2_timer3_mpu_irqs,
  329. .main_clk = "gpt3_fck",
  330. .prcm = {
  331. .omap2 = {
  332. .prcm_reg_id = 1,
  333. .module_bit = OMAP24XX_EN_GPT3_SHIFT,
  334. .module_offs = CORE_MOD,
  335. .idlest_reg_id = 1,
  336. .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
  337. },
  338. },
  339. .slaves = omap2420_timer3_slaves,
  340. .slaves_cnt = ARRAY_SIZE(omap2420_timer3_slaves),
  341. .class = &omap2xxx_timer_hwmod_class,
  342. };
  343. /* timer4 */
  344. static struct omap_hwmod omap2420_timer4_hwmod;
  345. /* l4_core -> timer4 */
  346. static struct omap_hwmod_ocp_if omap2420_l4_core__timer4 = {
  347. .master = &omap2420_l4_core_hwmod,
  348. .slave = &omap2420_timer4_hwmod,
  349. .clk = "gpt4_ick",
  350. .addr = omap2xxx_timer4_addrs,
  351. .user = OCP_USER_MPU | OCP_USER_SDMA,
  352. };
  353. /* timer4 slave port */
  354. static struct omap_hwmod_ocp_if *omap2420_timer4_slaves[] = {
  355. &omap2420_l4_core__timer4,
  356. };
  357. /* timer4 hwmod */
  358. static struct omap_hwmod omap2420_timer4_hwmod = {
  359. .name = "timer4",
  360. .mpu_irqs = omap2_timer4_mpu_irqs,
  361. .main_clk = "gpt4_fck",
  362. .prcm = {
  363. .omap2 = {
  364. .prcm_reg_id = 1,
  365. .module_bit = OMAP24XX_EN_GPT4_SHIFT,
  366. .module_offs = CORE_MOD,
  367. .idlest_reg_id = 1,
  368. .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
  369. },
  370. },
  371. .slaves = omap2420_timer4_slaves,
  372. .slaves_cnt = ARRAY_SIZE(omap2420_timer4_slaves),
  373. .class = &omap2xxx_timer_hwmod_class,
  374. };
  375. /* timer5 */
  376. static struct omap_hwmod omap2420_timer5_hwmod;
  377. /* l4_core -> timer5 */
  378. static struct omap_hwmod_ocp_if omap2420_l4_core__timer5 = {
  379. .master = &omap2420_l4_core_hwmod,
  380. .slave = &omap2420_timer5_hwmod,
  381. .clk = "gpt5_ick",
  382. .addr = omap2xxx_timer5_addrs,
  383. .user = OCP_USER_MPU | OCP_USER_SDMA,
  384. };
  385. /* timer5 slave port */
  386. static struct omap_hwmod_ocp_if *omap2420_timer5_slaves[] = {
  387. &omap2420_l4_core__timer5,
  388. };
  389. /* timer5 hwmod */
  390. static struct omap_hwmod omap2420_timer5_hwmod = {
  391. .name = "timer5",
  392. .mpu_irqs = omap2_timer5_mpu_irqs,
  393. .main_clk = "gpt5_fck",
  394. .prcm = {
  395. .omap2 = {
  396. .prcm_reg_id = 1,
  397. .module_bit = OMAP24XX_EN_GPT5_SHIFT,
  398. .module_offs = CORE_MOD,
  399. .idlest_reg_id = 1,
  400. .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
  401. },
  402. },
  403. .slaves = omap2420_timer5_slaves,
  404. .slaves_cnt = ARRAY_SIZE(omap2420_timer5_slaves),
  405. .class = &omap2xxx_timer_hwmod_class,
  406. };
  407. /* timer6 */
  408. static struct omap_hwmod omap2420_timer6_hwmod;
  409. /* l4_core -> timer6 */
  410. static struct omap_hwmod_ocp_if omap2420_l4_core__timer6 = {
  411. .master = &omap2420_l4_core_hwmod,
  412. .slave = &omap2420_timer6_hwmod,
  413. .clk = "gpt6_ick",
  414. .addr = omap2xxx_timer6_addrs,
  415. .user = OCP_USER_MPU | OCP_USER_SDMA,
  416. };
  417. /* timer6 slave port */
  418. static struct omap_hwmod_ocp_if *omap2420_timer6_slaves[] = {
  419. &omap2420_l4_core__timer6,
  420. };
  421. /* timer6 hwmod */
  422. static struct omap_hwmod omap2420_timer6_hwmod = {
  423. .name = "timer6",
  424. .mpu_irqs = omap2_timer6_mpu_irqs,
  425. .main_clk = "gpt6_fck",
  426. .prcm = {
  427. .omap2 = {
  428. .prcm_reg_id = 1,
  429. .module_bit = OMAP24XX_EN_GPT6_SHIFT,
  430. .module_offs = CORE_MOD,
  431. .idlest_reg_id = 1,
  432. .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
  433. },
  434. },
  435. .slaves = omap2420_timer6_slaves,
  436. .slaves_cnt = ARRAY_SIZE(omap2420_timer6_slaves),
  437. .class = &omap2xxx_timer_hwmod_class,
  438. };
  439. /* timer7 */
  440. static struct omap_hwmod omap2420_timer7_hwmod;
  441. /* l4_core -> timer7 */
  442. static struct omap_hwmod_ocp_if omap2420_l4_core__timer7 = {
  443. .master = &omap2420_l4_core_hwmod,
  444. .slave = &omap2420_timer7_hwmod,
  445. .clk = "gpt7_ick",
  446. .addr = omap2xxx_timer7_addrs,
  447. .user = OCP_USER_MPU | OCP_USER_SDMA,
  448. };
  449. /* timer7 slave port */
  450. static struct omap_hwmod_ocp_if *omap2420_timer7_slaves[] = {
  451. &omap2420_l4_core__timer7,
  452. };
  453. /* timer7 hwmod */
  454. static struct omap_hwmod omap2420_timer7_hwmod = {
  455. .name = "timer7",
  456. .mpu_irqs = omap2_timer7_mpu_irqs,
  457. .main_clk = "gpt7_fck",
  458. .prcm = {
  459. .omap2 = {
  460. .prcm_reg_id = 1,
  461. .module_bit = OMAP24XX_EN_GPT7_SHIFT,
  462. .module_offs = CORE_MOD,
  463. .idlest_reg_id = 1,
  464. .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
  465. },
  466. },
  467. .slaves = omap2420_timer7_slaves,
  468. .slaves_cnt = ARRAY_SIZE(omap2420_timer7_slaves),
  469. .class = &omap2xxx_timer_hwmod_class,
  470. };
  471. /* timer8 */
  472. static struct omap_hwmod omap2420_timer8_hwmod;
  473. /* l4_core -> timer8 */
  474. static struct omap_hwmod_ocp_if omap2420_l4_core__timer8 = {
  475. .master = &omap2420_l4_core_hwmod,
  476. .slave = &omap2420_timer8_hwmod,
  477. .clk = "gpt8_ick",
  478. .addr = omap2xxx_timer8_addrs,
  479. .user = OCP_USER_MPU | OCP_USER_SDMA,
  480. };
  481. /* timer8 slave port */
  482. static struct omap_hwmod_ocp_if *omap2420_timer8_slaves[] = {
  483. &omap2420_l4_core__timer8,
  484. };
  485. /* timer8 hwmod */
  486. static struct omap_hwmod omap2420_timer8_hwmod = {
  487. .name = "timer8",
  488. .mpu_irqs = omap2_timer8_mpu_irqs,
  489. .main_clk = "gpt8_fck",
  490. .prcm = {
  491. .omap2 = {
  492. .prcm_reg_id = 1,
  493. .module_bit = OMAP24XX_EN_GPT8_SHIFT,
  494. .module_offs = CORE_MOD,
  495. .idlest_reg_id = 1,
  496. .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
  497. },
  498. },
  499. .slaves = omap2420_timer8_slaves,
  500. .slaves_cnt = ARRAY_SIZE(omap2420_timer8_slaves),
  501. .class = &omap2xxx_timer_hwmod_class,
  502. };
  503. /* timer9 */
  504. static struct omap_hwmod omap2420_timer9_hwmod;
  505. /* l4_core -> timer9 */
  506. static struct omap_hwmod_ocp_if omap2420_l4_core__timer9 = {
  507. .master = &omap2420_l4_core_hwmod,
  508. .slave = &omap2420_timer9_hwmod,
  509. .clk = "gpt9_ick",
  510. .addr = omap2xxx_timer9_addrs,
  511. .user = OCP_USER_MPU | OCP_USER_SDMA,
  512. };
  513. /* timer9 slave port */
  514. static struct omap_hwmod_ocp_if *omap2420_timer9_slaves[] = {
  515. &omap2420_l4_core__timer9,
  516. };
  517. /* timer9 hwmod */
  518. static struct omap_hwmod omap2420_timer9_hwmod = {
  519. .name = "timer9",
  520. .mpu_irqs = omap2_timer9_mpu_irqs,
  521. .main_clk = "gpt9_fck",
  522. .prcm = {
  523. .omap2 = {
  524. .prcm_reg_id = 1,
  525. .module_bit = OMAP24XX_EN_GPT9_SHIFT,
  526. .module_offs = CORE_MOD,
  527. .idlest_reg_id = 1,
  528. .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
  529. },
  530. },
  531. .slaves = omap2420_timer9_slaves,
  532. .slaves_cnt = ARRAY_SIZE(omap2420_timer9_slaves),
  533. .class = &omap2xxx_timer_hwmod_class,
  534. };
  535. /* timer10 */
  536. static struct omap_hwmod omap2420_timer10_hwmod;
  537. /* l4_core -> timer10 */
  538. static struct omap_hwmod_ocp_if omap2420_l4_core__timer10 = {
  539. .master = &omap2420_l4_core_hwmod,
  540. .slave = &omap2420_timer10_hwmod,
  541. .clk = "gpt10_ick",
  542. .addr = omap2_timer10_addrs,
  543. .user = OCP_USER_MPU | OCP_USER_SDMA,
  544. };
  545. /* timer10 slave port */
  546. static struct omap_hwmod_ocp_if *omap2420_timer10_slaves[] = {
  547. &omap2420_l4_core__timer10,
  548. };
  549. /* timer10 hwmod */
  550. static struct omap_hwmod omap2420_timer10_hwmod = {
  551. .name = "timer10",
  552. .mpu_irqs = omap2_timer10_mpu_irqs,
  553. .main_clk = "gpt10_fck",
  554. .prcm = {
  555. .omap2 = {
  556. .prcm_reg_id = 1,
  557. .module_bit = OMAP24XX_EN_GPT10_SHIFT,
  558. .module_offs = CORE_MOD,
  559. .idlest_reg_id = 1,
  560. .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT,
  561. },
  562. },
  563. .slaves = omap2420_timer10_slaves,
  564. .slaves_cnt = ARRAY_SIZE(omap2420_timer10_slaves),
  565. .class = &omap2xxx_timer_hwmod_class,
  566. };
  567. /* timer11 */
  568. static struct omap_hwmod omap2420_timer11_hwmod;
  569. /* l4_core -> timer11 */
  570. static struct omap_hwmod_ocp_if omap2420_l4_core__timer11 = {
  571. .master = &omap2420_l4_core_hwmod,
  572. .slave = &omap2420_timer11_hwmod,
  573. .clk = "gpt11_ick",
  574. .addr = omap2_timer11_addrs,
  575. .user = OCP_USER_MPU | OCP_USER_SDMA,
  576. };
  577. /* timer11 slave port */
  578. static struct omap_hwmod_ocp_if *omap2420_timer11_slaves[] = {
  579. &omap2420_l4_core__timer11,
  580. };
  581. /* timer11 hwmod */
  582. static struct omap_hwmod omap2420_timer11_hwmod = {
  583. .name = "timer11",
  584. .mpu_irqs = omap2_timer11_mpu_irqs,
  585. .main_clk = "gpt11_fck",
  586. .prcm = {
  587. .omap2 = {
  588. .prcm_reg_id = 1,
  589. .module_bit = OMAP24XX_EN_GPT11_SHIFT,
  590. .module_offs = CORE_MOD,
  591. .idlest_reg_id = 1,
  592. .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT,
  593. },
  594. },
  595. .slaves = omap2420_timer11_slaves,
  596. .slaves_cnt = ARRAY_SIZE(omap2420_timer11_slaves),
  597. .class = &omap2xxx_timer_hwmod_class,
  598. };
  599. /* timer12 */
  600. static struct omap_hwmod omap2420_timer12_hwmod;
  601. /* l4_core -> timer12 */
  602. static struct omap_hwmod_ocp_if omap2420_l4_core__timer12 = {
  603. .master = &omap2420_l4_core_hwmod,
  604. .slave = &omap2420_timer12_hwmod,
  605. .clk = "gpt12_ick",
  606. .addr = omap2xxx_timer12_addrs,
  607. .user = OCP_USER_MPU | OCP_USER_SDMA,
  608. };
  609. /* timer12 slave port */
  610. static struct omap_hwmod_ocp_if *omap2420_timer12_slaves[] = {
  611. &omap2420_l4_core__timer12,
  612. };
  613. /* timer12 hwmod */
  614. static struct omap_hwmod omap2420_timer12_hwmod = {
  615. .name = "timer12",
  616. .mpu_irqs = omap2xxx_timer12_mpu_irqs,
  617. .main_clk = "gpt12_fck",
  618. .prcm = {
  619. .omap2 = {
  620. .prcm_reg_id = 1,
  621. .module_bit = OMAP24XX_EN_GPT12_SHIFT,
  622. .module_offs = CORE_MOD,
  623. .idlest_reg_id = 1,
  624. .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT,
  625. },
  626. },
  627. .slaves = omap2420_timer12_slaves,
  628. .slaves_cnt = ARRAY_SIZE(omap2420_timer12_slaves),
  629. .class = &omap2xxx_timer_hwmod_class,
  630. };
  631. /* l4_wkup -> wd_timer2 */
  632. static struct omap_hwmod_addr_space omap2420_wd_timer2_addrs[] = {
  633. {
  634. .pa_start = 0x48022000,
  635. .pa_end = 0x4802207f,
  636. .flags = ADDR_TYPE_RT
  637. },
  638. { }
  639. };
  640. static struct omap_hwmod_ocp_if omap2420_l4_wkup__wd_timer2 = {
  641. .master = &omap2420_l4_wkup_hwmod,
  642. .slave = &omap2420_wd_timer2_hwmod,
  643. .clk = "mpu_wdt_ick",
  644. .addr = omap2420_wd_timer2_addrs,
  645. .user = OCP_USER_MPU | OCP_USER_SDMA,
  646. };
  647. /* wd_timer2 */
  648. static struct omap_hwmod_ocp_if *omap2420_wd_timer2_slaves[] = {
  649. &omap2420_l4_wkup__wd_timer2,
  650. };
  651. static struct omap_hwmod omap2420_wd_timer2_hwmod = {
  652. .name = "wd_timer2",
  653. .class = &omap2xxx_wd_timer_hwmod_class,
  654. .main_clk = "mpu_wdt_fck",
  655. .prcm = {
  656. .omap2 = {
  657. .prcm_reg_id = 1,
  658. .module_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
  659. .module_offs = WKUP_MOD,
  660. .idlest_reg_id = 1,
  661. .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
  662. },
  663. },
  664. .slaves = omap2420_wd_timer2_slaves,
  665. .slaves_cnt = ARRAY_SIZE(omap2420_wd_timer2_slaves),
  666. };
  667. /* UART1 */
  668. static struct omap_hwmod_ocp_if *omap2420_uart1_slaves[] = {
  669. &omap2_l4_core__uart1,
  670. };
  671. static struct omap_hwmod omap2420_uart1_hwmod = {
  672. .name = "uart1",
  673. .mpu_irqs = omap2_uart1_mpu_irqs,
  674. .sdma_reqs = omap2_uart1_sdma_reqs,
  675. .main_clk = "uart1_fck",
  676. .prcm = {
  677. .omap2 = {
  678. .module_offs = CORE_MOD,
  679. .prcm_reg_id = 1,
  680. .module_bit = OMAP24XX_EN_UART1_SHIFT,
  681. .idlest_reg_id = 1,
  682. .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
  683. },
  684. },
  685. .slaves = omap2420_uart1_slaves,
  686. .slaves_cnt = ARRAY_SIZE(omap2420_uart1_slaves),
  687. .class = &omap2_uart_class,
  688. };
  689. /* UART2 */
  690. static struct omap_hwmod_ocp_if *omap2420_uart2_slaves[] = {
  691. &omap2_l4_core__uart2,
  692. };
  693. static struct omap_hwmod omap2420_uart2_hwmod = {
  694. .name = "uart2",
  695. .mpu_irqs = omap2_uart2_mpu_irqs,
  696. .sdma_reqs = omap2_uart2_sdma_reqs,
  697. .main_clk = "uart2_fck",
  698. .prcm = {
  699. .omap2 = {
  700. .module_offs = CORE_MOD,
  701. .prcm_reg_id = 1,
  702. .module_bit = OMAP24XX_EN_UART2_SHIFT,
  703. .idlest_reg_id = 1,
  704. .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
  705. },
  706. },
  707. .slaves = omap2420_uart2_slaves,
  708. .slaves_cnt = ARRAY_SIZE(omap2420_uart2_slaves),
  709. .class = &omap2_uart_class,
  710. };
  711. /* UART3 */
  712. static struct omap_hwmod_ocp_if *omap2420_uart3_slaves[] = {
  713. &omap2_l4_core__uart3,
  714. };
  715. static struct omap_hwmod omap2420_uart3_hwmod = {
  716. .name = "uart3",
  717. .mpu_irqs = omap2_uart3_mpu_irqs,
  718. .sdma_reqs = omap2_uart3_sdma_reqs,
  719. .main_clk = "uart3_fck",
  720. .prcm = {
  721. .omap2 = {
  722. .module_offs = CORE_MOD,
  723. .prcm_reg_id = 2,
  724. .module_bit = OMAP24XX_EN_UART3_SHIFT,
  725. .idlest_reg_id = 2,
  726. .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
  727. },
  728. },
  729. .slaves = omap2420_uart3_slaves,
  730. .slaves_cnt = ARRAY_SIZE(omap2420_uart3_slaves),
  731. .class = &omap2_uart_class,
  732. };
  733. /* dss */
  734. /* dss master ports */
  735. static struct omap_hwmod_ocp_if *omap2420_dss_masters[] = {
  736. &omap2420_dss__l3,
  737. };
  738. /* l4_core -> dss */
  739. static struct omap_hwmod_ocp_if omap2420_l4_core__dss = {
  740. .master = &omap2420_l4_core_hwmod,
  741. .slave = &omap2420_dss_core_hwmod,
  742. .clk = "dss_ick",
  743. .addr = omap2_dss_addrs,
  744. .fw = {
  745. .omap2 = {
  746. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
  747. .flags = OMAP_FIREWALL_L4,
  748. }
  749. },
  750. .user = OCP_USER_MPU | OCP_USER_SDMA,
  751. };
  752. /* dss slave ports */
  753. static struct omap_hwmod_ocp_if *omap2420_dss_slaves[] = {
  754. &omap2420_l4_core__dss,
  755. };
  756. static struct omap_hwmod_opt_clk dss_opt_clks[] = {
  757. { .role = "tv_clk", .clk = "dss_54m_fck" },
  758. { .role = "sys_clk", .clk = "dss2_fck" },
  759. };
  760. static struct omap_hwmod omap2420_dss_core_hwmod = {
  761. .name = "dss_core",
  762. .class = &omap2_dss_hwmod_class,
  763. .main_clk = "dss1_fck", /* instead of dss_fck */
  764. .sdma_reqs = omap2xxx_dss_sdma_chs,
  765. .prcm = {
  766. .omap2 = {
  767. .prcm_reg_id = 1,
  768. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  769. .module_offs = CORE_MOD,
  770. .idlest_reg_id = 1,
  771. .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
  772. },
  773. },
  774. .opt_clks = dss_opt_clks,
  775. .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
  776. .slaves = omap2420_dss_slaves,
  777. .slaves_cnt = ARRAY_SIZE(omap2420_dss_slaves),
  778. .masters = omap2420_dss_masters,
  779. .masters_cnt = ARRAY_SIZE(omap2420_dss_masters),
  780. .flags = HWMOD_NO_IDLEST,
  781. };
  782. /* l4_core -> dss_dispc */
  783. static struct omap_hwmod_ocp_if omap2420_l4_core__dss_dispc = {
  784. .master = &omap2420_l4_core_hwmod,
  785. .slave = &omap2420_dss_dispc_hwmod,
  786. .clk = "dss_ick",
  787. .addr = omap2_dss_dispc_addrs,
  788. .fw = {
  789. .omap2 = {
  790. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_DISPC_REGION,
  791. .flags = OMAP_FIREWALL_L4,
  792. }
  793. },
  794. .user = OCP_USER_MPU | OCP_USER_SDMA,
  795. };
  796. /* dss_dispc slave ports */
  797. static struct omap_hwmod_ocp_if *omap2420_dss_dispc_slaves[] = {
  798. &omap2420_l4_core__dss_dispc,
  799. };
  800. static struct omap_hwmod omap2420_dss_dispc_hwmod = {
  801. .name = "dss_dispc",
  802. .class = &omap2_dispc_hwmod_class,
  803. .mpu_irqs = omap2_dispc_irqs,
  804. .main_clk = "dss1_fck",
  805. .prcm = {
  806. .omap2 = {
  807. .prcm_reg_id = 1,
  808. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  809. .module_offs = CORE_MOD,
  810. .idlest_reg_id = 1,
  811. .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
  812. },
  813. },
  814. .slaves = omap2420_dss_dispc_slaves,
  815. .slaves_cnt = ARRAY_SIZE(omap2420_dss_dispc_slaves),
  816. .flags = HWMOD_NO_IDLEST,
  817. };
  818. /* l4_core -> dss_rfbi */
  819. static struct omap_hwmod_ocp_if omap2420_l4_core__dss_rfbi = {
  820. .master = &omap2420_l4_core_hwmod,
  821. .slave = &omap2420_dss_rfbi_hwmod,
  822. .clk = "dss_ick",
  823. .addr = omap2_dss_rfbi_addrs,
  824. .fw = {
  825. .omap2 = {
  826. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
  827. .flags = OMAP_FIREWALL_L4,
  828. }
  829. },
  830. .user = OCP_USER_MPU | OCP_USER_SDMA,
  831. };
  832. /* dss_rfbi slave ports */
  833. static struct omap_hwmod_ocp_if *omap2420_dss_rfbi_slaves[] = {
  834. &omap2420_l4_core__dss_rfbi,
  835. };
  836. static struct omap_hwmod omap2420_dss_rfbi_hwmod = {
  837. .name = "dss_rfbi",
  838. .class = &omap2_rfbi_hwmod_class,
  839. .main_clk = "dss1_fck",
  840. .prcm = {
  841. .omap2 = {
  842. .prcm_reg_id = 1,
  843. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  844. .module_offs = CORE_MOD,
  845. },
  846. },
  847. .slaves = omap2420_dss_rfbi_slaves,
  848. .slaves_cnt = ARRAY_SIZE(omap2420_dss_rfbi_slaves),
  849. .flags = HWMOD_NO_IDLEST,
  850. };
  851. /* l4_core -> dss_venc */
  852. static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
  853. .master = &omap2420_l4_core_hwmod,
  854. .slave = &omap2420_dss_venc_hwmod,
  855. .clk = "dss_54m_fck",
  856. .addr = omap2_dss_venc_addrs,
  857. .fw = {
  858. .omap2 = {
  859. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_VENC_REGION,
  860. .flags = OMAP_FIREWALL_L4,
  861. }
  862. },
  863. .flags = OCPIF_SWSUP_IDLE,
  864. .user = OCP_USER_MPU | OCP_USER_SDMA,
  865. };
  866. /* dss_venc slave ports */
  867. static struct omap_hwmod_ocp_if *omap2420_dss_venc_slaves[] = {
  868. &omap2420_l4_core__dss_venc,
  869. };
  870. static struct omap_hwmod omap2420_dss_venc_hwmod = {
  871. .name = "dss_venc",
  872. .class = &omap2_venc_hwmod_class,
  873. .main_clk = "dss1_fck",
  874. .prcm = {
  875. .omap2 = {
  876. .prcm_reg_id = 1,
  877. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  878. .module_offs = CORE_MOD,
  879. },
  880. },
  881. .slaves = omap2420_dss_venc_slaves,
  882. .slaves_cnt = ARRAY_SIZE(omap2420_dss_venc_slaves),
  883. .flags = HWMOD_NO_IDLEST,
  884. };
  885. /* I2C common */
  886. static struct omap_hwmod_class_sysconfig i2c_sysc = {
  887. .rev_offs = 0x00,
  888. .sysc_offs = 0x20,
  889. .syss_offs = 0x10,
  890. .sysc_flags = (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
  891. .sysc_fields = &omap_hwmod_sysc_type1,
  892. };
  893. static struct omap_hwmod_class i2c_class = {
  894. .name = "i2c",
  895. .sysc = &i2c_sysc,
  896. .rev = OMAP_I2C_IP_VERSION_1,
  897. .reset = &omap_i2c_reset,
  898. };
  899. static struct omap_i2c_dev_attr i2c_dev_attr = {
  900. .flags = OMAP_I2C_FLAG_NO_FIFO |
  901. OMAP_I2C_FLAG_SIMPLE_CLOCK |
  902. OMAP_I2C_FLAG_16BIT_DATA_REG |
  903. OMAP_I2C_FLAG_BUS_SHIFT_2,
  904. };
  905. /* I2C1 */
  906. static struct omap_hwmod_ocp_if *omap2420_i2c1_slaves[] = {
  907. &omap2420_l4_core__i2c1,
  908. };
  909. static struct omap_hwmod omap2420_i2c1_hwmod = {
  910. .name = "i2c1",
  911. .mpu_irqs = omap2_i2c1_mpu_irqs,
  912. .sdma_reqs = omap2_i2c1_sdma_reqs,
  913. .main_clk = "i2c1_fck",
  914. .prcm = {
  915. .omap2 = {
  916. .module_offs = CORE_MOD,
  917. .prcm_reg_id = 1,
  918. .module_bit = OMAP2420_EN_I2C1_SHIFT,
  919. .idlest_reg_id = 1,
  920. .idlest_idle_bit = OMAP2420_ST_I2C1_SHIFT,
  921. },
  922. },
  923. .slaves = omap2420_i2c1_slaves,
  924. .slaves_cnt = ARRAY_SIZE(omap2420_i2c1_slaves),
  925. .class = &i2c_class,
  926. .dev_attr = &i2c_dev_attr,
  927. .flags = HWMOD_16BIT_REG,
  928. };
  929. /* I2C2 */
  930. static struct omap_hwmod_ocp_if *omap2420_i2c2_slaves[] = {
  931. &omap2420_l4_core__i2c2,
  932. };
  933. static struct omap_hwmod omap2420_i2c2_hwmod = {
  934. .name = "i2c2",
  935. .mpu_irqs = omap2_i2c2_mpu_irqs,
  936. .sdma_reqs = omap2_i2c2_sdma_reqs,
  937. .main_clk = "i2c2_fck",
  938. .prcm = {
  939. .omap2 = {
  940. .module_offs = CORE_MOD,
  941. .prcm_reg_id = 1,
  942. .module_bit = OMAP2420_EN_I2C2_SHIFT,
  943. .idlest_reg_id = 1,
  944. .idlest_idle_bit = OMAP2420_ST_I2C2_SHIFT,
  945. },
  946. },
  947. .slaves = omap2420_i2c2_slaves,
  948. .slaves_cnt = ARRAY_SIZE(omap2420_i2c2_slaves),
  949. .class = &i2c_class,
  950. .dev_attr = &i2c_dev_attr,
  951. .flags = HWMOD_16BIT_REG,
  952. };
  953. /* l4_wkup -> gpio1 */
  954. static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
  955. {
  956. .pa_start = 0x48018000,
  957. .pa_end = 0x480181ff,
  958. .flags = ADDR_TYPE_RT
  959. },
  960. { }
  961. };
  962. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
  963. .master = &omap2420_l4_wkup_hwmod,
  964. .slave = &omap2420_gpio1_hwmod,
  965. .clk = "gpios_ick",
  966. .addr = omap2420_gpio1_addr_space,
  967. .user = OCP_USER_MPU | OCP_USER_SDMA,
  968. };
  969. /* l4_wkup -> gpio2 */
  970. static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
  971. {
  972. .pa_start = 0x4801a000,
  973. .pa_end = 0x4801a1ff,
  974. .flags = ADDR_TYPE_RT
  975. },
  976. { }
  977. };
  978. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
  979. .master = &omap2420_l4_wkup_hwmod,
  980. .slave = &omap2420_gpio2_hwmod,
  981. .clk = "gpios_ick",
  982. .addr = omap2420_gpio2_addr_space,
  983. .user = OCP_USER_MPU | OCP_USER_SDMA,
  984. };
  985. /* l4_wkup -> gpio3 */
  986. static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
  987. {
  988. .pa_start = 0x4801c000,
  989. .pa_end = 0x4801c1ff,
  990. .flags = ADDR_TYPE_RT
  991. },
  992. { }
  993. };
  994. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
  995. .master = &omap2420_l4_wkup_hwmod,
  996. .slave = &omap2420_gpio3_hwmod,
  997. .clk = "gpios_ick",
  998. .addr = omap2420_gpio3_addr_space,
  999. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1000. };
  1001. /* l4_wkup -> gpio4 */
  1002. static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
  1003. {
  1004. .pa_start = 0x4801e000,
  1005. .pa_end = 0x4801e1ff,
  1006. .flags = ADDR_TYPE_RT
  1007. },
  1008. { }
  1009. };
  1010. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
  1011. .master = &omap2420_l4_wkup_hwmod,
  1012. .slave = &omap2420_gpio4_hwmod,
  1013. .clk = "gpios_ick",
  1014. .addr = omap2420_gpio4_addr_space,
  1015. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1016. };
  1017. /* gpio dev_attr */
  1018. static struct omap_gpio_dev_attr gpio_dev_attr = {
  1019. .bank_width = 32,
  1020. .dbck_flag = false,
  1021. };
  1022. /* gpio1 */
  1023. static struct omap_hwmod_ocp_if *omap2420_gpio1_slaves[] = {
  1024. &omap2420_l4_wkup__gpio1,
  1025. };
  1026. static struct omap_hwmod omap2420_gpio1_hwmod = {
  1027. .name = "gpio1",
  1028. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  1029. .mpu_irqs = omap2_gpio1_irqs,
  1030. .main_clk = "gpios_fck",
  1031. .prcm = {
  1032. .omap2 = {
  1033. .prcm_reg_id = 1,
  1034. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  1035. .module_offs = WKUP_MOD,
  1036. .idlest_reg_id = 1,
  1037. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  1038. },
  1039. },
  1040. .slaves = omap2420_gpio1_slaves,
  1041. .slaves_cnt = ARRAY_SIZE(omap2420_gpio1_slaves),
  1042. .class = &omap2xxx_gpio_hwmod_class,
  1043. .dev_attr = &gpio_dev_attr,
  1044. };
  1045. /* gpio2 */
  1046. static struct omap_hwmod_ocp_if *omap2420_gpio2_slaves[] = {
  1047. &omap2420_l4_wkup__gpio2,
  1048. };
  1049. static struct omap_hwmod omap2420_gpio2_hwmod = {
  1050. .name = "gpio2",
  1051. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  1052. .mpu_irqs = omap2_gpio2_irqs,
  1053. .main_clk = "gpios_fck",
  1054. .prcm = {
  1055. .omap2 = {
  1056. .prcm_reg_id = 1,
  1057. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  1058. .module_offs = WKUP_MOD,
  1059. .idlest_reg_id = 1,
  1060. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  1061. },
  1062. },
  1063. .slaves = omap2420_gpio2_slaves,
  1064. .slaves_cnt = ARRAY_SIZE(omap2420_gpio2_slaves),
  1065. .class = &omap2xxx_gpio_hwmod_class,
  1066. .dev_attr = &gpio_dev_attr,
  1067. };
  1068. /* gpio3 */
  1069. static struct omap_hwmod_ocp_if *omap2420_gpio3_slaves[] = {
  1070. &omap2420_l4_wkup__gpio3,
  1071. };
  1072. static struct omap_hwmod omap2420_gpio3_hwmod = {
  1073. .name = "gpio3",
  1074. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  1075. .mpu_irqs = omap2_gpio3_irqs,
  1076. .main_clk = "gpios_fck",
  1077. .prcm = {
  1078. .omap2 = {
  1079. .prcm_reg_id = 1,
  1080. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  1081. .module_offs = WKUP_MOD,
  1082. .idlest_reg_id = 1,
  1083. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  1084. },
  1085. },
  1086. .slaves = omap2420_gpio3_slaves,
  1087. .slaves_cnt = ARRAY_SIZE(omap2420_gpio3_slaves),
  1088. .class = &omap2xxx_gpio_hwmod_class,
  1089. .dev_attr = &gpio_dev_attr,
  1090. };
  1091. /* gpio4 */
  1092. static struct omap_hwmod_ocp_if *omap2420_gpio4_slaves[] = {
  1093. &omap2420_l4_wkup__gpio4,
  1094. };
  1095. static struct omap_hwmod omap2420_gpio4_hwmod = {
  1096. .name = "gpio4",
  1097. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  1098. .mpu_irqs = omap2_gpio4_irqs,
  1099. .main_clk = "gpios_fck",
  1100. .prcm = {
  1101. .omap2 = {
  1102. .prcm_reg_id = 1,
  1103. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  1104. .module_offs = WKUP_MOD,
  1105. .idlest_reg_id = 1,
  1106. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  1107. },
  1108. },
  1109. .slaves = omap2420_gpio4_slaves,
  1110. .slaves_cnt = ARRAY_SIZE(omap2420_gpio4_slaves),
  1111. .class = &omap2xxx_gpio_hwmod_class,
  1112. .dev_attr = &gpio_dev_attr,
  1113. };
  1114. /* dma attributes */
  1115. static struct omap_dma_dev_attr dma_dev_attr = {
  1116. .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
  1117. IS_CSSA_32 | IS_CDSA_32,
  1118. .lch_count = 32,
  1119. };
  1120. /* dma_system -> L3 */
  1121. static struct omap_hwmod_ocp_if omap2420_dma_system__l3 = {
  1122. .master = &omap2420_dma_system_hwmod,
  1123. .slave = &omap2420_l3_main_hwmod,
  1124. .clk = "core_l3_ck",
  1125. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1126. };
  1127. /* dma_system master ports */
  1128. static struct omap_hwmod_ocp_if *omap2420_dma_system_masters[] = {
  1129. &omap2420_dma_system__l3,
  1130. };
  1131. /* l4_core -> dma_system */
  1132. static struct omap_hwmod_ocp_if omap2420_l4_core__dma_system = {
  1133. .master = &omap2420_l4_core_hwmod,
  1134. .slave = &omap2420_dma_system_hwmod,
  1135. .clk = "sdma_ick",
  1136. .addr = omap2_dma_system_addrs,
  1137. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1138. };
  1139. /* dma_system slave ports */
  1140. static struct omap_hwmod_ocp_if *omap2420_dma_system_slaves[] = {
  1141. &omap2420_l4_core__dma_system,
  1142. };
  1143. static struct omap_hwmod omap2420_dma_system_hwmod = {
  1144. .name = "dma",
  1145. .class = &omap2xxx_dma_hwmod_class,
  1146. .mpu_irqs = omap2_dma_system_irqs,
  1147. .main_clk = "core_l3_ck",
  1148. .slaves = omap2420_dma_system_slaves,
  1149. .slaves_cnt = ARRAY_SIZE(omap2420_dma_system_slaves),
  1150. .masters = omap2420_dma_system_masters,
  1151. .masters_cnt = ARRAY_SIZE(omap2420_dma_system_masters),
  1152. .dev_attr = &dma_dev_attr,
  1153. .flags = HWMOD_NO_IDLEST,
  1154. };
  1155. /* mailbox */
  1156. static struct omap_hwmod omap2420_mailbox_hwmod;
  1157. static struct omap_hwmod_irq_info omap2420_mailbox_irqs[] = {
  1158. { .name = "dsp", .irq = 26 },
  1159. { .name = "iva", .irq = 34 },
  1160. { .irq = -1 }
  1161. };
  1162. /* l4_core -> mailbox */
  1163. static struct omap_hwmod_ocp_if omap2420_l4_core__mailbox = {
  1164. .master = &omap2420_l4_core_hwmod,
  1165. .slave = &omap2420_mailbox_hwmod,
  1166. .addr = omap2_mailbox_addrs,
  1167. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1168. };
  1169. /* mailbox slave ports */
  1170. static struct omap_hwmod_ocp_if *omap2420_mailbox_slaves[] = {
  1171. &omap2420_l4_core__mailbox,
  1172. };
  1173. static struct omap_hwmod omap2420_mailbox_hwmod = {
  1174. .name = "mailbox",
  1175. .class = &omap2xxx_mailbox_hwmod_class,
  1176. .mpu_irqs = omap2420_mailbox_irqs,
  1177. .main_clk = "mailboxes_ick",
  1178. .prcm = {
  1179. .omap2 = {
  1180. .prcm_reg_id = 1,
  1181. .module_bit = OMAP24XX_EN_MAILBOXES_SHIFT,
  1182. .module_offs = CORE_MOD,
  1183. .idlest_reg_id = 1,
  1184. .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
  1185. },
  1186. },
  1187. .slaves = omap2420_mailbox_slaves,
  1188. .slaves_cnt = ARRAY_SIZE(omap2420_mailbox_slaves),
  1189. };
  1190. /* mcspi1 */
  1191. static struct omap_hwmod_ocp_if *omap2420_mcspi1_slaves[] = {
  1192. &omap2420_l4_core__mcspi1,
  1193. };
  1194. static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
  1195. .num_chipselect = 4,
  1196. };
  1197. static struct omap_hwmod omap2420_mcspi1_hwmod = {
  1198. .name = "mcspi1_hwmod",
  1199. .mpu_irqs = omap2_mcspi1_mpu_irqs,
  1200. .sdma_reqs = omap2_mcspi1_sdma_reqs,
  1201. .main_clk = "mcspi1_fck",
  1202. .prcm = {
  1203. .omap2 = {
  1204. .module_offs = CORE_MOD,
  1205. .prcm_reg_id = 1,
  1206. .module_bit = OMAP24XX_EN_MCSPI1_SHIFT,
  1207. .idlest_reg_id = 1,
  1208. .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
  1209. },
  1210. },
  1211. .slaves = omap2420_mcspi1_slaves,
  1212. .slaves_cnt = ARRAY_SIZE(omap2420_mcspi1_slaves),
  1213. .class = &omap2xxx_mcspi_class,
  1214. .dev_attr = &omap_mcspi1_dev_attr,
  1215. };
  1216. /* mcspi2 */
  1217. static struct omap_hwmod_ocp_if *omap2420_mcspi2_slaves[] = {
  1218. &omap2420_l4_core__mcspi2,
  1219. };
  1220. static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
  1221. .num_chipselect = 2,
  1222. };
  1223. static struct omap_hwmod omap2420_mcspi2_hwmod = {
  1224. .name = "mcspi2_hwmod",
  1225. .mpu_irqs = omap2_mcspi2_mpu_irqs,
  1226. .sdma_reqs = omap2_mcspi2_sdma_reqs,
  1227. .main_clk = "mcspi2_fck",
  1228. .prcm = {
  1229. .omap2 = {
  1230. .module_offs = CORE_MOD,
  1231. .prcm_reg_id = 1,
  1232. .module_bit = OMAP24XX_EN_MCSPI2_SHIFT,
  1233. .idlest_reg_id = 1,
  1234. .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
  1235. },
  1236. },
  1237. .slaves = omap2420_mcspi2_slaves,
  1238. .slaves_cnt = ARRAY_SIZE(omap2420_mcspi2_slaves),
  1239. .class = &omap2xxx_mcspi_class,
  1240. .dev_attr = &omap_mcspi2_dev_attr,
  1241. };
  1242. /*
  1243. * 'mcbsp' class
  1244. * multi channel buffered serial port controller
  1245. */
  1246. static struct omap_hwmod_class omap2420_mcbsp_hwmod_class = {
  1247. .name = "mcbsp",
  1248. };
  1249. /* mcbsp1 */
  1250. static struct omap_hwmod_irq_info omap2420_mcbsp1_irqs[] = {
  1251. { .name = "tx", .irq = 59 },
  1252. { .name = "rx", .irq = 60 },
  1253. { .irq = -1 }
  1254. };
  1255. /* l4_core -> mcbsp1 */
  1256. static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp1 = {
  1257. .master = &omap2420_l4_core_hwmod,
  1258. .slave = &omap2420_mcbsp1_hwmod,
  1259. .clk = "mcbsp1_ick",
  1260. .addr = omap2_mcbsp1_addrs,
  1261. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1262. };
  1263. /* mcbsp1 slave ports */
  1264. static struct omap_hwmod_ocp_if *omap2420_mcbsp1_slaves[] = {
  1265. &omap2420_l4_core__mcbsp1,
  1266. };
  1267. static struct omap_hwmod omap2420_mcbsp1_hwmod = {
  1268. .name = "mcbsp1",
  1269. .class = &omap2420_mcbsp_hwmod_class,
  1270. .mpu_irqs = omap2420_mcbsp1_irqs,
  1271. .sdma_reqs = omap2_mcbsp1_sdma_reqs,
  1272. .main_clk = "mcbsp1_fck",
  1273. .prcm = {
  1274. .omap2 = {
  1275. .prcm_reg_id = 1,
  1276. .module_bit = OMAP24XX_EN_MCBSP1_SHIFT,
  1277. .module_offs = CORE_MOD,
  1278. .idlest_reg_id = 1,
  1279. .idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
  1280. },
  1281. },
  1282. .slaves = omap2420_mcbsp1_slaves,
  1283. .slaves_cnt = ARRAY_SIZE(omap2420_mcbsp1_slaves),
  1284. };
  1285. /* mcbsp2 */
  1286. static struct omap_hwmod_irq_info omap2420_mcbsp2_irqs[] = {
  1287. { .name = "tx", .irq = 62 },
  1288. { .name = "rx", .irq = 63 },
  1289. { .irq = -1 }
  1290. };
  1291. /* l4_core -> mcbsp2 */
  1292. static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp2 = {
  1293. .master = &omap2420_l4_core_hwmod,
  1294. .slave = &omap2420_mcbsp2_hwmod,
  1295. .clk = "mcbsp2_ick",
  1296. .addr = omap2xxx_mcbsp2_addrs,
  1297. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1298. };
  1299. /* mcbsp2 slave ports */
  1300. static struct omap_hwmod_ocp_if *omap2420_mcbsp2_slaves[] = {
  1301. &omap2420_l4_core__mcbsp2,
  1302. };
  1303. static struct omap_hwmod omap2420_mcbsp2_hwmod = {
  1304. .name = "mcbsp2",
  1305. .class = &omap2420_mcbsp_hwmod_class,
  1306. .mpu_irqs = omap2420_mcbsp2_irqs,
  1307. .sdma_reqs = omap2_mcbsp2_sdma_reqs,
  1308. .main_clk = "mcbsp2_fck",
  1309. .prcm = {
  1310. .omap2 = {
  1311. .prcm_reg_id = 1,
  1312. .module_bit = OMAP24XX_EN_MCBSP2_SHIFT,
  1313. .module_offs = CORE_MOD,
  1314. .idlest_reg_id = 1,
  1315. .idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
  1316. },
  1317. },
  1318. .slaves = omap2420_mcbsp2_slaves,
  1319. .slaves_cnt = ARRAY_SIZE(omap2420_mcbsp2_slaves),
  1320. };
  1321. static __initdata struct omap_hwmod *omap2420_hwmods[] = {
  1322. &omap2420_l3_main_hwmod,
  1323. &omap2420_l4_core_hwmod,
  1324. &omap2420_l4_wkup_hwmod,
  1325. &omap2420_mpu_hwmod,
  1326. &omap2420_iva_hwmod,
  1327. &omap2420_timer1_hwmod,
  1328. &omap2420_timer2_hwmod,
  1329. &omap2420_timer3_hwmod,
  1330. &omap2420_timer4_hwmod,
  1331. &omap2420_timer5_hwmod,
  1332. &omap2420_timer6_hwmod,
  1333. &omap2420_timer7_hwmod,
  1334. &omap2420_timer8_hwmod,
  1335. &omap2420_timer9_hwmod,
  1336. &omap2420_timer10_hwmod,
  1337. &omap2420_timer11_hwmod,
  1338. &omap2420_timer12_hwmod,
  1339. &omap2420_wd_timer2_hwmod,
  1340. &omap2420_uart1_hwmod,
  1341. &omap2420_uart2_hwmod,
  1342. &omap2420_uart3_hwmod,
  1343. /* dss class */
  1344. &omap2420_dss_core_hwmod,
  1345. &omap2420_dss_dispc_hwmod,
  1346. &omap2420_dss_rfbi_hwmod,
  1347. &omap2420_dss_venc_hwmod,
  1348. /* i2c class */
  1349. &omap2420_i2c1_hwmod,
  1350. &omap2420_i2c2_hwmod,
  1351. /* gpio class */
  1352. &omap2420_gpio1_hwmod,
  1353. &omap2420_gpio2_hwmod,
  1354. &omap2420_gpio3_hwmod,
  1355. &omap2420_gpio4_hwmod,
  1356. /* dma_system class*/
  1357. &omap2420_dma_system_hwmod,
  1358. /* mailbox class */
  1359. &omap2420_mailbox_hwmod,
  1360. /* mcbsp class */
  1361. &omap2420_mcbsp1_hwmod,
  1362. &omap2420_mcbsp2_hwmod,
  1363. /* mcspi class */
  1364. &omap2420_mcspi1_hwmod,
  1365. &omap2420_mcspi2_hwmod,
  1366. NULL,
  1367. };
  1368. int __init omap2420_hwmod_init(void)
  1369. {
  1370. return omap_hwmod_register(omap2420_hwmods);
  1371. }