omap_hwmod_43xx_data.c 25 KB

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