omap_hwmod_33xx_43xx_ipblock_data.c 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469
  1. /*
  2. *
  3. * Copyright (C) 2013 Texas Instruments Incorporated
  4. *
  5. * Hwmod common for AM335x and AM43x
  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 "i2c.h"
  20. #include "mmc.h"
  21. #include "wd_timer.h"
  22. #include "cm33xx.h"
  23. #include "prm33xx.h"
  24. #include "omap_hwmod_33xx_43xx_common_data.h"
  25. #include "prcm43xx.h"
  26. #define CLKCTRL(oh, clkctrl) ((oh).prcm.omap4.clkctrl_offs = (clkctrl))
  27. #define RSTCTRL(oh, rstctrl) ((oh).prcm.omap4.rstctrl_offs = (rstctrl))
  28. #define RSTST(oh, rstst) ((oh).prcm.omap4.rstst_offs = (rstst))
  29. /*
  30. * 'l3' class
  31. * instance(s): l3_main, l3_s, l3_instr
  32. */
  33. static struct omap_hwmod_class am33xx_l3_hwmod_class = {
  34. .name = "l3",
  35. };
  36. struct omap_hwmod am33xx_l3_main_hwmod = {
  37. .name = "l3_main",
  38. .class = &am33xx_l3_hwmod_class,
  39. .clkdm_name = "l3_clkdm",
  40. .flags = HWMOD_INIT_NO_IDLE,
  41. .main_clk = "l3_gclk",
  42. .prcm = {
  43. .omap4 = {
  44. .modulemode = MODULEMODE_SWCTRL,
  45. },
  46. },
  47. };
  48. /* l3_s */
  49. struct omap_hwmod am33xx_l3_s_hwmod = {
  50. .name = "l3_s",
  51. .class = &am33xx_l3_hwmod_class,
  52. .clkdm_name = "l3s_clkdm",
  53. };
  54. /* l3_instr */
  55. struct omap_hwmod am33xx_l3_instr_hwmod = {
  56. .name = "l3_instr",
  57. .class = &am33xx_l3_hwmod_class,
  58. .clkdm_name = "l3_clkdm",
  59. .flags = HWMOD_INIT_NO_IDLE,
  60. .main_clk = "l3_gclk",
  61. .prcm = {
  62. .omap4 = {
  63. .modulemode = MODULEMODE_SWCTRL,
  64. },
  65. },
  66. };
  67. /*
  68. * 'l4' class
  69. * instance(s): l4_ls, l4_hs, l4_wkup, l4_fw
  70. */
  71. struct omap_hwmod_class am33xx_l4_hwmod_class = {
  72. .name = "l4",
  73. };
  74. /* l4_ls */
  75. struct omap_hwmod am33xx_l4_ls_hwmod = {
  76. .name = "l4_ls",
  77. .class = &am33xx_l4_hwmod_class,
  78. .clkdm_name = "l4ls_clkdm",
  79. .flags = HWMOD_INIT_NO_IDLE,
  80. .main_clk = "l4ls_gclk",
  81. .prcm = {
  82. .omap4 = {
  83. .modulemode = MODULEMODE_SWCTRL,
  84. },
  85. },
  86. };
  87. /* l4_wkup */
  88. struct omap_hwmod am33xx_l4_wkup_hwmod = {
  89. .name = "l4_wkup",
  90. .class = &am33xx_l4_hwmod_class,
  91. .clkdm_name = "l4_wkup_clkdm",
  92. .flags = HWMOD_INIT_NO_IDLE,
  93. .prcm = {
  94. .omap4 = {
  95. .modulemode = MODULEMODE_SWCTRL,
  96. },
  97. },
  98. };
  99. /*
  100. * 'mpu' class
  101. */
  102. static struct omap_hwmod_class am33xx_mpu_hwmod_class = {
  103. .name = "mpu",
  104. };
  105. struct omap_hwmod am33xx_mpu_hwmod = {
  106. .name = "mpu",
  107. .class = &am33xx_mpu_hwmod_class,
  108. .clkdm_name = "mpu_clkdm",
  109. .flags = HWMOD_INIT_NO_IDLE,
  110. .main_clk = "dpll_mpu_m2_ck",
  111. .prcm = {
  112. .omap4 = {
  113. .modulemode = MODULEMODE_SWCTRL,
  114. },
  115. },
  116. };
  117. /*
  118. * 'wakeup m3' class
  119. * Wakeup controller sub-system under wakeup domain
  120. */
  121. struct omap_hwmod_class am33xx_wkup_m3_hwmod_class = {
  122. .name = "wkup_m3",
  123. };
  124. /*
  125. * 'pru-icss' class
  126. * Programmable Real-Time Unit and Industrial Communication Subsystem
  127. */
  128. static struct omap_hwmod_class am33xx_pruss_hwmod_class = {
  129. .name = "pruss",
  130. };
  131. static struct omap_hwmod_rst_info am33xx_pruss_resets[] = {
  132. { .name = "pruss", .rst_shift = 1 },
  133. };
  134. /* pru-icss */
  135. /* Pseudo hwmod for reset control purpose only */
  136. struct omap_hwmod am33xx_pruss_hwmod = {
  137. .name = "pruss",
  138. .class = &am33xx_pruss_hwmod_class,
  139. .clkdm_name = "pruss_ocp_clkdm",
  140. .main_clk = "pruss_ocp_gclk",
  141. .prcm = {
  142. .omap4 = {
  143. .modulemode = MODULEMODE_SWCTRL,
  144. },
  145. },
  146. .rst_lines = am33xx_pruss_resets,
  147. .rst_lines_cnt = ARRAY_SIZE(am33xx_pruss_resets),
  148. };
  149. /* gfx */
  150. /* Pseudo hwmod for reset control purpose only */
  151. static struct omap_hwmod_class am33xx_gfx_hwmod_class = {
  152. .name = "gfx",
  153. };
  154. static struct omap_hwmod_rst_info am33xx_gfx_resets[] = {
  155. { .name = "gfx", .rst_shift = 0, .st_shift = 0},
  156. };
  157. struct omap_hwmod am33xx_gfx_hwmod = {
  158. .name = "gfx",
  159. .class = &am33xx_gfx_hwmod_class,
  160. .clkdm_name = "gfx_l3_clkdm",
  161. .main_clk = "gfx_fck_div_ck",
  162. .prcm = {
  163. .omap4 = {
  164. .modulemode = MODULEMODE_SWCTRL,
  165. },
  166. },
  167. .rst_lines = am33xx_gfx_resets,
  168. .rst_lines_cnt = ARRAY_SIZE(am33xx_gfx_resets),
  169. };
  170. /*
  171. * 'prcm' class
  172. * power and reset manager (whole prcm infrastructure)
  173. */
  174. static struct omap_hwmod_class am33xx_prcm_hwmod_class = {
  175. .name = "prcm",
  176. };
  177. /* prcm */
  178. struct omap_hwmod am33xx_prcm_hwmod = {
  179. .name = "prcm",
  180. .class = &am33xx_prcm_hwmod_class,
  181. .clkdm_name = "l4_wkup_clkdm",
  182. };
  183. /*
  184. * 'aes0' class
  185. */
  186. static struct omap_hwmod_class_sysconfig am33xx_aes0_sysc = {
  187. .rev_offs = 0x80,
  188. .sysc_offs = 0x84,
  189. .syss_offs = 0x88,
  190. .sysc_flags = SYSS_HAS_RESET_STATUS,
  191. };
  192. static struct omap_hwmod_class am33xx_aes0_hwmod_class = {
  193. .name = "aes0",
  194. .sysc = &am33xx_aes0_sysc,
  195. };
  196. struct omap_hwmod am33xx_aes0_hwmod = {
  197. .name = "aes",
  198. .class = &am33xx_aes0_hwmod_class,
  199. .clkdm_name = "l3_clkdm",
  200. .main_clk = "aes0_fck",
  201. .prcm = {
  202. .omap4 = {
  203. .modulemode = MODULEMODE_SWCTRL,
  204. },
  205. },
  206. };
  207. /* sha0 HIB2 (the 'P' (public) device) */
  208. static struct omap_hwmod_class_sysconfig am33xx_sha0_sysc = {
  209. .rev_offs = 0x100,
  210. .sysc_offs = 0x110,
  211. .syss_offs = 0x114,
  212. .sysc_flags = SYSS_HAS_RESET_STATUS,
  213. };
  214. static struct omap_hwmod_class am33xx_sha0_hwmod_class = {
  215. .name = "sha0",
  216. .sysc = &am33xx_sha0_sysc,
  217. };
  218. struct omap_hwmod am33xx_sha0_hwmod = {
  219. .name = "sham",
  220. .class = &am33xx_sha0_hwmod_class,
  221. .clkdm_name = "l3_clkdm",
  222. .main_clk = "l3_gclk",
  223. .prcm = {
  224. .omap4 = {
  225. .modulemode = MODULEMODE_SWCTRL,
  226. },
  227. },
  228. };
  229. /* ocmcram */
  230. static struct omap_hwmod_class am33xx_ocmcram_hwmod_class = {
  231. .name = "ocmcram",
  232. };
  233. struct omap_hwmod am33xx_ocmcram_hwmod = {
  234. .name = "ocmcram",
  235. .class = &am33xx_ocmcram_hwmod_class,
  236. .clkdm_name = "l3_clkdm",
  237. .flags = HWMOD_INIT_NO_IDLE,
  238. .main_clk = "l3_gclk",
  239. .prcm = {
  240. .omap4 = {
  241. .modulemode = MODULEMODE_SWCTRL,
  242. },
  243. },
  244. };
  245. /* 'smartreflex' class */
  246. static struct omap_hwmod_class am33xx_smartreflex_hwmod_class = {
  247. .name = "smartreflex",
  248. };
  249. /* smartreflex0 */
  250. struct omap_hwmod am33xx_smartreflex0_hwmod = {
  251. .name = "smartreflex0",
  252. .class = &am33xx_smartreflex_hwmod_class,
  253. .clkdm_name = "l4_wkup_clkdm",
  254. .main_clk = "smartreflex0_fck",
  255. .prcm = {
  256. .omap4 = {
  257. .modulemode = MODULEMODE_SWCTRL,
  258. },
  259. },
  260. };
  261. /* smartreflex1 */
  262. struct omap_hwmod am33xx_smartreflex1_hwmod = {
  263. .name = "smartreflex1",
  264. .class = &am33xx_smartreflex_hwmod_class,
  265. .clkdm_name = "l4_wkup_clkdm",
  266. .main_clk = "smartreflex1_fck",
  267. .prcm = {
  268. .omap4 = {
  269. .modulemode = MODULEMODE_SWCTRL,
  270. },
  271. },
  272. };
  273. /*
  274. * 'control' module class
  275. */
  276. struct omap_hwmod_class am33xx_control_hwmod_class = {
  277. .name = "control",
  278. };
  279. /*
  280. * 'cpgmac' class
  281. * cpsw/cpgmac sub system
  282. */
  283. static struct omap_hwmod_class_sysconfig am33xx_cpgmac_sysc = {
  284. .rev_offs = 0x0,
  285. .sysc_offs = 0x8,
  286. .syss_offs = 0x4,
  287. .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
  288. SYSS_HAS_RESET_STATUS),
  289. .idlemodes = (SIDLE_FORCE | SIDLE_NO | MSTANDBY_FORCE |
  290. MSTANDBY_NO),
  291. .sysc_fields = &omap_hwmod_sysc_type3,
  292. };
  293. static struct omap_hwmod_class am33xx_cpgmac0_hwmod_class = {
  294. .name = "cpgmac0",
  295. .sysc = &am33xx_cpgmac_sysc,
  296. };
  297. struct omap_hwmod am33xx_cpgmac0_hwmod = {
  298. .name = "cpgmac0",
  299. .class = &am33xx_cpgmac0_hwmod_class,
  300. .clkdm_name = "cpsw_125mhz_clkdm",
  301. .flags = (HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY),
  302. .main_clk = "cpsw_125mhz_gclk",
  303. .mpu_rt_idx = 1,
  304. .prcm = {
  305. .omap4 = {
  306. .modulemode = MODULEMODE_SWCTRL,
  307. },
  308. },
  309. };
  310. /*
  311. * mdio class
  312. */
  313. static struct omap_hwmod_class am33xx_mdio_hwmod_class = {
  314. .name = "davinci_mdio",
  315. };
  316. struct omap_hwmod am33xx_mdio_hwmod = {
  317. .name = "davinci_mdio",
  318. .class = &am33xx_mdio_hwmod_class,
  319. .clkdm_name = "cpsw_125mhz_clkdm",
  320. .main_clk = "cpsw_125mhz_gclk",
  321. };
  322. /*
  323. * dcan class
  324. */
  325. static struct omap_hwmod_class am33xx_dcan_hwmod_class = {
  326. .name = "d_can",
  327. };
  328. /* dcan0 */
  329. struct omap_hwmod am33xx_dcan0_hwmod = {
  330. .name = "d_can0",
  331. .class = &am33xx_dcan_hwmod_class,
  332. .clkdm_name = "l4ls_clkdm",
  333. .main_clk = "dcan0_fck",
  334. .prcm = {
  335. .omap4 = {
  336. .modulemode = MODULEMODE_SWCTRL,
  337. },
  338. },
  339. };
  340. /* dcan1 */
  341. struct omap_hwmod am33xx_dcan1_hwmod = {
  342. .name = "d_can1",
  343. .class = &am33xx_dcan_hwmod_class,
  344. .clkdm_name = "l4ls_clkdm",
  345. .main_clk = "dcan1_fck",
  346. .prcm = {
  347. .omap4 = {
  348. .modulemode = MODULEMODE_SWCTRL,
  349. },
  350. },
  351. };
  352. /* elm */
  353. static struct omap_hwmod_class_sysconfig am33xx_elm_sysc = {
  354. .rev_offs = 0x0000,
  355. .sysc_offs = 0x0010,
  356. .syss_offs = 0x0014,
  357. .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
  358. SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
  359. SYSS_HAS_RESET_STATUS),
  360. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  361. .sysc_fields = &omap_hwmod_sysc_type1,
  362. };
  363. static struct omap_hwmod_class am33xx_elm_hwmod_class = {
  364. .name = "elm",
  365. .sysc = &am33xx_elm_sysc,
  366. };
  367. struct omap_hwmod am33xx_elm_hwmod = {
  368. .name = "elm",
  369. .class = &am33xx_elm_hwmod_class,
  370. .clkdm_name = "l4ls_clkdm",
  371. .main_clk = "l4ls_gclk",
  372. .prcm = {
  373. .omap4 = {
  374. .modulemode = MODULEMODE_SWCTRL,
  375. },
  376. },
  377. };
  378. /* pwmss */
  379. static struct omap_hwmod_class_sysconfig am33xx_epwmss_sysc = {
  380. .rev_offs = 0x0,
  381. .sysc_offs = 0x4,
  382. .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE),
  383. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  384. SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
  385. MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
  386. .sysc_fields = &omap_hwmod_sysc_type2,
  387. };
  388. struct omap_hwmod_class am33xx_epwmss_hwmod_class = {
  389. .name = "epwmss",
  390. .sysc = &am33xx_epwmss_sysc,
  391. };
  392. static struct omap_hwmod_class am33xx_ecap_hwmod_class = {
  393. .name = "ecap",
  394. };
  395. static struct omap_hwmod_class am33xx_eqep_hwmod_class = {
  396. .name = "eqep",
  397. };
  398. struct omap_hwmod_class am33xx_ehrpwm_hwmod_class = {
  399. .name = "ehrpwm",
  400. };
  401. /* epwmss0 */
  402. struct omap_hwmod am33xx_epwmss0_hwmod = {
  403. .name = "epwmss0",
  404. .class = &am33xx_epwmss_hwmod_class,
  405. .clkdm_name = "l4ls_clkdm",
  406. .main_clk = "l4ls_gclk",
  407. .prcm = {
  408. .omap4 = {
  409. .modulemode = MODULEMODE_SWCTRL,
  410. },
  411. },
  412. };
  413. /* ecap0 */
  414. struct omap_hwmod am33xx_ecap0_hwmod = {
  415. .name = "ecap0",
  416. .class = &am33xx_ecap_hwmod_class,
  417. .clkdm_name = "l4ls_clkdm",
  418. .main_clk = "l4ls_gclk",
  419. };
  420. /* eqep0 */
  421. struct omap_hwmod am33xx_eqep0_hwmod = {
  422. .name = "eqep0",
  423. .class = &am33xx_eqep_hwmod_class,
  424. .clkdm_name = "l4ls_clkdm",
  425. .main_clk = "l4ls_gclk",
  426. };
  427. /* ehrpwm0 */
  428. struct omap_hwmod am33xx_ehrpwm0_hwmod = {
  429. .name = "ehrpwm0",
  430. .class = &am33xx_ehrpwm_hwmod_class,
  431. .clkdm_name = "l4ls_clkdm",
  432. .main_clk = "l4ls_gclk",
  433. };
  434. /* epwmss1 */
  435. struct omap_hwmod am33xx_epwmss1_hwmod = {
  436. .name = "epwmss1",
  437. .class = &am33xx_epwmss_hwmod_class,
  438. .clkdm_name = "l4ls_clkdm",
  439. .main_clk = "l4ls_gclk",
  440. .prcm = {
  441. .omap4 = {
  442. .modulemode = MODULEMODE_SWCTRL,
  443. },
  444. },
  445. };
  446. /* ecap1 */
  447. struct omap_hwmod am33xx_ecap1_hwmod = {
  448. .name = "ecap1",
  449. .class = &am33xx_ecap_hwmod_class,
  450. .clkdm_name = "l4ls_clkdm",
  451. .main_clk = "l4ls_gclk",
  452. };
  453. /* eqep1 */
  454. struct omap_hwmod am33xx_eqep1_hwmod = {
  455. .name = "eqep1",
  456. .class = &am33xx_eqep_hwmod_class,
  457. .clkdm_name = "l4ls_clkdm",
  458. .main_clk = "l4ls_gclk",
  459. };
  460. /* ehrpwm1 */
  461. struct omap_hwmod am33xx_ehrpwm1_hwmod = {
  462. .name = "ehrpwm1",
  463. .class = &am33xx_ehrpwm_hwmod_class,
  464. .clkdm_name = "l4ls_clkdm",
  465. .main_clk = "l4ls_gclk",
  466. };
  467. /* epwmss2 */
  468. struct omap_hwmod am33xx_epwmss2_hwmod = {
  469. .name = "epwmss2",
  470. .class = &am33xx_epwmss_hwmod_class,
  471. .clkdm_name = "l4ls_clkdm",
  472. .main_clk = "l4ls_gclk",
  473. .prcm = {
  474. .omap4 = {
  475. .modulemode = MODULEMODE_SWCTRL,
  476. },
  477. },
  478. };
  479. /* ecap2 */
  480. struct omap_hwmod am33xx_ecap2_hwmod = {
  481. .name = "ecap2",
  482. .class = &am33xx_ecap_hwmod_class,
  483. .clkdm_name = "l4ls_clkdm",
  484. .main_clk = "l4ls_gclk",
  485. };
  486. /* eqep2 */
  487. struct omap_hwmod am33xx_eqep2_hwmod = {
  488. .name = "eqep2",
  489. .class = &am33xx_eqep_hwmod_class,
  490. .clkdm_name = "l4ls_clkdm",
  491. .main_clk = "l4ls_gclk",
  492. };
  493. /* ehrpwm2 */
  494. struct omap_hwmod am33xx_ehrpwm2_hwmod = {
  495. .name = "ehrpwm2",
  496. .class = &am33xx_ehrpwm_hwmod_class,
  497. .clkdm_name = "l4ls_clkdm",
  498. .main_clk = "l4ls_gclk",
  499. };
  500. /*
  501. * 'gpio' class: for gpio 0,1,2,3
  502. */
  503. static struct omap_hwmod_class_sysconfig am33xx_gpio_sysc = {
  504. .rev_offs = 0x0000,
  505. .sysc_offs = 0x0010,
  506. .syss_offs = 0x0114,
  507. .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
  508. SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
  509. SYSS_HAS_RESET_STATUS),
  510. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  511. SIDLE_SMART_WKUP),
  512. .sysc_fields = &omap_hwmod_sysc_type1,
  513. };
  514. struct omap_hwmod_class am33xx_gpio_hwmod_class = {
  515. .name = "gpio",
  516. .sysc = &am33xx_gpio_sysc,
  517. .rev = 2,
  518. };
  519. struct omap_gpio_dev_attr gpio_dev_attr = {
  520. .bank_width = 32,
  521. .dbck_flag = true,
  522. };
  523. /* gpio1 */
  524. static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
  525. { .role = "dbclk", .clk = "gpio1_dbclk" },
  526. };
  527. struct omap_hwmod am33xx_gpio1_hwmod = {
  528. .name = "gpio2",
  529. .class = &am33xx_gpio_hwmod_class,
  530. .clkdm_name = "l4ls_clkdm",
  531. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  532. .main_clk = "l4ls_gclk",
  533. .prcm = {
  534. .omap4 = {
  535. .modulemode = MODULEMODE_SWCTRL,
  536. },
  537. },
  538. .opt_clks = gpio1_opt_clks,
  539. .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
  540. .dev_attr = &gpio_dev_attr,
  541. };
  542. /* gpio2 */
  543. static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
  544. { .role = "dbclk", .clk = "gpio2_dbclk" },
  545. };
  546. struct omap_hwmod am33xx_gpio2_hwmod = {
  547. .name = "gpio3",
  548. .class = &am33xx_gpio_hwmod_class,
  549. .clkdm_name = "l4ls_clkdm",
  550. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  551. .main_clk = "l4ls_gclk",
  552. .prcm = {
  553. .omap4 = {
  554. .modulemode = MODULEMODE_SWCTRL,
  555. },
  556. },
  557. .opt_clks = gpio2_opt_clks,
  558. .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
  559. .dev_attr = &gpio_dev_attr,
  560. };
  561. /* gpio3 */
  562. static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
  563. { .role = "dbclk", .clk = "gpio3_dbclk" },
  564. };
  565. struct omap_hwmod am33xx_gpio3_hwmod = {
  566. .name = "gpio4",
  567. .class = &am33xx_gpio_hwmod_class,
  568. .clkdm_name = "l4ls_clkdm",
  569. .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
  570. .main_clk = "l4ls_gclk",
  571. .prcm = {
  572. .omap4 = {
  573. .modulemode = MODULEMODE_SWCTRL,
  574. },
  575. },
  576. .opt_clks = gpio3_opt_clks,
  577. .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
  578. .dev_attr = &gpio_dev_attr,
  579. };
  580. /* gpmc */
  581. static struct omap_hwmod_class_sysconfig gpmc_sysc = {
  582. .rev_offs = 0x0,
  583. .sysc_offs = 0x10,
  584. .syss_offs = 0x14,
  585. .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
  586. SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
  587. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  588. .sysc_fields = &omap_hwmod_sysc_type1,
  589. };
  590. static struct omap_hwmod_class am33xx_gpmc_hwmod_class = {
  591. .name = "gpmc",
  592. .sysc = &gpmc_sysc,
  593. };
  594. struct omap_hwmod am33xx_gpmc_hwmod = {
  595. .name = "gpmc",
  596. .class = &am33xx_gpmc_hwmod_class,
  597. .clkdm_name = "l3s_clkdm",
  598. .flags = (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
  599. .main_clk = "l3s_gclk",
  600. .prcm = {
  601. .omap4 = {
  602. .modulemode = MODULEMODE_SWCTRL,
  603. },
  604. },
  605. };
  606. /* 'i2c' class */
  607. static struct omap_hwmod_class_sysconfig am33xx_i2c_sysc = {
  608. .sysc_offs = 0x0010,
  609. .syss_offs = 0x0090,
  610. .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
  611. SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
  612. SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
  613. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  614. SIDLE_SMART_WKUP),
  615. .sysc_fields = &omap_hwmod_sysc_type1,
  616. };
  617. static struct omap_hwmod_class i2c_class = {
  618. .name = "i2c",
  619. .sysc = &am33xx_i2c_sysc,
  620. .rev = OMAP_I2C_IP_VERSION_2,
  621. .reset = &omap_i2c_reset,
  622. };
  623. static struct omap_i2c_dev_attr i2c_dev_attr = {
  624. .flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE,
  625. };
  626. /* i2c1 */
  627. struct omap_hwmod am33xx_i2c1_hwmod = {
  628. .name = "i2c1",
  629. .class = &i2c_class,
  630. .clkdm_name = "l4_wkup_clkdm",
  631. .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
  632. .main_clk = "dpll_per_m2_div4_wkupdm_ck",
  633. .prcm = {
  634. .omap4 = {
  635. .modulemode = MODULEMODE_SWCTRL,
  636. },
  637. },
  638. .dev_attr = &i2c_dev_attr,
  639. };
  640. /* i2c1 */
  641. struct omap_hwmod am33xx_i2c2_hwmod = {
  642. .name = "i2c2",
  643. .class = &i2c_class,
  644. .clkdm_name = "l4ls_clkdm",
  645. .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
  646. .main_clk = "dpll_per_m2_div4_ck",
  647. .prcm = {
  648. .omap4 = {
  649. .modulemode = MODULEMODE_SWCTRL,
  650. },
  651. },
  652. .dev_attr = &i2c_dev_attr,
  653. };
  654. /* i2c3 */
  655. struct omap_hwmod am33xx_i2c3_hwmod = {
  656. .name = "i2c3",
  657. .class = &i2c_class,
  658. .clkdm_name = "l4ls_clkdm",
  659. .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
  660. .main_clk = "dpll_per_m2_div4_ck",
  661. .prcm = {
  662. .omap4 = {
  663. .modulemode = MODULEMODE_SWCTRL,
  664. },
  665. },
  666. .dev_attr = &i2c_dev_attr,
  667. };
  668. /*
  669. * 'mailbox' class
  670. * mailbox module allowing communication between the on-chip processors using a
  671. * queued mailbox-interrupt mechanism.
  672. */
  673. static struct omap_hwmod_class_sysconfig am33xx_mailbox_sysc = {
  674. .rev_offs = 0x0000,
  675. .sysc_offs = 0x0010,
  676. .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
  677. SYSC_HAS_SOFTRESET),
  678. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  679. .sysc_fields = &omap_hwmod_sysc_type2,
  680. };
  681. static struct omap_hwmod_class am33xx_mailbox_hwmod_class = {
  682. .name = "mailbox",
  683. .sysc = &am33xx_mailbox_sysc,
  684. };
  685. struct omap_hwmod am33xx_mailbox_hwmod = {
  686. .name = "mailbox",
  687. .class = &am33xx_mailbox_hwmod_class,
  688. .clkdm_name = "l4ls_clkdm",
  689. .main_clk = "l4ls_gclk",
  690. .prcm = {
  691. .omap4 = {
  692. .modulemode = MODULEMODE_SWCTRL,
  693. },
  694. },
  695. };
  696. /*
  697. * 'mcasp' class
  698. */
  699. static struct omap_hwmod_class_sysconfig am33xx_mcasp_sysc = {
  700. .rev_offs = 0x0,
  701. .sysc_offs = 0x4,
  702. .sysc_flags = SYSC_HAS_SIDLEMODE,
  703. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  704. .sysc_fields = &omap_hwmod_sysc_type3,
  705. };
  706. static struct omap_hwmod_class am33xx_mcasp_hwmod_class = {
  707. .name = "mcasp",
  708. .sysc = &am33xx_mcasp_sysc,
  709. };
  710. /* mcasp0 */
  711. struct omap_hwmod am33xx_mcasp0_hwmod = {
  712. .name = "mcasp0",
  713. .class = &am33xx_mcasp_hwmod_class,
  714. .clkdm_name = "l3s_clkdm",
  715. .main_clk = "mcasp0_fck",
  716. .prcm = {
  717. .omap4 = {
  718. .modulemode = MODULEMODE_SWCTRL,
  719. },
  720. },
  721. };
  722. /* mcasp1 */
  723. struct omap_hwmod am33xx_mcasp1_hwmod = {
  724. .name = "mcasp1",
  725. .class = &am33xx_mcasp_hwmod_class,
  726. .clkdm_name = "l3s_clkdm",
  727. .main_clk = "mcasp1_fck",
  728. .prcm = {
  729. .omap4 = {
  730. .modulemode = MODULEMODE_SWCTRL,
  731. },
  732. },
  733. };
  734. /* 'mmc' class */
  735. static struct omap_hwmod_class_sysconfig am33xx_mmc_sysc = {
  736. .rev_offs = 0x1fc,
  737. .sysc_offs = 0x10,
  738. .syss_offs = 0x14,
  739. .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
  740. SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
  741. SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
  742. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  743. .sysc_fields = &omap_hwmod_sysc_type1,
  744. };
  745. static struct omap_hwmod_class am33xx_mmc_hwmod_class = {
  746. .name = "mmc",
  747. .sysc = &am33xx_mmc_sysc,
  748. };
  749. /* mmc0 */
  750. static struct omap_mmc_dev_attr am33xx_mmc0_dev_attr = {
  751. .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
  752. };
  753. struct omap_hwmod am33xx_mmc0_hwmod = {
  754. .name = "mmc1",
  755. .class = &am33xx_mmc_hwmod_class,
  756. .clkdm_name = "l4ls_clkdm",
  757. .main_clk = "mmc_clk",
  758. .prcm = {
  759. .omap4 = {
  760. .modulemode = MODULEMODE_SWCTRL,
  761. },
  762. },
  763. .dev_attr = &am33xx_mmc0_dev_attr,
  764. };
  765. /* mmc1 */
  766. static struct omap_mmc_dev_attr am33xx_mmc1_dev_attr = {
  767. .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
  768. };
  769. struct omap_hwmod am33xx_mmc1_hwmod = {
  770. .name = "mmc2",
  771. .class = &am33xx_mmc_hwmod_class,
  772. .clkdm_name = "l4ls_clkdm",
  773. .main_clk = "mmc_clk",
  774. .prcm = {
  775. .omap4 = {
  776. .modulemode = MODULEMODE_SWCTRL,
  777. },
  778. },
  779. .dev_attr = &am33xx_mmc1_dev_attr,
  780. };
  781. /* mmc2 */
  782. static struct omap_mmc_dev_attr am33xx_mmc2_dev_attr = {
  783. .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
  784. };
  785. struct omap_hwmod am33xx_mmc2_hwmod = {
  786. .name = "mmc3",
  787. .class = &am33xx_mmc_hwmod_class,
  788. .clkdm_name = "l3s_clkdm",
  789. .main_clk = "mmc_clk",
  790. .prcm = {
  791. .omap4 = {
  792. .modulemode = MODULEMODE_SWCTRL,
  793. },
  794. },
  795. .dev_attr = &am33xx_mmc2_dev_attr,
  796. };
  797. /*
  798. * 'rtc' class
  799. * rtc subsystem
  800. */
  801. static struct omap_hwmod_class_sysconfig am33xx_rtc_sysc = {
  802. .rev_offs = 0x0074,
  803. .sysc_offs = 0x0078,
  804. .sysc_flags = SYSC_HAS_SIDLEMODE,
  805. .idlemodes = (SIDLE_FORCE | SIDLE_NO |
  806. SIDLE_SMART | SIDLE_SMART_WKUP),
  807. .sysc_fields = &omap_hwmod_sysc_type3,
  808. };
  809. static struct omap_hwmod_class am33xx_rtc_hwmod_class = {
  810. .name = "rtc",
  811. .sysc = &am33xx_rtc_sysc,
  812. };
  813. struct omap_hwmod am33xx_rtc_hwmod = {
  814. .name = "rtc",
  815. .class = &am33xx_rtc_hwmod_class,
  816. .clkdm_name = "l4_rtc_clkdm",
  817. .main_clk = "clk_32768_ck",
  818. .prcm = {
  819. .omap4 = {
  820. .modulemode = MODULEMODE_SWCTRL,
  821. },
  822. },
  823. };
  824. /* 'spi' class */
  825. static struct omap_hwmod_class_sysconfig am33xx_mcspi_sysc = {
  826. .rev_offs = 0x0000,
  827. .sysc_offs = 0x0110,
  828. .syss_offs = 0x0114,
  829. .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
  830. SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
  831. SYSS_HAS_RESET_STATUS),
  832. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  833. .sysc_fields = &omap_hwmod_sysc_type1,
  834. };
  835. struct omap_hwmod_class am33xx_spi_hwmod_class = {
  836. .name = "mcspi",
  837. .sysc = &am33xx_mcspi_sysc,
  838. .rev = OMAP4_MCSPI_REV,
  839. };
  840. /* spi0 */
  841. struct omap2_mcspi_dev_attr mcspi_attrib = {
  842. .num_chipselect = 2,
  843. };
  844. struct omap_hwmod am33xx_spi0_hwmod = {
  845. .name = "spi0",
  846. .class = &am33xx_spi_hwmod_class,
  847. .clkdm_name = "l4ls_clkdm",
  848. .main_clk = "dpll_per_m2_div4_ck",
  849. .prcm = {
  850. .omap4 = {
  851. .modulemode = MODULEMODE_SWCTRL,
  852. },
  853. },
  854. .dev_attr = &mcspi_attrib,
  855. };
  856. /* spi1 */
  857. struct omap_hwmod am33xx_spi1_hwmod = {
  858. .name = "spi1",
  859. .class = &am33xx_spi_hwmod_class,
  860. .clkdm_name = "l4ls_clkdm",
  861. .main_clk = "dpll_per_m2_div4_ck",
  862. .prcm = {
  863. .omap4 = {
  864. .modulemode = MODULEMODE_SWCTRL,
  865. },
  866. },
  867. .dev_attr = &mcspi_attrib,
  868. };
  869. /*
  870. * 'spinlock' class
  871. * spinlock provides hardware assistance for synchronizing the
  872. * processes running on multiple processors
  873. */
  874. static struct omap_hwmod_class_sysconfig am33xx_spinlock_sysc = {
  875. .rev_offs = 0x0000,
  876. .sysc_offs = 0x0010,
  877. .syss_offs = 0x0014,
  878. .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
  879. SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
  880. SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
  881. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  882. .sysc_fields = &omap_hwmod_sysc_type1,
  883. };
  884. static struct omap_hwmod_class am33xx_spinlock_hwmod_class = {
  885. .name = "spinlock",
  886. .sysc = &am33xx_spinlock_sysc,
  887. };
  888. struct omap_hwmod am33xx_spinlock_hwmod = {
  889. .name = "spinlock",
  890. .class = &am33xx_spinlock_hwmod_class,
  891. .clkdm_name = "l4ls_clkdm",
  892. .main_clk = "l4ls_gclk",
  893. .prcm = {
  894. .omap4 = {
  895. .modulemode = MODULEMODE_SWCTRL,
  896. },
  897. },
  898. };
  899. /* 'timer 2-7' class */
  900. static struct omap_hwmod_class_sysconfig am33xx_timer_sysc = {
  901. .rev_offs = 0x0000,
  902. .sysc_offs = 0x0010,
  903. .syss_offs = 0x0014,
  904. .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
  905. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  906. SIDLE_SMART_WKUP),
  907. .sysc_fields = &omap_hwmod_sysc_type2,
  908. };
  909. struct omap_hwmod_class am33xx_timer_hwmod_class = {
  910. .name = "timer",
  911. .sysc = &am33xx_timer_sysc,
  912. };
  913. /* timer1 1ms */
  914. static struct omap_hwmod_class_sysconfig am33xx_timer1ms_sysc = {
  915. .rev_offs = 0x0000,
  916. .sysc_offs = 0x0010,
  917. .syss_offs = 0x0014,
  918. .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
  919. SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
  920. SYSS_HAS_RESET_STATUS),
  921. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  922. .sysc_fields = &omap_hwmod_sysc_type1,
  923. };
  924. static struct omap_hwmod_class am33xx_timer1ms_hwmod_class = {
  925. .name = "timer",
  926. .sysc = &am33xx_timer1ms_sysc,
  927. };
  928. struct omap_hwmod am33xx_timer1_hwmod = {
  929. .name = "timer1",
  930. .class = &am33xx_timer1ms_hwmod_class,
  931. .clkdm_name = "l4_wkup_clkdm",
  932. .main_clk = "timer1_fck",
  933. .prcm = {
  934. .omap4 = {
  935. .modulemode = MODULEMODE_SWCTRL,
  936. },
  937. },
  938. };
  939. struct omap_hwmod am33xx_timer2_hwmod = {
  940. .name = "timer2",
  941. .class = &am33xx_timer_hwmod_class,
  942. .clkdm_name = "l4ls_clkdm",
  943. .main_clk = "timer2_fck",
  944. .prcm = {
  945. .omap4 = {
  946. .modulemode = MODULEMODE_SWCTRL,
  947. },
  948. },
  949. };
  950. struct omap_hwmod am33xx_timer3_hwmod = {
  951. .name = "timer3",
  952. .class = &am33xx_timer_hwmod_class,
  953. .clkdm_name = "l4ls_clkdm",
  954. .main_clk = "timer3_fck",
  955. .prcm = {
  956. .omap4 = {
  957. .modulemode = MODULEMODE_SWCTRL,
  958. },
  959. },
  960. };
  961. struct omap_hwmod am33xx_timer4_hwmod = {
  962. .name = "timer4",
  963. .class = &am33xx_timer_hwmod_class,
  964. .clkdm_name = "l4ls_clkdm",
  965. .main_clk = "timer4_fck",
  966. .prcm = {
  967. .omap4 = {
  968. .modulemode = MODULEMODE_SWCTRL,
  969. },
  970. },
  971. };
  972. struct omap_hwmod am33xx_timer5_hwmod = {
  973. .name = "timer5",
  974. .class = &am33xx_timer_hwmod_class,
  975. .clkdm_name = "l4ls_clkdm",
  976. .main_clk = "timer5_fck",
  977. .prcm = {
  978. .omap4 = {
  979. .modulemode = MODULEMODE_SWCTRL,
  980. },
  981. },
  982. };
  983. struct omap_hwmod am33xx_timer6_hwmod = {
  984. .name = "timer6",
  985. .class = &am33xx_timer_hwmod_class,
  986. .clkdm_name = "l4ls_clkdm",
  987. .main_clk = "timer6_fck",
  988. .prcm = {
  989. .omap4 = {
  990. .modulemode = MODULEMODE_SWCTRL,
  991. },
  992. },
  993. };
  994. struct omap_hwmod am33xx_timer7_hwmod = {
  995. .name = "timer7",
  996. .class = &am33xx_timer_hwmod_class,
  997. .clkdm_name = "l4ls_clkdm",
  998. .main_clk = "timer7_fck",
  999. .prcm = {
  1000. .omap4 = {
  1001. .modulemode = MODULEMODE_SWCTRL,
  1002. },
  1003. },
  1004. };
  1005. /* tpcc */
  1006. static struct omap_hwmod_class am33xx_tpcc_hwmod_class = {
  1007. .name = "tpcc",
  1008. };
  1009. struct omap_hwmod am33xx_tpcc_hwmod = {
  1010. .name = "tpcc",
  1011. .class = &am33xx_tpcc_hwmod_class,
  1012. .clkdm_name = "l3_clkdm",
  1013. .main_clk = "l3_gclk",
  1014. .prcm = {
  1015. .omap4 = {
  1016. .modulemode = MODULEMODE_SWCTRL,
  1017. },
  1018. },
  1019. };
  1020. static struct omap_hwmod_class_sysconfig am33xx_tptc_sysc = {
  1021. .rev_offs = 0x0,
  1022. .sysc_offs = 0x10,
  1023. .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
  1024. SYSC_HAS_MIDLEMODE),
  1025. .idlemodes = (SIDLE_FORCE | SIDLE_SMART | MSTANDBY_FORCE),
  1026. .sysc_fields = &omap_hwmod_sysc_type2,
  1027. };
  1028. /* 'tptc' class */
  1029. static struct omap_hwmod_class am33xx_tptc_hwmod_class = {
  1030. .name = "tptc",
  1031. .sysc = &am33xx_tptc_sysc,
  1032. };
  1033. /* tptc0 */
  1034. struct omap_hwmod am33xx_tptc0_hwmod = {
  1035. .name = "tptc0",
  1036. .class = &am33xx_tptc_hwmod_class,
  1037. .clkdm_name = "l3_clkdm",
  1038. .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
  1039. .main_clk = "l3_gclk",
  1040. .prcm = {
  1041. .omap4 = {
  1042. .modulemode = MODULEMODE_SWCTRL,
  1043. },
  1044. },
  1045. };
  1046. /* tptc1 */
  1047. struct omap_hwmod am33xx_tptc1_hwmod = {
  1048. .name = "tptc1",
  1049. .class = &am33xx_tptc_hwmod_class,
  1050. .clkdm_name = "l3_clkdm",
  1051. .flags = (HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY),
  1052. .main_clk = "l3_gclk",
  1053. .prcm = {
  1054. .omap4 = {
  1055. .modulemode = MODULEMODE_SWCTRL,
  1056. },
  1057. },
  1058. };
  1059. /* tptc2 */
  1060. struct omap_hwmod am33xx_tptc2_hwmod = {
  1061. .name = "tptc2",
  1062. .class = &am33xx_tptc_hwmod_class,
  1063. .clkdm_name = "l3_clkdm",
  1064. .flags = (HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY),
  1065. .main_clk = "l3_gclk",
  1066. .prcm = {
  1067. .omap4 = {
  1068. .modulemode = MODULEMODE_SWCTRL,
  1069. },
  1070. },
  1071. };
  1072. /* 'uart' class */
  1073. static struct omap_hwmod_class_sysconfig uart_sysc = {
  1074. .rev_offs = 0x50,
  1075. .sysc_offs = 0x54,
  1076. .syss_offs = 0x58,
  1077. .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
  1078. SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
  1079. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  1080. SIDLE_SMART_WKUP),
  1081. .sysc_fields = &omap_hwmod_sysc_type1,
  1082. };
  1083. static struct omap_hwmod_class uart_class = {
  1084. .name = "uart",
  1085. .sysc = &uart_sysc,
  1086. };
  1087. struct omap_hwmod am33xx_uart1_hwmod = {
  1088. .name = "uart1",
  1089. .class = &uart_class,
  1090. .clkdm_name = "l4_wkup_clkdm",
  1091. .flags = DEBUG_AM33XXUART1_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
  1092. .main_clk = "dpll_per_m2_div4_wkupdm_ck",
  1093. .prcm = {
  1094. .omap4 = {
  1095. .modulemode = MODULEMODE_SWCTRL,
  1096. },
  1097. },
  1098. };
  1099. struct omap_hwmod am33xx_uart2_hwmod = {
  1100. .name = "uart2",
  1101. .class = &uart_class,
  1102. .clkdm_name = "l4ls_clkdm",
  1103. .flags = HWMOD_SWSUP_SIDLE_ACT,
  1104. .main_clk = "dpll_per_m2_div4_ck",
  1105. .prcm = {
  1106. .omap4 = {
  1107. .modulemode = MODULEMODE_SWCTRL,
  1108. },
  1109. },
  1110. };
  1111. /* uart3 */
  1112. struct omap_hwmod am33xx_uart3_hwmod = {
  1113. .name = "uart3",
  1114. .class = &uart_class,
  1115. .clkdm_name = "l4ls_clkdm",
  1116. .flags = HWMOD_SWSUP_SIDLE_ACT,
  1117. .main_clk = "dpll_per_m2_div4_ck",
  1118. .prcm = {
  1119. .omap4 = {
  1120. .modulemode = MODULEMODE_SWCTRL,
  1121. },
  1122. },
  1123. };
  1124. struct omap_hwmod am33xx_uart4_hwmod = {
  1125. .name = "uart4",
  1126. .class = &uart_class,
  1127. .clkdm_name = "l4ls_clkdm",
  1128. .flags = HWMOD_SWSUP_SIDLE_ACT,
  1129. .main_clk = "dpll_per_m2_div4_ck",
  1130. .prcm = {
  1131. .omap4 = {
  1132. .modulemode = MODULEMODE_SWCTRL,
  1133. },
  1134. },
  1135. };
  1136. struct omap_hwmod am33xx_uart5_hwmod = {
  1137. .name = "uart5",
  1138. .class = &uart_class,
  1139. .clkdm_name = "l4ls_clkdm",
  1140. .flags = HWMOD_SWSUP_SIDLE_ACT,
  1141. .main_clk = "dpll_per_m2_div4_ck",
  1142. .prcm = {
  1143. .omap4 = {
  1144. .modulemode = MODULEMODE_SWCTRL,
  1145. },
  1146. },
  1147. };
  1148. struct omap_hwmod am33xx_uart6_hwmod = {
  1149. .name = "uart6",
  1150. .class = &uart_class,
  1151. .clkdm_name = "l4ls_clkdm",
  1152. .flags = HWMOD_SWSUP_SIDLE_ACT,
  1153. .main_clk = "dpll_per_m2_div4_ck",
  1154. .prcm = {
  1155. .omap4 = {
  1156. .modulemode = MODULEMODE_SWCTRL,
  1157. },
  1158. },
  1159. };
  1160. /* 'wd_timer' class */
  1161. static struct omap_hwmod_class_sysconfig wdt_sysc = {
  1162. .rev_offs = 0x0,
  1163. .sysc_offs = 0x10,
  1164. .syss_offs = 0x14,
  1165. .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
  1166. SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
  1167. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  1168. SIDLE_SMART_WKUP),
  1169. .sysc_fields = &omap_hwmod_sysc_type1,
  1170. };
  1171. static struct omap_hwmod_class am33xx_wd_timer_hwmod_class = {
  1172. .name = "wd_timer",
  1173. .sysc = &wdt_sysc,
  1174. .pre_shutdown = &omap2_wd_timer_disable,
  1175. };
  1176. /*
  1177. * XXX: device.c file uses hardcoded name for watchdog timer
  1178. * driver "wd_timer2, so we are also using same name as of now...
  1179. */
  1180. struct omap_hwmod am33xx_wd_timer1_hwmod = {
  1181. .name = "wd_timer2",
  1182. .class = &am33xx_wd_timer_hwmod_class,
  1183. .clkdm_name = "l4_wkup_clkdm",
  1184. .flags = HWMOD_SWSUP_SIDLE,
  1185. .main_clk = "wdt1_fck",
  1186. .prcm = {
  1187. .omap4 = {
  1188. .modulemode = MODULEMODE_SWCTRL,
  1189. },
  1190. },
  1191. };
  1192. static void omap_hwmod_am33xx_clkctrl(void)
  1193. {
  1194. CLKCTRL(am33xx_uart2_hwmod, AM33XX_CM_PER_UART1_CLKCTRL_OFFSET);
  1195. CLKCTRL(am33xx_uart3_hwmod, AM33XX_CM_PER_UART2_CLKCTRL_OFFSET);
  1196. CLKCTRL(am33xx_uart4_hwmod, AM33XX_CM_PER_UART3_CLKCTRL_OFFSET);
  1197. CLKCTRL(am33xx_uart5_hwmod, AM33XX_CM_PER_UART4_CLKCTRL_OFFSET);
  1198. CLKCTRL(am33xx_uart6_hwmod, AM33XX_CM_PER_UART5_CLKCTRL_OFFSET);
  1199. CLKCTRL(am33xx_dcan0_hwmod, AM33XX_CM_PER_DCAN0_CLKCTRL_OFFSET);
  1200. CLKCTRL(am33xx_dcan1_hwmod, AM33XX_CM_PER_DCAN1_CLKCTRL_OFFSET);
  1201. CLKCTRL(am33xx_elm_hwmod, AM33XX_CM_PER_ELM_CLKCTRL_OFFSET);
  1202. CLKCTRL(am33xx_epwmss0_hwmod, AM33XX_CM_PER_EPWMSS0_CLKCTRL_OFFSET);
  1203. CLKCTRL(am33xx_epwmss1_hwmod, AM33XX_CM_PER_EPWMSS1_CLKCTRL_OFFSET);
  1204. CLKCTRL(am33xx_epwmss2_hwmod, AM33XX_CM_PER_EPWMSS2_CLKCTRL_OFFSET);
  1205. CLKCTRL(am33xx_gpio1_hwmod, AM33XX_CM_PER_GPIO1_CLKCTRL_OFFSET);
  1206. CLKCTRL(am33xx_gpio2_hwmod, AM33XX_CM_PER_GPIO2_CLKCTRL_OFFSET);
  1207. CLKCTRL(am33xx_gpio3_hwmod, AM33XX_CM_PER_GPIO3_CLKCTRL_OFFSET);
  1208. CLKCTRL(am33xx_i2c2_hwmod, AM33XX_CM_PER_I2C1_CLKCTRL_OFFSET);
  1209. CLKCTRL(am33xx_i2c3_hwmod, AM33XX_CM_PER_I2C2_CLKCTRL_OFFSET);
  1210. CLKCTRL(am33xx_mailbox_hwmod, AM33XX_CM_PER_MAILBOX0_CLKCTRL_OFFSET);
  1211. CLKCTRL(am33xx_mcasp0_hwmod, AM33XX_CM_PER_MCASP0_CLKCTRL_OFFSET);
  1212. CLKCTRL(am33xx_mcasp1_hwmod, AM33XX_CM_PER_MCASP1_CLKCTRL_OFFSET);
  1213. CLKCTRL(am33xx_mmc0_hwmod, AM33XX_CM_PER_MMC0_CLKCTRL_OFFSET);
  1214. CLKCTRL(am33xx_mmc1_hwmod, AM33XX_CM_PER_MMC1_CLKCTRL_OFFSET);
  1215. CLKCTRL(am33xx_spi0_hwmod, AM33XX_CM_PER_SPI0_CLKCTRL_OFFSET);
  1216. CLKCTRL(am33xx_spi1_hwmod, AM33XX_CM_PER_SPI1_CLKCTRL_OFFSET);
  1217. CLKCTRL(am33xx_spinlock_hwmod, AM33XX_CM_PER_SPINLOCK_CLKCTRL_OFFSET);
  1218. CLKCTRL(am33xx_timer2_hwmod, AM33XX_CM_PER_TIMER2_CLKCTRL_OFFSET);
  1219. CLKCTRL(am33xx_timer3_hwmod, AM33XX_CM_PER_TIMER3_CLKCTRL_OFFSET);
  1220. CLKCTRL(am33xx_timer4_hwmod, AM33XX_CM_PER_TIMER4_CLKCTRL_OFFSET);
  1221. CLKCTRL(am33xx_timer5_hwmod, AM33XX_CM_PER_TIMER5_CLKCTRL_OFFSET);
  1222. CLKCTRL(am33xx_timer6_hwmod, AM33XX_CM_PER_TIMER6_CLKCTRL_OFFSET);
  1223. CLKCTRL(am33xx_timer7_hwmod, AM33XX_CM_PER_TIMER7_CLKCTRL_OFFSET);
  1224. CLKCTRL(am33xx_smartreflex0_hwmod,
  1225. AM33XX_CM_WKUP_SMARTREFLEX0_CLKCTRL_OFFSET);
  1226. CLKCTRL(am33xx_smartreflex1_hwmod,
  1227. AM33XX_CM_WKUP_SMARTREFLEX1_CLKCTRL_OFFSET);
  1228. CLKCTRL(am33xx_uart1_hwmod, AM33XX_CM_WKUP_UART0_CLKCTRL_OFFSET);
  1229. CLKCTRL(am33xx_timer1_hwmod, AM33XX_CM_WKUP_TIMER1_CLKCTRL_OFFSET);
  1230. CLKCTRL(am33xx_i2c1_hwmod, AM33XX_CM_WKUP_I2C0_CLKCTRL_OFFSET);
  1231. CLKCTRL(am33xx_wd_timer1_hwmod, AM33XX_CM_WKUP_WDT1_CLKCTRL_OFFSET);
  1232. CLKCTRL(am33xx_rtc_hwmod, AM33XX_CM_RTC_RTC_CLKCTRL_OFFSET);
  1233. CLKCTRL(am33xx_mmc2_hwmod, AM33XX_CM_PER_MMC2_CLKCTRL_OFFSET);
  1234. CLKCTRL(am33xx_gpmc_hwmod, AM33XX_CM_PER_GPMC_CLKCTRL_OFFSET);
  1235. CLKCTRL(am33xx_l4_ls_hwmod, AM33XX_CM_PER_L4LS_CLKCTRL_OFFSET);
  1236. CLKCTRL(am33xx_l4_wkup_hwmod, AM33XX_CM_WKUP_L4WKUP_CLKCTRL_OFFSET);
  1237. CLKCTRL(am33xx_l3_main_hwmod, AM33XX_CM_PER_L3_CLKCTRL_OFFSET);
  1238. CLKCTRL(am33xx_tpcc_hwmod, AM33XX_CM_PER_TPCC_CLKCTRL_OFFSET);
  1239. CLKCTRL(am33xx_tptc0_hwmod, AM33XX_CM_PER_TPTC0_CLKCTRL_OFFSET);
  1240. CLKCTRL(am33xx_tptc1_hwmod, AM33XX_CM_PER_TPTC1_CLKCTRL_OFFSET);
  1241. CLKCTRL(am33xx_tptc2_hwmod, AM33XX_CM_PER_TPTC2_CLKCTRL_OFFSET);
  1242. CLKCTRL(am33xx_gfx_hwmod, AM33XX_CM_GFX_GFX_CLKCTRL_OFFSET);
  1243. CLKCTRL(am33xx_cpgmac0_hwmod, AM33XX_CM_PER_CPGMAC0_CLKCTRL_OFFSET);
  1244. CLKCTRL(am33xx_pruss_hwmod, AM33XX_CM_PER_PRUSS_CLKCTRL_OFFSET);
  1245. CLKCTRL(am33xx_mpu_hwmod , AM33XX_CM_MPU_MPU_CLKCTRL_OFFSET);
  1246. CLKCTRL(am33xx_l3_instr_hwmod , AM33XX_CM_PER_L3_INSTR_CLKCTRL_OFFSET);
  1247. CLKCTRL(am33xx_ocmcram_hwmod , AM33XX_CM_PER_OCMCRAM_CLKCTRL_OFFSET);
  1248. CLKCTRL(am33xx_sha0_hwmod , AM33XX_CM_PER_SHA0_CLKCTRL_OFFSET);
  1249. CLKCTRL(am33xx_aes0_hwmod , AM33XX_CM_PER_AES0_CLKCTRL_OFFSET);
  1250. }
  1251. static void omap_hwmod_am33xx_rst(void)
  1252. {
  1253. RSTCTRL(am33xx_pruss_hwmod, AM33XX_RM_PER_RSTCTRL_OFFSET);
  1254. RSTCTRL(am33xx_gfx_hwmod, AM33XX_RM_GFX_RSTCTRL_OFFSET);
  1255. RSTST(am33xx_gfx_hwmod, AM33XX_RM_GFX_RSTST_OFFSET);
  1256. }
  1257. void omap_hwmod_am33xx_reg(void)
  1258. {
  1259. omap_hwmod_am33xx_clkctrl();
  1260. omap_hwmod_am33xx_rst();
  1261. }
  1262. static void omap_hwmod_am43xx_clkctrl(void)
  1263. {
  1264. CLKCTRL(am33xx_uart2_hwmod, AM43XX_CM_PER_UART1_CLKCTRL_OFFSET);
  1265. CLKCTRL(am33xx_uart3_hwmod, AM43XX_CM_PER_UART2_CLKCTRL_OFFSET);
  1266. CLKCTRL(am33xx_uart4_hwmod, AM43XX_CM_PER_UART3_CLKCTRL_OFFSET);
  1267. CLKCTRL(am33xx_uart5_hwmod, AM43XX_CM_PER_UART4_CLKCTRL_OFFSET);
  1268. CLKCTRL(am33xx_uart6_hwmod, AM43XX_CM_PER_UART5_CLKCTRL_OFFSET);
  1269. CLKCTRL(am33xx_dcan0_hwmod, AM43XX_CM_PER_DCAN0_CLKCTRL_OFFSET);
  1270. CLKCTRL(am33xx_dcan1_hwmod, AM43XX_CM_PER_DCAN1_CLKCTRL_OFFSET);
  1271. CLKCTRL(am33xx_elm_hwmod, AM43XX_CM_PER_ELM_CLKCTRL_OFFSET);
  1272. CLKCTRL(am33xx_epwmss0_hwmod, AM43XX_CM_PER_EPWMSS0_CLKCTRL_OFFSET);
  1273. CLKCTRL(am33xx_epwmss1_hwmod, AM43XX_CM_PER_EPWMSS1_CLKCTRL_OFFSET);
  1274. CLKCTRL(am33xx_epwmss2_hwmod, AM43XX_CM_PER_EPWMSS2_CLKCTRL_OFFSET);
  1275. CLKCTRL(am33xx_gpio1_hwmod, AM43XX_CM_PER_GPIO1_CLKCTRL_OFFSET);
  1276. CLKCTRL(am33xx_gpio2_hwmod, AM43XX_CM_PER_GPIO2_CLKCTRL_OFFSET);
  1277. CLKCTRL(am33xx_gpio3_hwmod, AM43XX_CM_PER_GPIO3_CLKCTRL_OFFSET);
  1278. CLKCTRL(am33xx_i2c2_hwmod, AM43XX_CM_PER_I2C1_CLKCTRL_OFFSET);
  1279. CLKCTRL(am33xx_i2c3_hwmod, AM43XX_CM_PER_I2C2_CLKCTRL_OFFSET);
  1280. CLKCTRL(am33xx_mailbox_hwmod, AM43XX_CM_PER_MAILBOX0_CLKCTRL_OFFSET);
  1281. CLKCTRL(am33xx_mcasp0_hwmod, AM43XX_CM_PER_MCASP0_CLKCTRL_OFFSET);
  1282. CLKCTRL(am33xx_mcasp1_hwmod, AM43XX_CM_PER_MCASP1_CLKCTRL_OFFSET);
  1283. CLKCTRL(am33xx_mmc0_hwmod, AM43XX_CM_PER_MMC0_CLKCTRL_OFFSET);
  1284. CLKCTRL(am33xx_mmc1_hwmod, AM43XX_CM_PER_MMC1_CLKCTRL_OFFSET);
  1285. CLKCTRL(am33xx_spi0_hwmod, AM43XX_CM_PER_SPI0_CLKCTRL_OFFSET);
  1286. CLKCTRL(am33xx_spi1_hwmod, AM43XX_CM_PER_SPI1_CLKCTRL_OFFSET);
  1287. CLKCTRL(am33xx_spinlock_hwmod, AM43XX_CM_PER_SPINLOCK_CLKCTRL_OFFSET);
  1288. CLKCTRL(am33xx_timer2_hwmod, AM43XX_CM_PER_TIMER2_CLKCTRL_OFFSET);
  1289. CLKCTRL(am33xx_timer3_hwmod, AM43XX_CM_PER_TIMER3_CLKCTRL_OFFSET);
  1290. CLKCTRL(am33xx_timer4_hwmod, AM43XX_CM_PER_TIMER4_CLKCTRL_OFFSET);
  1291. CLKCTRL(am33xx_timer5_hwmod, AM43XX_CM_PER_TIMER5_CLKCTRL_OFFSET);
  1292. CLKCTRL(am33xx_timer6_hwmod, AM43XX_CM_PER_TIMER6_CLKCTRL_OFFSET);
  1293. CLKCTRL(am33xx_timer7_hwmod, AM43XX_CM_PER_TIMER7_CLKCTRL_OFFSET);
  1294. CLKCTRL(am33xx_smartreflex0_hwmod,
  1295. AM43XX_CM_WKUP_SMARTREFLEX0_CLKCTRL_OFFSET);
  1296. CLKCTRL(am33xx_smartreflex1_hwmod,
  1297. AM43XX_CM_WKUP_SMARTREFLEX1_CLKCTRL_OFFSET);
  1298. CLKCTRL(am33xx_uart1_hwmod, AM43XX_CM_WKUP_UART0_CLKCTRL_OFFSET);
  1299. CLKCTRL(am33xx_timer1_hwmod, AM43XX_CM_WKUP_TIMER1_CLKCTRL_OFFSET);
  1300. CLKCTRL(am33xx_i2c1_hwmod, AM43XX_CM_WKUP_I2C0_CLKCTRL_OFFSET);
  1301. CLKCTRL(am33xx_wd_timer1_hwmod, AM43XX_CM_WKUP_WDT1_CLKCTRL_OFFSET);
  1302. CLKCTRL(am33xx_rtc_hwmod, AM43XX_CM_RTC_RTC_CLKCTRL_OFFSET);
  1303. CLKCTRL(am33xx_mmc2_hwmod, AM43XX_CM_PER_MMC2_CLKCTRL_OFFSET);
  1304. CLKCTRL(am33xx_gpmc_hwmod, AM43XX_CM_PER_GPMC_CLKCTRL_OFFSET);
  1305. CLKCTRL(am33xx_l4_ls_hwmod, AM43XX_CM_PER_L4LS_CLKCTRL_OFFSET);
  1306. CLKCTRL(am33xx_l4_wkup_hwmod, AM43XX_CM_WKUP_L4WKUP_CLKCTRL_OFFSET);
  1307. CLKCTRL(am33xx_l3_main_hwmod, AM43XX_CM_PER_L3_CLKCTRL_OFFSET);
  1308. CLKCTRL(am33xx_tpcc_hwmod, AM43XX_CM_PER_TPCC_CLKCTRL_OFFSET);
  1309. CLKCTRL(am33xx_tptc0_hwmod, AM43XX_CM_PER_TPTC0_CLKCTRL_OFFSET);
  1310. CLKCTRL(am33xx_tptc1_hwmod, AM43XX_CM_PER_TPTC1_CLKCTRL_OFFSET);
  1311. CLKCTRL(am33xx_tptc2_hwmod, AM43XX_CM_PER_TPTC2_CLKCTRL_OFFSET);
  1312. CLKCTRL(am33xx_gfx_hwmod, AM43XX_CM_GFX_GFX_CLKCTRL_OFFSET);
  1313. CLKCTRL(am33xx_cpgmac0_hwmod, AM43XX_CM_PER_CPGMAC0_CLKCTRL_OFFSET);
  1314. CLKCTRL(am33xx_pruss_hwmod, AM43XX_CM_PER_PRUSS_CLKCTRL_OFFSET);
  1315. CLKCTRL(am33xx_mpu_hwmod , AM43XX_CM_MPU_MPU_CLKCTRL_OFFSET);
  1316. CLKCTRL(am33xx_l3_instr_hwmod , AM43XX_CM_PER_L3_INSTR_CLKCTRL_OFFSET);
  1317. CLKCTRL(am33xx_ocmcram_hwmod , AM43XX_CM_PER_OCMCRAM_CLKCTRL_OFFSET);
  1318. CLKCTRL(am33xx_sha0_hwmod , AM43XX_CM_PER_SHA0_CLKCTRL_OFFSET);
  1319. CLKCTRL(am33xx_aes0_hwmod , AM43XX_CM_PER_AES0_CLKCTRL_OFFSET);
  1320. }
  1321. static void omap_hwmod_am43xx_rst(void)
  1322. {
  1323. RSTCTRL(am33xx_pruss_hwmod, AM43XX_RM_PER_RSTCTRL_OFFSET);
  1324. RSTCTRL(am33xx_gfx_hwmod, AM43XX_RM_GFX_RSTCTRL_OFFSET);
  1325. RSTST(am33xx_gfx_hwmod, AM43XX_RM_GFX_RSTST_OFFSET);
  1326. }
  1327. void omap_hwmod_am43xx_reg(void)
  1328. {
  1329. omap_hwmod_am43xx_clkctrl();
  1330. omap_hwmod_am43xx_rst();
  1331. }