omap_hwmod_43xx_data.c 26 KB

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