omap_hwmod_2420_data.c 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574
  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. /*
  778. * The DSS HW needs all DSS clocks enabled during reset. The dss_core
  779. * driver does not use these clocks.
  780. */
  781. { .role = "tv_clk", .clk = "dss_54m_fck" },
  782. { .role = "sys_clk", .clk = "dss2_fck" },
  783. };
  784. static struct omap_hwmod omap2420_dss_core_hwmod = {
  785. .name = "dss_core",
  786. .class = &omap2_dss_hwmod_class,
  787. .main_clk = "dss1_fck", /* instead of dss_fck */
  788. .sdma_reqs = omap2xxx_dss_sdma_chs,
  789. .prcm = {
  790. .omap2 = {
  791. .prcm_reg_id = 1,
  792. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  793. .module_offs = CORE_MOD,
  794. .idlest_reg_id = 1,
  795. .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
  796. },
  797. },
  798. .opt_clks = dss_opt_clks,
  799. .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
  800. .slaves = omap2420_dss_slaves,
  801. .slaves_cnt = ARRAY_SIZE(omap2420_dss_slaves),
  802. .masters = omap2420_dss_masters,
  803. .masters_cnt = ARRAY_SIZE(omap2420_dss_masters),
  804. .flags = HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  805. };
  806. /* l4_core -> dss_dispc */
  807. static struct omap_hwmod_ocp_if omap2420_l4_core__dss_dispc = {
  808. .master = &omap2420_l4_core_hwmod,
  809. .slave = &omap2420_dss_dispc_hwmod,
  810. .clk = "dss_ick",
  811. .addr = omap2_dss_dispc_addrs,
  812. .fw = {
  813. .omap2 = {
  814. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_DISPC_REGION,
  815. .flags = OMAP_FIREWALL_L4,
  816. }
  817. },
  818. .user = OCP_USER_MPU | OCP_USER_SDMA,
  819. };
  820. /* dss_dispc slave ports */
  821. static struct omap_hwmod_ocp_if *omap2420_dss_dispc_slaves[] = {
  822. &omap2420_l4_core__dss_dispc,
  823. };
  824. static struct omap_hwmod omap2420_dss_dispc_hwmod = {
  825. .name = "dss_dispc",
  826. .class = &omap2_dispc_hwmod_class,
  827. .mpu_irqs = omap2_dispc_irqs,
  828. .main_clk = "dss1_fck",
  829. .prcm = {
  830. .omap2 = {
  831. .prcm_reg_id = 1,
  832. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  833. .module_offs = CORE_MOD,
  834. .idlest_reg_id = 1,
  835. .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
  836. },
  837. },
  838. .slaves = omap2420_dss_dispc_slaves,
  839. .slaves_cnt = ARRAY_SIZE(omap2420_dss_dispc_slaves),
  840. .flags = HWMOD_NO_IDLEST,
  841. .dev_attr = &omap2_3_dss_dispc_dev_attr
  842. };
  843. /* l4_core -> dss_rfbi */
  844. static struct omap_hwmod_ocp_if omap2420_l4_core__dss_rfbi = {
  845. .master = &omap2420_l4_core_hwmod,
  846. .slave = &omap2420_dss_rfbi_hwmod,
  847. .clk = "dss_ick",
  848. .addr = omap2_dss_rfbi_addrs,
  849. .fw = {
  850. .omap2 = {
  851. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
  852. .flags = OMAP_FIREWALL_L4,
  853. }
  854. },
  855. .user = OCP_USER_MPU | OCP_USER_SDMA,
  856. };
  857. /* dss_rfbi slave ports */
  858. static struct omap_hwmod_ocp_if *omap2420_dss_rfbi_slaves[] = {
  859. &omap2420_l4_core__dss_rfbi,
  860. };
  861. static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
  862. { .role = "ick", .clk = "dss_ick" },
  863. };
  864. static struct omap_hwmod omap2420_dss_rfbi_hwmod = {
  865. .name = "dss_rfbi",
  866. .class = &omap2_rfbi_hwmod_class,
  867. .main_clk = "dss1_fck",
  868. .prcm = {
  869. .omap2 = {
  870. .prcm_reg_id = 1,
  871. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  872. .module_offs = CORE_MOD,
  873. },
  874. },
  875. .opt_clks = dss_rfbi_opt_clks,
  876. .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
  877. .slaves = omap2420_dss_rfbi_slaves,
  878. .slaves_cnt = ARRAY_SIZE(omap2420_dss_rfbi_slaves),
  879. .flags = HWMOD_NO_IDLEST,
  880. };
  881. /* l4_core -> dss_venc */
  882. static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
  883. .master = &omap2420_l4_core_hwmod,
  884. .slave = &omap2420_dss_venc_hwmod,
  885. .clk = "dss_ick",
  886. .addr = omap2_dss_venc_addrs,
  887. .fw = {
  888. .omap2 = {
  889. .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_VENC_REGION,
  890. .flags = OMAP_FIREWALL_L4,
  891. }
  892. },
  893. .flags = OCPIF_SWSUP_IDLE,
  894. .user = OCP_USER_MPU | OCP_USER_SDMA,
  895. };
  896. /* dss_venc slave ports */
  897. static struct omap_hwmod_ocp_if *omap2420_dss_venc_slaves[] = {
  898. &omap2420_l4_core__dss_venc,
  899. };
  900. static struct omap_hwmod omap2420_dss_venc_hwmod = {
  901. .name = "dss_venc",
  902. .class = &omap2_venc_hwmod_class,
  903. .main_clk = "dss_54m_fck",
  904. .prcm = {
  905. .omap2 = {
  906. .prcm_reg_id = 1,
  907. .module_bit = OMAP24XX_EN_DSS1_SHIFT,
  908. .module_offs = CORE_MOD,
  909. },
  910. },
  911. .slaves = omap2420_dss_venc_slaves,
  912. .slaves_cnt = ARRAY_SIZE(omap2420_dss_venc_slaves),
  913. .flags = HWMOD_NO_IDLEST,
  914. };
  915. /* I2C common */
  916. static struct omap_hwmod_class_sysconfig i2c_sysc = {
  917. .rev_offs = 0x00,
  918. .sysc_offs = 0x20,
  919. .syss_offs = 0x10,
  920. .sysc_flags = (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
  921. .sysc_fields = &omap_hwmod_sysc_type1,
  922. };
  923. static struct omap_hwmod_class i2c_class = {
  924. .name = "i2c",
  925. .sysc = &i2c_sysc,
  926. .rev = OMAP_I2C_IP_VERSION_1,
  927. .reset = &omap_i2c_reset,
  928. };
  929. static struct omap_i2c_dev_attr i2c_dev_attr = {
  930. .flags = OMAP_I2C_FLAG_NO_FIFO |
  931. OMAP_I2C_FLAG_SIMPLE_CLOCK |
  932. OMAP_I2C_FLAG_16BIT_DATA_REG |
  933. OMAP_I2C_FLAG_BUS_SHIFT_2,
  934. };
  935. /* I2C1 */
  936. static struct omap_hwmod_ocp_if *omap2420_i2c1_slaves[] = {
  937. &omap2420_l4_core__i2c1,
  938. };
  939. static struct omap_hwmod omap2420_i2c1_hwmod = {
  940. .name = "i2c1",
  941. .mpu_irqs = omap2_i2c1_mpu_irqs,
  942. .sdma_reqs = omap2_i2c1_sdma_reqs,
  943. .main_clk = "i2c1_fck",
  944. .prcm = {
  945. .omap2 = {
  946. .module_offs = CORE_MOD,
  947. .prcm_reg_id = 1,
  948. .module_bit = OMAP2420_EN_I2C1_SHIFT,
  949. .idlest_reg_id = 1,
  950. .idlest_idle_bit = OMAP2420_ST_I2C1_SHIFT,
  951. },
  952. },
  953. .slaves = omap2420_i2c1_slaves,
  954. .slaves_cnt = ARRAY_SIZE(omap2420_i2c1_slaves),
  955. .class = &i2c_class,
  956. .dev_attr = &i2c_dev_attr,
  957. .flags = HWMOD_16BIT_REG,
  958. };
  959. /* I2C2 */
  960. static struct omap_hwmod_ocp_if *omap2420_i2c2_slaves[] = {
  961. &omap2420_l4_core__i2c2,
  962. };
  963. static struct omap_hwmod omap2420_i2c2_hwmod = {
  964. .name = "i2c2",
  965. .mpu_irqs = omap2_i2c2_mpu_irqs,
  966. .sdma_reqs = omap2_i2c2_sdma_reqs,
  967. .main_clk = "i2c2_fck",
  968. .prcm = {
  969. .omap2 = {
  970. .module_offs = CORE_MOD,
  971. .prcm_reg_id = 1,
  972. .module_bit = OMAP2420_EN_I2C2_SHIFT,
  973. .idlest_reg_id = 1,
  974. .idlest_idle_bit = OMAP2420_ST_I2C2_SHIFT,
  975. },
  976. },
  977. .slaves = omap2420_i2c2_slaves,
  978. .slaves_cnt = ARRAY_SIZE(omap2420_i2c2_slaves),
  979. .class = &i2c_class,
  980. .dev_attr = &i2c_dev_attr,
  981. .flags = HWMOD_16BIT_REG,
  982. };
  983. /* l4_wkup -> gpio1 */
  984. static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
  985. {
  986. .pa_start = 0x48018000,
  987. .pa_end = 0x480181ff,
  988. .flags = ADDR_TYPE_RT
  989. },
  990. { }
  991. };
  992. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
  993. .master = &omap2420_l4_wkup_hwmod,
  994. .slave = &omap2420_gpio1_hwmod,
  995. .clk = "gpios_ick",
  996. .addr = omap2420_gpio1_addr_space,
  997. .user = OCP_USER_MPU | OCP_USER_SDMA,
  998. };
  999. /* l4_wkup -> gpio2 */
  1000. static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
  1001. {
  1002. .pa_start = 0x4801a000,
  1003. .pa_end = 0x4801a1ff,
  1004. .flags = ADDR_TYPE_RT
  1005. },
  1006. { }
  1007. };
  1008. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
  1009. .master = &omap2420_l4_wkup_hwmod,
  1010. .slave = &omap2420_gpio2_hwmod,
  1011. .clk = "gpios_ick",
  1012. .addr = omap2420_gpio2_addr_space,
  1013. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1014. };
  1015. /* l4_wkup -> gpio3 */
  1016. static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
  1017. {
  1018. .pa_start = 0x4801c000,
  1019. .pa_end = 0x4801c1ff,
  1020. .flags = ADDR_TYPE_RT
  1021. },
  1022. { }
  1023. };
  1024. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
  1025. .master = &omap2420_l4_wkup_hwmod,
  1026. .slave = &omap2420_gpio3_hwmod,
  1027. .clk = "gpios_ick",
  1028. .addr = omap2420_gpio3_addr_space,
  1029. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1030. };
  1031. /* l4_wkup -> gpio4 */
  1032. static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
  1033. {
  1034. .pa_start = 0x4801e000,
  1035. .pa_end = 0x4801e1ff,
  1036. .flags = ADDR_TYPE_RT
  1037. },
  1038. { }
  1039. };
  1040. static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
  1041. .master = &omap2420_l4_wkup_hwmod,
  1042. .slave = &omap2420_gpio4_hwmod,
  1043. .clk = "gpios_ick",
  1044. .addr = omap2420_gpio4_addr_space,
  1045. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1046. };
  1047. /* gpio dev_attr */
  1048. static struct omap_gpio_dev_attr gpio_dev_attr = {
  1049. .bank_width = 32,
  1050. .dbck_flag = false,
  1051. };
  1052. /* gpio1 */
  1053. static struct omap_hwmod_ocp_if *omap2420_gpio1_slaves[] = {
  1054. &omap2420_l4_wkup__gpio1,
  1055. };
  1056. static struct omap_hwmod omap2420_gpio1_hwmod = {
  1057. .name = "gpio1",
  1058. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  1059. .mpu_irqs = omap2_gpio1_irqs,
  1060. .main_clk = "gpios_fck",
  1061. .prcm = {
  1062. .omap2 = {
  1063. .prcm_reg_id = 1,
  1064. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  1065. .module_offs = WKUP_MOD,
  1066. .idlest_reg_id = 1,
  1067. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  1068. },
  1069. },
  1070. .slaves = omap2420_gpio1_slaves,
  1071. .slaves_cnt = ARRAY_SIZE(omap2420_gpio1_slaves),
  1072. .class = &omap2xxx_gpio_hwmod_class,
  1073. .dev_attr = &gpio_dev_attr,
  1074. };
  1075. /* gpio2 */
  1076. static struct omap_hwmod_ocp_if *omap2420_gpio2_slaves[] = {
  1077. &omap2420_l4_wkup__gpio2,
  1078. };
  1079. static struct omap_hwmod omap2420_gpio2_hwmod = {
  1080. .name = "gpio2",
  1081. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  1082. .mpu_irqs = omap2_gpio2_irqs,
  1083. .main_clk = "gpios_fck",
  1084. .prcm = {
  1085. .omap2 = {
  1086. .prcm_reg_id = 1,
  1087. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  1088. .module_offs = WKUP_MOD,
  1089. .idlest_reg_id = 1,
  1090. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  1091. },
  1092. },
  1093. .slaves = omap2420_gpio2_slaves,
  1094. .slaves_cnt = ARRAY_SIZE(omap2420_gpio2_slaves),
  1095. .class = &omap2xxx_gpio_hwmod_class,
  1096. .dev_attr = &gpio_dev_attr,
  1097. };
  1098. /* gpio3 */
  1099. static struct omap_hwmod_ocp_if *omap2420_gpio3_slaves[] = {
  1100. &omap2420_l4_wkup__gpio3,
  1101. };
  1102. static struct omap_hwmod omap2420_gpio3_hwmod = {
  1103. .name = "gpio3",
  1104. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  1105. .mpu_irqs = omap2_gpio3_irqs,
  1106. .main_clk = "gpios_fck",
  1107. .prcm = {
  1108. .omap2 = {
  1109. .prcm_reg_id = 1,
  1110. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  1111. .module_offs = WKUP_MOD,
  1112. .idlest_reg_id = 1,
  1113. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  1114. },
  1115. },
  1116. .slaves = omap2420_gpio3_slaves,
  1117. .slaves_cnt = ARRAY_SIZE(omap2420_gpio3_slaves),
  1118. .class = &omap2xxx_gpio_hwmod_class,
  1119. .dev_attr = &gpio_dev_attr,
  1120. };
  1121. /* gpio4 */
  1122. static struct omap_hwmod_ocp_if *omap2420_gpio4_slaves[] = {
  1123. &omap2420_l4_wkup__gpio4,
  1124. };
  1125. static struct omap_hwmod omap2420_gpio4_hwmod = {
  1126. .name = "gpio4",
  1127. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  1128. .mpu_irqs = omap2_gpio4_irqs,
  1129. .main_clk = "gpios_fck",
  1130. .prcm = {
  1131. .omap2 = {
  1132. .prcm_reg_id = 1,
  1133. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  1134. .module_offs = WKUP_MOD,
  1135. .idlest_reg_id = 1,
  1136. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  1137. },
  1138. },
  1139. .slaves = omap2420_gpio4_slaves,
  1140. .slaves_cnt = ARRAY_SIZE(omap2420_gpio4_slaves),
  1141. .class = &omap2xxx_gpio_hwmod_class,
  1142. .dev_attr = &gpio_dev_attr,
  1143. };
  1144. /* dma attributes */
  1145. static struct omap_dma_dev_attr dma_dev_attr = {
  1146. .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
  1147. IS_CSSA_32 | IS_CDSA_32,
  1148. .lch_count = 32,
  1149. };
  1150. /* dma_system -> L3 */
  1151. static struct omap_hwmod_ocp_if omap2420_dma_system__l3 = {
  1152. .master = &omap2420_dma_system_hwmod,
  1153. .slave = &omap2420_l3_main_hwmod,
  1154. .clk = "core_l3_ck",
  1155. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1156. };
  1157. /* dma_system master ports */
  1158. static struct omap_hwmod_ocp_if *omap2420_dma_system_masters[] = {
  1159. &omap2420_dma_system__l3,
  1160. };
  1161. /* l4_core -> dma_system */
  1162. static struct omap_hwmod_ocp_if omap2420_l4_core__dma_system = {
  1163. .master = &omap2420_l4_core_hwmod,
  1164. .slave = &omap2420_dma_system_hwmod,
  1165. .clk = "sdma_ick",
  1166. .addr = omap2_dma_system_addrs,
  1167. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1168. };
  1169. /* dma_system slave ports */
  1170. static struct omap_hwmod_ocp_if *omap2420_dma_system_slaves[] = {
  1171. &omap2420_l4_core__dma_system,
  1172. };
  1173. static struct omap_hwmod omap2420_dma_system_hwmod = {
  1174. .name = "dma",
  1175. .class = &omap2xxx_dma_hwmod_class,
  1176. .mpu_irqs = omap2_dma_system_irqs,
  1177. .main_clk = "core_l3_ck",
  1178. .slaves = omap2420_dma_system_slaves,
  1179. .slaves_cnt = ARRAY_SIZE(omap2420_dma_system_slaves),
  1180. .masters = omap2420_dma_system_masters,
  1181. .masters_cnt = ARRAY_SIZE(omap2420_dma_system_masters),
  1182. .dev_attr = &dma_dev_attr,
  1183. .flags = HWMOD_NO_IDLEST,
  1184. };
  1185. /* mailbox */
  1186. static struct omap_hwmod omap2420_mailbox_hwmod;
  1187. static struct omap_hwmod_irq_info omap2420_mailbox_irqs[] = {
  1188. { .name = "dsp", .irq = 26 },
  1189. { .name = "iva", .irq = 34 },
  1190. { .irq = -1 }
  1191. };
  1192. /* l4_core -> mailbox */
  1193. static struct omap_hwmod_ocp_if omap2420_l4_core__mailbox = {
  1194. .master = &omap2420_l4_core_hwmod,
  1195. .slave = &omap2420_mailbox_hwmod,
  1196. .addr = omap2_mailbox_addrs,
  1197. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1198. };
  1199. /* mailbox slave ports */
  1200. static struct omap_hwmod_ocp_if *omap2420_mailbox_slaves[] = {
  1201. &omap2420_l4_core__mailbox,
  1202. };
  1203. static struct omap_hwmod omap2420_mailbox_hwmod = {
  1204. .name = "mailbox",
  1205. .class = &omap2xxx_mailbox_hwmod_class,
  1206. .mpu_irqs = omap2420_mailbox_irqs,
  1207. .main_clk = "mailboxes_ick",
  1208. .prcm = {
  1209. .omap2 = {
  1210. .prcm_reg_id = 1,
  1211. .module_bit = OMAP24XX_EN_MAILBOXES_SHIFT,
  1212. .module_offs = CORE_MOD,
  1213. .idlest_reg_id = 1,
  1214. .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
  1215. },
  1216. },
  1217. .slaves = omap2420_mailbox_slaves,
  1218. .slaves_cnt = ARRAY_SIZE(omap2420_mailbox_slaves),
  1219. };
  1220. /* mcspi1 */
  1221. static struct omap_hwmod_ocp_if *omap2420_mcspi1_slaves[] = {
  1222. &omap2420_l4_core__mcspi1,
  1223. };
  1224. static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
  1225. .num_chipselect = 4,
  1226. };
  1227. static struct omap_hwmod omap2420_mcspi1_hwmod = {
  1228. .name = "mcspi1_hwmod",
  1229. .mpu_irqs = omap2_mcspi1_mpu_irqs,
  1230. .sdma_reqs = omap2_mcspi1_sdma_reqs,
  1231. .main_clk = "mcspi1_fck",
  1232. .prcm = {
  1233. .omap2 = {
  1234. .module_offs = CORE_MOD,
  1235. .prcm_reg_id = 1,
  1236. .module_bit = OMAP24XX_EN_MCSPI1_SHIFT,
  1237. .idlest_reg_id = 1,
  1238. .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
  1239. },
  1240. },
  1241. .slaves = omap2420_mcspi1_slaves,
  1242. .slaves_cnt = ARRAY_SIZE(omap2420_mcspi1_slaves),
  1243. .class = &omap2xxx_mcspi_class,
  1244. .dev_attr = &omap_mcspi1_dev_attr,
  1245. };
  1246. /* mcspi2 */
  1247. static struct omap_hwmod_ocp_if *omap2420_mcspi2_slaves[] = {
  1248. &omap2420_l4_core__mcspi2,
  1249. };
  1250. static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
  1251. .num_chipselect = 2,
  1252. };
  1253. static struct omap_hwmod omap2420_mcspi2_hwmod = {
  1254. .name = "mcspi2_hwmod",
  1255. .mpu_irqs = omap2_mcspi2_mpu_irqs,
  1256. .sdma_reqs = omap2_mcspi2_sdma_reqs,
  1257. .main_clk = "mcspi2_fck",
  1258. .prcm = {
  1259. .omap2 = {
  1260. .module_offs = CORE_MOD,
  1261. .prcm_reg_id = 1,
  1262. .module_bit = OMAP24XX_EN_MCSPI2_SHIFT,
  1263. .idlest_reg_id = 1,
  1264. .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
  1265. },
  1266. },
  1267. .slaves = omap2420_mcspi2_slaves,
  1268. .slaves_cnt = ARRAY_SIZE(omap2420_mcspi2_slaves),
  1269. .class = &omap2xxx_mcspi_class,
  1270. .dev_attr = &omap_mcspi2_dev_attr,
  1271. };
  1272. /*
  1273. * 'mcbsp' class
  1274. * multi channel buffered serial port controller
  1275. */
  1276. static struct omap_hwmod_class omap2420_mcbsp_hwmod_class = {
  1277. .name = "mcbsp",
  1278. };
  1279. /* mcbsp1 */
  1280. static struct omap_hwmod_irq_info omap2420_mcbsp1_irqs[] = {
  1281. { .name = "tx", .irq = 59 },
  1282. { .name = "rx", .irq = 60 },
  1283. { .irq = -1 }
  1284. };
  1285. /* l4_core -> mcbsp1 */
  1286. static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp1 = {
  1287. .master = &omap2420_l4_core_hwmod,
  1288. .slave = &omap2420_mcbsp1_hwmod,
  1289. .clk = "mcbsp1_ick",
  1290. .addr = omap2_mcbsp1_addrs,
  1291. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1292. };
  1293. /* mcbsp1 slave ports */
  1294. static struct omap_hwmod_ocp_if *omap2420_mcbsp1_slaves[] = {
  1295. &omap2420_l4_core__mcbsp1,
  1296. };
  1297. static struct omap_hwmod omap2420_mcbsp1_hwmod = {
  1298. .name = "mcbsp1",
  1299. .class = &omap2420_mcbsp_hwmod_class,
  1300. .mpu_irqs = omap2420_mcbsp1_irqs,
  1301. .sdma_reqs = omap2_mcbsp1_sdma_reqs,
  1302. .main_clk = "mcbsp1_fck",
  1303. .prcm = {
  1304. .omap2 = {
  1305. .prcm_reg_id = 1,
  1306. .module_bit = OMAP24XX_EN_MCBSP1_SHIFT,
  1307. .module_offs = CORE_MOD,
  1308. .idlest_reg_id = 1,
  1309. .idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
  1310. },
  1311. },
  1312. .slaves = omap2420_mcbsp1_slaves,
  1313. .slaves_cnt = ARRAY_SIZE(omap2420_mcbsp1_slaves),
  1314. };
  1315. /* mcbsp2 */
  1316. static struct omap_hwmod_irq_info omap2420_mcbsp2_irqs[] = {
  1317. { .name = "tx", .irq = 62 },
  1318. { .name = "rx", .irq = 63 },
  1319. { .irq = -1 }
  1320. };
  1321. /* l4_core -> mcbsp2 */
  1322. static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp2 = {
  1323. .master = &omap2420_l4_core_hwmod,
  1324. .slave = &omap2420_mcbsp2_hwmod,
  1325. .clk = "mcbsp2_ick",
  1326. .addr = omap2xxx_mcbsp2_addrs,
  1327. .user = OCP_USER_MPU | OCP_USER_SDMA,
  1328. };
  1329. /* mcbsp2 slave ports */
  1330. static struct omap_hwmod_ocp_if *omap2420_mcbsp2_slaves[] = {
  1331. &omap2420_l4_core__mcbsp2,
  1332. };
  1333. static struct omap_hwmod omap2420_mcbsp2_hwmod = {
  1334. .name = "mcbsp2",
  1335. .class = &omap2420_mcbsp_hwmod_class,
  1336. .mpu_irqs = omap2420_mcbsp2_irqs,
  1337. .sdma_reqs = omap2_mcbsp2_sdma_reqs,
  1338. .main_clk = "mcbsp2_fck",
  1339. .prcm = {
  1340. .omap2 = {
  1341. .prcm_reg_id = 1,
  1342. .module_bit = OMAP24XX_EN_MCBSP2_SHIFT,
  1343. .module_offs = CORE_MOD,
  1344. .idlest_reg_id = 1,
  1345. .idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
  1346. },
  1347. },
  1348. .slaves = omap2420_mcbsp2_slaves,
  1349. .slaves_cnt = ARRAY_SIZE(omap2420_mcbsp2_slaves),
  1350. };
  1351. static __initdata struct omap_hwmod *omap2420_hwmods[] = {
  1352. &omap2420_l3_main_hwmod,
  1353. &omap2420_l4_core_hwmod,
  1354. &omap2420_l4_wkup_hwmod,
  1355. &omap2420_mpu_hwmod,
  1356. &omap2420_iva_hwmod,
  1357. &omap2420_timer1_hwmod,
  1358. &omap2420_timer2_hwmod,
  1359. &omap2420_timer3_hwmod,
  1360. &omap2420_timer4_hwmod,
  1361. &omap2420_timer5_hwmod,
  1362. &omap2420_timer6_hwmod,
  1363. &omap2420_timer7_hwmod,
  1364. &omap2420_timer8_hwmod,
  1365. &omap2420_timer9_hwmod,
  1366. &omap2420_timer10_hwmod,
  1367. &omap2420_timer11_hwmod,
  1368. &omap2420_timer12_hwmod,
  1369. &omap2420_wd_timer2_hwmod,
  1370. &omap2420_uart1_hwmod,
  1371. &omap2420_uart2_hwmod,
  1372. &omap2420_uart3_hwmod,
  1373. /* dss class */
  1374. &omap2420_dss_core_hwmod,
  1375. &omap2420_dss_dispc_hwmod,
  1376. &omap2420_dss_rfbi_hwmod,
  1377. &omap2420_dss_venc_hwmod,
  1378. /* i2c class */
  1379. &omap2420_i2c1_hwmod,
  1380. &omap2420_i2c2_hwmod,
  1381. /* gpio class */
  1382. &omap2420_gpio1_hwmod,
  1383. &omap2420_gpio2_hwmod,
  1384. &omap2420_gpio3_hwmod,
  1385. &omap2420_gpio4_hwmod,
  1386. /* dma_system class*/
  1387. &omap2420_dma_system_hwmod,
  1388. /* mailbox class */
  1389. &omap2420_mailbox_hwmod,
  1390. /* mcbsp class */
  1391. &omap2420_mcbsp1_hwmod,
  1392. &omap2420_mcbsp2_hwmod,
  1393. /* mcspi class */
  1394. &omap2420_mcspi1_hwmod,
  1395. &omap2420_mcspi2_hwmod,
  1396. NULL,
  1397. };
  1398. int __init omap2420_hwmod_init(void)
  1399. {
  1400. return omap_hwmod_register(omap2420_hwmods);
  1401. }