omap_hwmod_33xx_43xx_ipblock_data.c 36 KB

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