omap_hwmod_43xx_data.c 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013
  1. /*
  2. * Copyright (C) 2013 Texas Instruments Incorporated
  3. *
  4. * Hwmod present only in AM43x and those that differ other than register
  5. * offsets as compared to AM335x.
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License as
  9. * published by the Free Software Foundation version 2.
  10. *
  11. * This program is distributed "as is" WITHOUT ANY WARRANTY of any
  12. * kind, whether express or implied; without even the implied warranty
  13. * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. */
  16. #include "omap_hwmod.h"
  17. #include "omap_hwmod_33xx_43xx_common_data.h"
  18. #include "prcm43xx.h"
  19. #include "omap_hwmod_common_data.h"
  20. #include "hdq1w.h"
  21. /* IP blocks */
  22. static struct omap_hwmod am43xx_emif_hwmod = {
  23. .name = "emif",
  24. .class = &am33xx_emif_hwmod_class,
  25. .clkdm_name = "emif_clkdm",
  26. .flags = HWMOD_INIT_NO_IDLE,
  27. .main_clk = "dpll_ddr_m2_ck",
  28. .prcm = {
  29. .omap4 = {
  30. .clkctrl_offs = AM43XX_CM_PER_EMIF_CLKCTRL_OFFSET,
  31. .modulemode = MODULEMODE_SWCTRL,
  32. },
  33. },
  34. };
  35. static struct omap_hwmod am43xx_l4_hs_hwmod = {
  36. .name = "l4_hs",
  37. .class = &am33xx_l4_hwmod_class,
  38. .clkdm_name = "l3_clkdm",
  39. .flags = HWMOD_INIT_NO_IDLE,
  40. .main_clk = "l4hs_gclk",
  41. .prcm = {
  42. .omap4 = {
  43. .clkctrl_offs = AM43XX_CM_PER_L4HS_CLKCTRL_OFFSET,
  44. .modulemode = MODULEMODE_SWCTRL,
  45. },
  46. },
  47. };
  48. static struct omap_hwmod_rst_info am33xx_wkup_m3_resets[] = {
  49. { .name = "wkup_m3", .rst_shift = 3, .st_shift = 5 },
  50. };
  51. static struct omap_hwmod am43xx_wkup_m3_hwmod = {
  52. .name = "wkup_m3",
  53. .class = &am33xx_wkup_m3_hwmod_class,
  54. .clkdm_name = "l4_wkup_aon_clkdm",
  55. /* Keep hardreset asserted */
  56. .flags = HWMOD_INIT_NO_RESET | HWMOD_NO_IDLEST,
  57. .main_clk = "sys_clkin_ck",
  58. .prcm = {
  59. .omap4 = {
  60. .clkctrl_offs = AM43XX_CM_WKUP_WKUP_M3_CLKCTRL_OFFSET,
  61. .rstctrl_offs = AM43XX_RM_WKUP_RSTCTRL_OFFSET,
  62. .rstst_offs = AM43XX_RM_WKUP_RSTST_OFFSET,
  63. .modulemode = MODULEMODE_SWCTRL,
  64. },
  65. },
  66. .rst_lines = am33xx_wkup_m3_resets,
  67. .rst_lines_cnt = ARRAY_SIZE(am33xx_wkup_m3_resets),
  68. };
  69. static struct omap_hwmod am43xx_control_hwmod = {
  70. .name = "control",
  71. .class = &am33xx_control_hwmod_class,
  72. .clkdm_name = "l4_wkup_clkdm",
  73. .flags = HWMOD_INIT_NO_IDLE,
  74. .main_clk = "sys_clkin_ck",
  75. .prcm = {
  76. .omap4 = {
  77. .clkctrl_offs = AM43XX_CM_WKUP_CONTROL_CLKCTRL_OFFSET,
  78. .modulemode = MODULEMODE_SWCTRL,
  79. },
  80. },
  81. };
  82. static struct omap_hwmod_opt_clk gpio0_opt_clks[] = {
  83. { .role = "dbclk", .clk = "gpio0_dbclk" },
  84. };
  85. static struct omap_hwmod am43xx_gpio0_hwmod = {
  86. .name = "gpio1",
  87. .class = &am33xx_gpio_hwmod_class,
  88. .clkdm_name = "l4_wkup_clkdm",
  89. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  90. .main_clk = "sys_clkin_ck",
  91. .prcm = {
  92. .omap4 = {
  93. .clkctrl_offs = AM43XX_CM_WKUP_GPIO0_CLKCTRL_OFFSET,
  94. .modulemode = MODULEMODE_SWCTRL,
  95. },
  96. },
  97. .opt_clks = gpio0_opt_clks,
  98. .opt_clks_cnt = ARRAY_SIZE(gpio0_opt_clks),
  99. };
  100. static struct omap_hwmod_class_sysconfig am43xx_synctimer_sysc = {
  101. .rev_offs = 0x0,
  102. .sysc_offs = 0x4,
  103. .sysc_flags = SYSC_HAS_SIDLEMODE,
  104. .idlemodes = (SIDLE_FORCE | SIDLE_NO),
  105. .sysc_fields = &omap_hwmod_sysc_type1,
  106. };
  107. static struct omap_hwmod_class am43xx_synctimer_hwmod_class = {
  108. .name = "synctimer",
  109. .sysc = &am43xx_synctimer_sysc,
  110. };
  111. static struct omap_hwmod am43xx_synctimer_hwmod = {
  112. .name = "counter_32k",
  113. .class = &am43xx_synctimer_hwmod_class,
  114. .clkdm_name = "l4_wkup_aon_clkdm",
  115. .flags = HWMOD_SWSUP_SIDLE,
  116. .main_clk = "synctimer_32kclk",
  117. .prcm = {
  118. .omap4 = {
  119. .clkctrl_offs = AM43XX_CM_WKUP_SYNCTIMER_CLKCTRL_OFFSET,
  120. .modulemode = MODULEMODE_SWCTRL,
  121. },
  122. },
  123. };
  124. static struct omap_hwmod am43xx_timer8_hwmod = {
  125. .name = "timer8",
  126. .class = &am33xx_timer_hwmod_class,
  127. .clkdm_name = "l4ls_clkdm",
  128. .main_clk = "timer8_fck",
  129. .prcm = {
  130. .omap4 = {
  131. .clkctrl_offs = AM43XX_CM_PER_TIMER8_CLKCTRL_OFFSET,
  132. .modulemode = MODULEMODE_SWCTRL,
  133. },
  134. },
  135. };
  136. static struct omap_hwmod am43xx_timer9_hwmod = {
  137. .name = "timer9",
  138. .class = &am33xx_timer_hwmod_class,
  139. .clkdm_name = "l4ls_clkdm",
  140. .main_clk = "timer9_fck",
  141. .prcm = {
  142. .omap4 = {
  143. .clkctrl_offs = AM43XX_CM_PER_TIMER9_CLKCTRL_OFFSET,
  144. .modulemode = MODULEMODE_SWCTRL,
  145. },
  146. },
  147. };
  148. static struct omap_hwmod am43xx_timer10_hwmod = {
  149. .name = "timer10",
  150. .class = &am33xx_timer_hwmod_class,
  151. .clkdm_name = "l4ls_clkdm",
  152. .main_clk = "timer10_fck",
  153. .prcm = {
  154. .omap4 = {
  155. .clkctrl_offs = AM43XX_CM_PER_TIMER10_CLKCTRL_OFFSET,
  156. .modulemode = MODULEMODE_SWCTRL,
  157. },
  158. },
  159. };
  160. static struct omap_hwmod am43xx_timer11_hwmod = {
  161. .name = "timer11",
  162. .class = &am33xx_timer_hwmod_class,
  163. .clkdm_name = "l4ls_clkdm",
  164. .main_clk = "timer11_fck",
  165. .prcm = {
  166. .omap4 = {
  167. .clkctrl_offs = AM43XX_CM_PER_TIMER11_CLKCTRL_OFFSET,
  168. .modulemode = MODULEMODE_SWCTRL,
  169. },
  170. },
  171. };
  172. static struct omap_hwmod am43xx_epwmss3_hwmod = {
  173. .name = "epwmss3",
  174. .class = &am33xx_epwmss_hwmod_class,
  175. .clkdm_name = "l4ls_clkdm",
  176. .main_clk = "l4ls_gclk",
  177. .prcm = {
  178. .omap4 = {
  179. .clkctrl_offs = AM43XX_CM_PER_EPWMSS3_CLKCTRL_OFFSET,
  180. .modulemode = MODULEMODE_SWCTRL,
  181. },
  182. },
  183. };
  184. static struct omap_hwmod am43xx_epwmss4_hwmod = {
  185. .name = "epwmss4",
  186. .class = &am33xx_epwmss_hwmod_class,
  187. .clkdm_name = "l4ls_clkdm",
  188. .main_clk = "l4ls_gclk",
  189. .prcm = {
  190. .omap4 = {
  191. .clkctrl_offs = AM43XX_CM_PER_EPWMSS4_CLKCTRL_OFFSET,
  192. .modulemode = MODULEMODE_SWCTRL,
  193. },
  194. },
  195. };
  196. static struct omap_hwmod am43xx_epwmss5_hwmod = {
  197. .name = "epwmss5",
  198. .class = &am33xx_epwmss_hwmod_class,
  199. .clkdm_name = "l4ls_clkdm",
  200. .main_clk = "l4ls_gclk",
  201. .prcm = {
  202. .omap4 = {
  203. .clkctrl_offs = AM43XX_CM_PER_EPWMSS5_CLKCTRL_OFFSET,
  204. .modulemode = MODULEMODE_SWCTRL,
  205. },
  206. },
  207. };
  208. static struct omap_hwmod am43xx_spi2_hwmod = {
  209. .name = "spi2",
  210. .class = &am33xx_spi_hwmod_class,
  211. .clkdm_name = "l4ls_clkdm",
  212. .main_clk = "dpll_per_m2_div4_ck",
  213. .prcm = {
  214. .omap4 = {
  215. .clkctrl_offs = AM43XX_CM_PER_SPI2_CLKCTRL_OFFSET,
  216. .modulemode = MODULEMODE_SWCTRL,
  217. },
  218. },
  219. };
  220. static struct omap_hwmod am43xx_spi3_hwmod = {
  221. .name = "spi3",
  222. .class = &am33xx_spi_hwmod_class,
  223. .clkdm_name = "l4ls_clkdm",
  224. .main_clk = "dpll_per_m2_div4_ck",
  225. .prcm = {
  226. .omap4 = {
  227. .clkctrl_offs = AM43XX_CM_PER_SPI3_CLKCTRL_OFFSET,
  228. .modulemode = MODULEMODE_SWCTRL,
  229. },
  230. },
  231. };
  232. static struct omap_hwmod am43xx_spi4_hwmod = {
  233. .name = "spi4",
  234. .class = &am33xx_spi_hwmod_class,
  235. .clkdm_name = "l4ls_clkdm",
  236. .main_clk = "dpll_per_m2_div4_ck",
  237. .prcm = {
  238. .omap4 = {
  239. .clkctrl_offs = AM43XX_CM_PER_SPI4_CLKCTRL_OFFSET,
  240. .modulemode = MODULEMODE_SWCTRL,
  241. },
  242. },
  243. };
  244. static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
  245. { .role = "dbclk", .clk = "gpio4_dbclk" },
  246. };
  247. static struct omap_hwmod am43xx_gpio4_hwmod = {
  248. .name = "gpio5",
  249. .class = &am33xx_gpio_hwmod_class,
  250. .clkdm_name = "l4ls_clkdm",
  251. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  252. .main_clk = "l4ls_gclk",
  253. .prcm = {
  254. .omap4 = {
  255. .clkctrl_offs = AM43XX_CM_PER_GPIO4_CLKCTRL_OFFSET,
  256. .modulemode = MODULEMODE_SWCTRL,
  257. },
  258. },
  259. .opt_clks = gpio4_opt_clks,
  260. .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
  261. };
  262. static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
  263. { .role = "dbclk", .clk = "gpio5_dbclk" },
  264. };
  265. static struct omap_hwmod am43xx_gpio5_hwmod = {
  266. .name = "gpio6",
  267. .class = &am33xx_gpio_hwmod_class,
  268. .clkdm_name = "l4ls_clkdm",
  269. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  270. .main_clk = "l4ls_gclk",
  271. .prcm = {
  272. .omap4 = {
  273. .clkctrl_offs = AM43XX_CM_PER_GPIO5_CLKCTRL_OFFSET,
  274. .modulemode = MODULEMODE_SWCTRL,
  275. },
  276. },
  277. .opt_clks = gpio5_opt_clks,
  278. .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
  279. };
  280. static struct omap_hwmod_class am43xx_ocp2scp_hwmod_class = {
  281. .name = "ocp2scp",
  282. };
  283. static struct omap_hwmod am43xx_ocp2scp0_hwmod = {
  284. .name = "ocp2scp0",
  285. .class = &am43xx_ocp2scp_hwmod_class,
  286. .clkdm_name = "l4ls_clkdm",
  287. .main_clk = "l4ls_gclk",
  288. .prcm = {
  289. .omap4 = {
  290. .clkctrl_offs = AM43XX_CM_PER_USBPHYOCP2SCP0_CLKCTRL_OFFSET,
  291. .modulemode = MODULEMODE_SWCTRL,
  292. },
  293. },
  294. };
  295. static struct omap_hwmod am43xx_ocp2scp1_hwmod = {
  296. .name = "ocp2scp1",
  297. .class = &am43xx_ocp2scp_hwmod_class,
  298. .clkdm_name = "l4ls_clkdm",
  299. .main_clk = "l4ls_gclk",
  300. .prcm = {
  301. .omap4 = {
  302. .clkctrl_offs = AM43XX_CM_PER_USBPHYOCP2SCP1_CLKCTRL_OFFSET,
  303. .modulemode = MODULEMODE_SWCTRL,
  304. },
  305. },
  306. };
  307. static struct omap_hwmod_class_sysconfig am43xx_usb_otg_ss_sysc = {
  308. .rev_offs = 0x0000,
  309. .sysc_offs = 0x0010,
  310. .sysc_flags = (SYSC_HAS_DMADISABLE | SYSC_HAS_MIDLEMODE |
  311. SYSC_HAS_SIDLEMODE),
  312. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  313. SIDLE_SMART_WKUP | MSTANDBY_FORCE |
  314. MSTANDBY_NO | MSTANDBY_SMART |
  315. MSTANDBY_SMART_WKUP),
  316. .sysc_fields = &omap_hwmod_sysc_type2,
  317. };
  318. static struct omap_hwmod_class am43xx_usb_otg_ss_hwmod_class = {
  319. .name = "usb_otg_ss",
  320. .sysc = &am43xx_usb_otg_ss_sysc,
  321. };
  322. static struct omap_hwmod am43xx_usb_otg_ss0_hwmod = {
  323. .name = "usb_otg_ss0",
  324. .class = &am43xx_usb_otg_ss_hwmod_class,
  325. .clkdm_name = "l3s_clkdm",
  326. .main_clk = "l3s_gclk",
  327. .prcm = {
  328. .omap4 = {
  329. .clkctrl_offs = AM43XX_CM_PER_USB_OTG_SS0_CLKCTRL_OFFSET,
  330. .modulemode = MODULEMODE_SWCTRL,
  331. },
  332. },
  333. };
  334. static struct omap_hwmod am43xx_usb_otg_ss1_hwmod = {
  335. .name = "usb_otg_ss1",
  336. .class = &am43xx_usb_otg_ss_hwmod_class,
  337. .clkdm_name = "l3s_clkdm",
  338. .main_clk = "l3s_gclk",
  339. .prcm = {
  340. .omap4 = {
  341. .clkctrl_offs = AM43XX_CM_PER_USB_OTG_SS1_CLKCTRL_OFFSET,
  342. .modulemode = MODULEMODE_SWCTRL,
  343. },
  344. },
  345. };
  346. static struct omap_hwmod_class_sysconfig am43xx_qspi_sysc = {
  347. .rev_offs = 0,
  348. .sysc_offs = 0x0010,
  349. .sysc_flags = SYSC_HAS_SIDLEMODE,
  350. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  351. SIDLE_SMART_WKUP),
  352. .sysc_fields = &omap_hwmod_sysc_type2,
  353. };
  354. static struct omap_hwmod_class am43xx_qspi_hwmod_class = {
  355. .name = "qspi",
  356. .sysc = &am43xx_qspi_sysc,
  357. };
  358. static struct omap_hwmod am43xx_qspi_hwmod = {
  359. .name = "qspi",
  360. .class = &am43xx_qspi_hwmod_class,
  361. .clkdm_name = "l3s_clkdm",
  362. .main_clk = "l3s_gclk",
  363. .prcm = {
  364. .omap4 = {
  365. .clkctrl_offs = AM43XX_CM_PER_QSPI_CLKCTRL_OFFSET,
  366. .modulemode = MODULEMODE_SWCTRL,
  367. },
  368. },
  369. };
  370. /*
  371. * 'adc/tsc' class
  372. * TouchScreen Controller (Analog-To-Digital Converter)
  373. */
  374. static struct omap_hwmod_class_sysconfig am43xx_adc_tsc_sysc = {
  375. .rev_offs = 0x00,
  376. .sysc_offs = 0x10,
  377. .sysc_flags = SYSC_HAS_SIDLEMODE,
  378. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  379. SIDLE_SMART_WKUP),
  380. .sysc_fields = &omap_hwmod_sysc_type2,
  381. };
  382. static struct omap_hwmod_class am43xx_adc_tsc_hwmod_class = {
  383. .name = "adc_tsc",
  384. .sysc = &am43xx_adc_tsc_sysc,
  385. };
  386. static struct omap_hwmod am43xx_adc_tsc_hwmod = {
  387. .name = "adc_tsc",
  388. .class = &am43xx_adc_tsc_hwmod_class,
  389. .clkdm_name = "l3s_tsc_clkdm",
  390. .main_clk = "adc_tsc_fck",
  391. .prcm = {
  392. .omap4 = {
  393. .clkctrl_offs = AM43XX_CM_WKUP_ADC_TSC_CLKCTRL_OFFSET,
  394. .modulemode = MODULEMODE_SWCTRL,
  395. },
  396. },
  397. };
  398. static struct omap_hwmod_class_sysconfig am43xx_des_sysc = {
  399. .rev_offs = 0x30,
  400. .sysc_offs = 0x34,
  401. .syss_offs = 0x38,
  402. .sysc_flags = SYSS_HAS_RESET_STATUS,
  403. };
  404. static struct omap_hwmod_class am43xx_des_hwmod_class = {
  405. .name = "des",
  406. .sysc = &am43xx_des_sysc,
  407. };
  408. static struct omap_hwmod am43xx_des_hwmod = {
  409. .name = "des",
  410. .class = &am43xx_des_hwmod_class,
  411. .clkdm_name = "l3_clkdm",
  412. .main_clk = "l3_gclk",
  413. .prcm = {
  414. .omap4 = {
  415. .clkctrl_offs = AM43XX_CM_PER_DES_CLKCTRL_OFFSET,
  416. .modulemode = MODULEMODE_SWCTRL,
  417. },
  418. },
  419. };
  420. /* dss */
  421. static struct omap_hwmod am43xx_dss_core_hwmod = {
  422. .name = "dss_core",
  423. .class = &omap2_dss_hwmod_class,
  424. .clkdm_name = "dss_clkdm",
  425. .main_clk = "disp_clk",
  426. .prcm = {
  427. .omap4 = {
  428. .clkctrl_offs = AM43XX_CM_PER_DSS_CLKCTRL_OFFSET,
  429. .modulemode = MODULEMODE_SWCTRL,
  430. },
  431. },
  432. };
  433. /* dispc */
  434. static struct omap_dss_dispc_dev_attr am43xx_dss_dispc_dev_attr = {
  435. .manager_count = 1,
  436. .has_framedonetv_irq = 0
  437. };
  438. static struct omap_hwmod_class_sysconfig am43xx_dispc_sysc = {
  439. .rev_offs = 0x0000,
  440. .sysc_offs = 0x0010,
  441. .syss_offs = 0x0014,
  442. .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SOFTRESET |
  443. SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
  444. SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_MIDLEMODE),
  445. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  446. MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
  447. .sysc_fields = &omap_hwmod_sysc_type1,
  448. };
  449. static struct omap_hwmod_class am43xx_dispc_hwmod_class = {
  450. .name = "dispc",
  451. .sysc = &am43xx_dispc_sysc,
  452. };
  453. static struct omap_hwmod am43xx_dss_dispc_hwmod = {
  454. .name = "dss_dispc",
  455. .class = &am43xx_dispc_hwmod_class,
  456. .clkdm_name = "dss_clkdm",
  457. .main_clk = "disp_clk",
  458. .prcm = {
  459. .omap4 = {
  460. .clkctrl_offs = AM43XX_CM_PER_DSS_CLKCTRL_OFFSET,
  461. },
  462. },
  463. .dev_attr = &am43xx_dss_dispc_dev_attr,
  464. .parent_hwmod = &am43xx_dss_core_hwmod,
  465. };
  466. /* rfbi */
  467. static struct omap_hwmod am43xx_dss_rfbi_hwmod = {
  468. .name = "dss_rfbi",
  469. .class = &omap2_rfbi_hwmod_class,
  470. .clkdm_name = "dss_clkdm",
  471. .main_clk = "disp_clk",
  472. .prcm = {
  473. .omap4 = {
  474. .clkctrl_offs = AM43XX_CM_PER_DSS_CLKCTRL_OFFSET,
  475. },
  476. },
  477. .parent_hwmod = &am43xx_dss_core_hwmod,
  478. };
  479. /* HDQ1W */
  480. static struct omap_hwmod_class_sysconfig am43xx_hdq1w_sysc = {
  481. .rev_offs = 0x0000,
  482. .sysc_offs = 0x0014,
  483. .syss_offs = 0x0018,
  484. .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
  485. .sysc_fields = &omap_hwmod_sysc_type1,
  486. };
  487. static struct omap_hwmod_class am43xx_hdq1w_hwmod_class = {
  488. .name = "hdq1w",
  489. .sysc = &am43xx_hdq1w_sysc,
  490. .reset = &omap_hdq1w_reset,
  491. };
  492. static struct omap_hwmod am43xx_hdq1w_hwmod = {
  493. .name = "hdq1w",
  494. .class = &am43xx_hdq1w_hwmod_class,
  495. .clkdm_name = "l4ls_clkdm",
  496. .prcm = {
  497. .omap4 = {
  498. .clkctrl_offs = AM43XX_CM_PER_HDQ1W_CLKCTRL_OFFSET,
  499. .modulemode = MODULEMODE_SWCTRL,
  500. },
  501. },
  502. };
  503. static struct omap_hwmod_class_sysconfig am43xx_vpfe_sysc = {
  504. .rev_offs = 0x0,
  505. .sysc_offs = 0x104,
  506. .sysc_flags = SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE,
  507. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  508. MSTANDBY_FORCE | MSTANDBY_SMART | MSTANDBY_NO),
  509. .sysc_fields = &omap_hwmod_sysc_type2,
  510. };
  511. static struct omap_hwmod_class am43xx_vpfe_hwmod_class = {
  512. .name = "vpfe",
  513. .sysc = &am43xx_vpfe_sysc,
  514. };
  515. static struct omap_hwmod am43xx_vpfe0_hwmod = {
  516. .name = "vpfe0",
  517. .class = &am43xx_vpfe_hwmod_class,
  518. .clkdm_name = "l3s_clkdm",
  519. .prcm = {
  520. .omap4 = {
  521. .modulemode = MODULEMODE_SWCTRL,
  522. .clkctrl_offs = AM43XX_CM_PER_VPFE0_CLKCTRL_OFFSET,
  523. },
  524. },
  525. };
  526. static struct omap_hwmod am43xx_vpfe1_hwmod = {
  527. .name = "vpfe1",
  528. .class = &am43xx_vpfe_hwmod_class,
  529. .clkdm_name = "l3s_clkdm",
  530. .prcm = {
  531. .omap4 = {
  532. .modulemode = MODULEMODE_SWCTRL,
  533. .clkctrl_offs = AM43XX_CM_PER_VPFE1_CLKCTRL_OFFSET,
  534. },
  535. },
  536. };
  537. /* Interfaces */
  538. static struct omap_hwmod_ocp_if am43xx_l3_main__emif = {
  539. .master = &am33xx_l3_main_hwmod,
  540. .slave = &am43xx_emif_hwmod,
  541. .clk = "dpll_core_m4_ck",
  542. .user = OCP_USER_MPU | OCP_USER_SDMA,
  543. };
  544. static struct omap_hwmod_ocp_if am43xx_l3_main__l4_hs = {
  545. .master = &am33xx_l3_main_hwmod,
  546. .slave = &am43xx_l4_hs_hwmod,
  547. .clk = "l3s_gclk",
  548. .user = OCP_USER_MPU | OCP_USER_SDMA,
  549. };
  550. static struct omap_hwmod_ocp_if am43xx_wkup_m3__l4_wkup = {
  551. .master = &am43xx_wkup_m3_hwmod,
  552. .slave = &am33xx_l4_wkup_hwmod,
  553. .clk = "sys_clkin_ck",
  554. .user = OCP_USER_MPU | OCP_USER_SDMA,
  555. };
  556. static struct omap_hwmod_ocp_if am43xx_l4_wkup__wkup_m3 = {
  557. .master = &am33xx_l4_wkup_hwmod,
  558. .slave = &am43xx_wkup_m3_hwmod,
  559. .clk = "sys_clkin_ck",
  560. .user = OCP_USER_MPU | OCP_USER_SDMA,
  561. };
  562. static struct omap_hwmod_ocp_if am43xx_l3_main__pruss = {
  563. .master = &am33xx_l3_main_hwmod,
  564. .slave = &am33xx_pruss_hwmod,
  565. .clk = "dpll_core_m4_ck",
  566. .user = OCP_USER_MPU,
  567. };
  568. static struct omap_hwmod_ocp_if am43xx_l4_wkup__smartreflex0 = {
  569. .master = &am33xx_l4_wkup_hwmod,
  570. .slave = &am33xx_smartreflex0_hwmod,
  571. .clk = "sys_clkin_ck",
  572. .user = OCP_USER_MPU,
  573. };
  574. static struct omap_hwmod_ocp_if am43xx_l4_wkup__smartreflex1 = {
  575. .master = &am33xx_l4_wkup_hwmod,
  576. .slave = &am33xx_smartreflex1_hwmod,
  577. .clk = "sys_clkin_ck",
  578. .user = OCP_USER_MPU,
  579. };
  580. static struct omap_hwmod_ocp_if am43xx_l4_wkup__control = {
  581. .master = &am33xx_l4_wkup_hwmod,
  582. .slave = &am43xx_control_hwmod,
  583. .clk = "sys_clkin_ck",
  584. .user = OCP_USER_MPU,
  585. };
  586. static struct omap_hwmod_ocp_if am43xx_l4_wkup__i2c1 = {
  587. .master = &am33xx_l4_wkup_hwmod,
  588. .slave = &am33xx_i2c1_hwmod,
  589. .clk = "sys_clkin_ck",
  590. .user = OCP_USER_MPU,
  591. };
  592. static struct omap_hwmod_ocp_if am43xx_l4_wkup__gpio0 = {
  593. .master = &am33xx_l4_wkup_hwmod,
  594. .slave = &am43xx_gpio0_hwmod,
  595. .clk = "sys_clkin_ck",
  596. .user = OCP_USER_MPU | OCP_USER_SDMA,
  597. };
  598. static struct omap_hwmod_ocp_if am43xx_l4_wkup__adc_tsc = {
  599. .master = &am33xx_l4_wkup_hwmod,
  600. .slave = &am43xx_adc_tsc_hwmod,
  601. .clk = "dpll_core_m4_div2_ck",
  602. .user = OCP_USER_MPU,
  603. };
  604. static struct omap_hwmod_ocp_if am43xx_l4_hs__cpgmac0 = {
  605. .master = &am43xx_l4_hs_hwmod,
  606. .slave = &am33xx_cpgmac0_hwmod,
  607. .clk = "cpsw_125mhz_gclk",
  608. .user = OCP_USER_MPU,
  609. };
  610. static struct omap_hwmod_ocp_if am43xx_l4_wkup__timer1 = {
  611. .master = &am33xx_l4_wkup_hwmod,
  612. .slave = &am33xx_timer1_hwmod,
  613. .clk = "sys_clkin_ck",
  614. .user = OCP_USER_MPU,
  615. };
  616. static struct omap_hwmod_ocp_if am43xx_l4_wkup__uart1 = {
  617. .master = &am33xx_l4_wkup_hwmod,
  618. .slave = &am33xx_uart1_hwmod,
  619. .clk = "sys_clkin_ck",
  620. .user = OCP_USER_MPU,
  621. };
  622. static struct omap_hwmod_ocp_if am43xx_l4_wkup__wd_timer1 = {
  623. .master = &am33xx_l4_wkup_hwmod,
  624. .slave = &am33xx_wd_timer1_hwmod,
  625. .clk = "sys_clkin_ck",
  626. .user = OCP_USER_MPU,
  627. };
  628. static struct omap_hwmod_ocp_if am33xx_l4_wkup__synctimer = {
  629. .master = &am33xx_l4_wkup_hwmod,
  630. .slave = &am43xx_synctimer_hwmod,
  631. .clk = "sys_clkin_ck",
  632. .user = OCP_USER_MPU,
  633. };
  634. static struct omap_hwmod_ocp_if am43xx_l4_ls__timer8 = {
  635. .master = &am33xx_l4_ls_hwmod,
  636. .slave = &am43xx_timer8_hwmod,
  637. .clk = "l4ls_gclk",
  638. .user = OCP_USER_MPU,
  639. };
  640. static struct omap_hwmod_ocp_if am43xx_l4_ls__timer9 = {
  641. .master = &am33xx_l4_ls_hwmod,
  642. .slave = &am43xx_timer9_hwmod,
  643. .clk = "l4ls_gclk",
  644. .user = OCP_USER_MPU,
  645. };
  646. static struct omap_hwmod_ocp_if am43xx_l4_ls__timer10 = {
  647. .master = &am33xx_l4_ls_hwmod,
  648. .slave = &am43xx_timer10_hwmod,
  649. .clk = "l4ls_gclk",
  650. .user = OCP_USER_MPU,
  651. };
  652. static struct omap_hwmod_ocp_if am43xx_l4_ls__timer11 = {
  653. .master = &am33xx_l4_ls_hwmod,
  654. .slave = &am43xx_timer11_hwmod,
  655. .clk = "l4ls_gclk",
  656. .user = OCP_USER_MPU,
  657. };
  658. static struct omap_hwmod_ocp_if am43xx_l4_ls__epwmss3 = {
  659. .master = &am33xx_l4_ls_hwmod,
  660. .slave = &am43xx_epwmss3_hwmod,
  661. .clk = "l4ls_gclk",
  662. .user = OCP_USER_MPU,
  663. };
  664. static struct omap_hwmod_ocp_if am43xx_l4_ls__epwmss4 = {
  665. .master = &am33xx_l4_ls_hwmod,
  666. .slave = &am43xx_epwmss4_hwmod,
  667. .clk = "l4ls_gclk",
  668. .user = OCP_USER_MPU,
  669. };
  670. static struct omap_hwmod_ocp_if am43xx_l4_ls__epwmss5 = {
  671. .master = &am33xx_l4_ls_hwmod,
  672. .slave = &am43xx_epwmss5_hwmod,
  673. .clk = "l4ls_gclk",
  674. .user = OCP_USER_MPU,
  675. };
  676. static struct omap_hwmod_ocp_if am43xx_l4_ls__mcspi2 = {
  677. .master = &am33xx_l4_ls_hwmod,
  678. .slave = &am43xx_spi2_hwmod,
  679. .clk = "l4ls_gclk",
  680. .user = OCP_USER_MPU,
  681. };
  682. static struct omap_hwmod_ocp_if am43xx_l4_ls__mcspi3 = {
  683. .master = &am33xx_l4_ls_hwmod,
  684. .slave = &am43xx_spi3_hwmod,
  685. .clk = "l4ls_gclk",
  686. .user = OCP_USER_MPU,
  687. };
  688. static struct omap_hwmod_ocp_if am43xx_l4_ls__mcspi4 = {
  689. .master = &am33xx_l4_ls_hwmod,
  690. .slave = &am43xx_spi4_hwmod,
  691. .clk = "l4ls_gclk",
  692. .user = OCP_USER_MPU,
  693. };
  694. static struct omap_hwmod_ocp_if am43xx_l4_ls__gpio4 = {
  695. .master = &am33xx_l4_ls_hwmod,
  696. .slave = &am43xx_gpio4_hwmod,
  697. .clk = "l4ls_gclk",
  698. .user = OCP_USER_MPU | OCP_USER_SDMA,
  699. };
  700. static struct omap_hwmod_ocp_if am43xx_l4_ls__gpio5 = {
  701. .master = &am33xx_l4_ls_hwmod,
  702. .slave = &am43xx_gpio5_hwmod,
  703. .clk = "l4ls_gclk",
  704. .user = OCP_USER_MPU | OCP_USER_SDMA,
  705. };
  706. static struct omap_hwmod_ocp_if am43xx_l4_ls__ocp2scp0 = {
  707. .master = &am33xx_l4_ls_hwmod,
  708. .slave = &am43xx_ocp2scp0_hwmod,
  709. .clk = "l4ls_gclk",
  710. .user = OCP_USER_MPU,
  711. };
  712. static struct omap_hwmod_ocp_if am43xx_l4_ls__ocp2scp1 = {
  713. .master = &am33xx_l4_ls_hwmod,
  714. .slave = &am43xx_ocp2scp1_hwmod,
  715. .clk = "l4ls_gclk",
  716. .user = OCP_USER_MPU,
  717. };
  718. static struct omap_hwmod_ocp_if am43xx_l3_s__usbotgss0 = {
  719. .master = &am33xx_l3_s_hwmod,
  720. .slave = &am43xx_usb_otg_ss0_hwmod,
  721. .clk = "l3s_gclk",
  722. .user = OCP_USER_MPU | OCP_USER_SDMA,
  723. };
  724. static struct omap_hwmod_ocp_if am43xx_l3_s__usbotgss1 = {
  725. .master = &am33xx_l3_s_hwmod,
  726. .slave = &am43xx_usb_otg_ss1_hwmod,
  727. .clk = "l3s_gclk",
  728. .user = OCP_USER_MPU | OCP_USER_SDMA,
  729. };
  730. static struct omap_hwmod_ocp_if am43xx_l3_s__qspi = {
  731. .master = &am33xx_l3_s_hwmod,
  732. .slave = &am43xx_qspi_hwmod,
  733. .clk = "l3s_gclk",
  734. .user = OCP_USER_MPU | OCP_USER_SDMA,
  735. };
  736. static struct omap_hwmod_ocp_if am43xx_dss__l3_main = {
  737. .master = &am43xx_dss_core_hwmod,
  738. .slave = &am33xx_l3_main_hwmod,
  739. .clk = "l3_gclk",
  740. .user = OCP_USER_MPU | OCP_USER_SDMA,
  741. };
  742. static struct omap_hwmod_ocp_if am43xx_l4_ls__dss = {
  743. .master = &am33xx_l4_ls_hwmod,
  744. .slave = &am43xx_dss_core_hwmod,
  745. .clk = "l4ls_gclk",
  746. .user = OCP_USER_MPU | OCP_USER_SDMA,
  747. };
  748. static struct omap_hwmod_ocp_if am43xx_l4_ls__dss_dispc = {
  749. .master = &am33xx_l4_ls_hwmod,
  750. .slave = &am43xx_dss_dispc_hwmod,
  751. .clk = "l4ls_gclk",
  752. .user = OCP_USER_MPU | OCP_USER_SDMA,
  753. };
  754. static struct omap_hwmod_ocp_if am43xx_l4_ls__dss_rfbi = {
  755. .master = &am33xx_l4_ls_hwmod,
  756. .slave = &am43xx_dss_rfbi_hwmod,
  757. .clk = "l4ls_gclk",
  758. .user = OCP_USER_MPU | OCP_USER_SDMA,
  759. };
  760. static struct omap_hwmod_ocp_if am43xx_l4_ls__hdq1w = {
  761. .master = &am33xx_l4_ls_hwmod,
  762. .slave = &am43xx_hdq1w_hwmod,
  763. .clk = "l4ls_gclk",
  764. .user = OCP_USER_MPU | OCP_USER_SDMA,
  765. };
  766. static struct omap_hwmod_ocp_if am43xx_l3__vpfe0 = {
  767. .master = &am43xx_vpfe0_hwmod,
  768. .slave = &am33xx_l3_main_hwmod,
  769. .clk = "l3_gclk",
  770. .user = OCP_USER_MPU | OCP_USER_SDMA,
  771. };
  772. static struct omap_hwmod_ocp_if am43xx_l3__vpfe1 = {
  773. .master = &am43xx_vpfe1_hwmod,
  774. .slave = &am33xx_l3_main_hwmod,
  775. .clk = "l3_gclk",
  776. .user = OCP_USER_MPU | OCP_USER_SDMA,
  777. };
  778. static struct omap_hwmod_ocp_if am43xx_l4_ls__vpfe0 = {
  779. .master = &am33xx_l4_ls_hwmod,
  780. .slave = &am43xx_vpfe0_hwmod,
  781. .clk = "l4ls_gclk",
  782. .user = OCP_USER_MPU | OCP_USER_SDMA,
  783. };
  784. static struct omap_hwmod_ocp_if am43xx_l4_ls__vpfe1 = {
  785. .master = &am33xx_l4_ls_hwmod,
  786. .slave = &am43xx_vpfe1_hwmod,
  787. .clk = "l4ls_gclk",
  788. .user = OCP_USER_MPU | OCP_USER_SDMA,
  789. };
  790. static struct omap_hwmod_ocp_if am43xx_l3_main__des = {
  791. .master = &am33xx_l3_main_hwmod,
  792. .slave = &am43xx_des_hwmod,
  793. .clk = "l3_gclk",
  794. .user = OCP_USER_MPU,
  795. };
  796. static struct omap_hwmod_ocp_if *am43xx_hwmod_ocp_ifs[] __initdata = {
  797. &am33xx_l4_wkup__synctimer,
  798. &am43xx_l4_ls__timer8,
  799. &am43xx_l4_ls__timer9,
  800. &am43xx_l4_ls__timer10,
  801. &am43xx_l4_ls__timer11,
  802. &am43xx_l4_ls__epwmss3,
  803. &am43xx_l4_ls__epwmss4,
  804. &am43xx_l4_ls__epwmss5,
  805. &am43xx_l4_ls__mcspi2,
  806. &am43xx_l4_ls__mcspi3,
  807. &am43xx_l4_ls__mcspi4,
  808. &am43xx_l4_ls__gpio4,
  809. &am43xx_l4_ls__gpio5,
  810. &am43xx_l3_main__pruss,
  811. &am33xx_mpu__l3_main,
  812. &am33xx_mpu__prcm,
  813. &am33xx_l3_s__l4_ls,
  814. &am33xx_l3_s__l4_wkup,
  815. &am43xx_l3_main__l4_hs,
  816. &am33xx_l3_main__l3_s,
  817. &am33xx_l3_main__l3_instr,
  818. &am33xx_l3_main__gfx,
  819. &am33xx_l3_s__l3_main,
  820. &am43xx_l3_main__emif,
  821. &am33xx_pruss__l3_main,
  822. &am43xx_wkup_m3__l4_wkup,
  823. &am33xx_gfx__l3_main,
  824. &am43xx_l4_wkup__wkup_m3,
  825. &am43xx_l4_wkup__control,
  826. &am43xx_l4_wkup__smartreflex0,
  827. &am43xx_l4_wkup__smartreflex1,
  828. &am43xx_l4_wkup__uart1,
  829. &am43xx_l4_wkup__timer1,
  830. &am43xx_l4_wkup__i2c1,
  831. &am43xx_l4_wkup__gpio0,
  832. &am43xx_l4_wkup__wd_timer1,
  833. &am43xx_l4_wkup__adc_tsc,
  834. &am43xx_l3_s__qspi,
  835. &am33xx_l4_per__dcan0,
  836. &am33xx_l4_per__dcan1,
  837. &am33xx_l4_per__gpio1,
  838. &am33xx_l4_per__gpio2,
  839. &am33xx_l4_per__gpio3,
  840. &am33xx_l4_per__i2c2,
  841. &am33xx_l4_per__i2c3,
  842. &am33xx_l4_per__mailbox,
  843. &am33xx_l4_per__rng,
  844. &am33xx_l4_ls__mcasp0,
  845. &am33xx_l4_ls__mcasp1,
  846. &am33xx_l4_ls__mmc0,
  847. &am33xx_l4_ls__mmc1,
  848. &am33xx_l3_s__mmc2,
  849. &am33xx_l4_ls__timer2,
  850. &am33xx_l4_ls__timer3,
  851. &am33xx_l4_ls__timer4,
  852. &am33xx_l4_ls__timer5,
  853. &am33xx_l4_ls__timer6,
  854. &am33xx_l4_ls__timer7,
  855. &am33xx_l3_main__tpcc,
  856. &am33xx_l4_ls__uart2,
  857. &am33xx_l4_ls__uart3,
  858. &am33xx_l4_ls__uart4,
  859. &am33xx_l4_ls__uart5,
  860. &am33xx_l4_ls__uart6,
  861. &am33xx_l4_ls__spinlock,
  862. &am33xx_l4_ls__elm,
  863. &am33xx_l4_ls__epwmss0,
  864. &am33xx_l4_ls__epwmss1,
  865. &am33xx_l4_ls__epwmss2,
  866. &am33xx_l3_s__gpmc,
  867. &am33xx_l4_ls__mcspi0,
  868. &am33xx_l4_ls__mcspi1,
  869. &am33xx_l3_main__tptc0,
  870. &am33xx_l3_main__tptc1,
  871. &am33xx_l3_main__tptc2,
  872. &am33xx_l3_main__ocmc,
  873. &am43xx_l4_hs__cpgmac0,
  874. &am33xx_cpgmac0__mdio,
  875. &am33xx_l3_main__sha0,
  876. &am33xx_l3_main__aes0,
  877. &am43xx_l3_main__des,
  878. &am43xx_l4_ls__ocp2scp0,
  879. &am43xx_l4_ls__ocp2scp1,
  880. &am43xx_l3_s__usbotgss0,
  881. &am43xx_l3_s__usbotgss1,
  882. &am43xx_dss__l3_main,
  883. &am43xx_l4_ls__dss,
  884. &am43xx_l4_ls__dss_dispc,
  885. &am43xx_l4_ls__dss_rfbi,
  886. &am43xx_l4_ls__hdq1w,
  887. &am43xx_l3__vpfe0,
  888. &am43xx_l3__vpfe1,
  889. &am43xx_l4_ls__vpfe0,
  890. &am43xx_l4_ls__vpfe1,
  891. NULL,
  892. };
  893. static struct omap_hwmod_ocp_if *am43xx_rtc_hwmod_ocp_ifs[] __initdata = {
  894. &am33xx_l4_wkup__rtc,
  895. NULL,
  896. };
  897. int __init am43xx_hwmod_init(void)
  898. {
  899. int ret;
  900. omap_hwmod_am43xx_reg();
  901. omap_hwmod_init();
  902. ret = omap_hwmod_register_links(am43xx_hwmod_ocp_ifs);
  903. if (!ret && of_machine_is_compatible("ti,am4372"))
  904. ret = omap_hwmod_register_links(am43xx_rtc_hwmod_ocp_ifs);
  905. return ret;
  906. }