pcc.h 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright (C) 2016 Freescale Semiconductor, Inc.
  4. */
  5. #ifndef _ASM_ARCH_PCC_H
  6. #define _ASM_ARCH_PCC_H
  7. #include <common.h>
  8. #include <asm/arch/scg.h>
  9. /* PCC2 */
  10. enum pcc2_entry {
  11. /* On-Platform (32 entries) */
  12. RSVD0_PCC2_SLOT = 0,
  13. RSVD1_PCC2_SLOT = 1,
  14. CA7_GIC_PCC2_SLOT = 2,
  15. RSVD3_PCC2_SLOT = 3,
  16. RSVD4_PCC2_SLOT = 4,
  17. RSVD5_PCC2_SLOT = 5,
  18. RSVD6_PCC2_SLOT = 6,
  19. RSVD7_PCC2_SLOT = 7,
  20. DMA1_PCC2_SLOT = 8,
  21. RSVD9_PCC2_SLOT = 9,
  22. RSVD10_PCC2_SLOT = 10,
  23. RSVD11_PCC2_SLOT = 11,
  24. RSVD12_PCC2_SLOT = 12,
  25. RSVD13_PCC2_SLOT = 13,
  26. RSVD14_PCC2_SLOT = 14,
  27. RGPIO1_PCC2_SLOT = 15,
  28. FLEXBUS0_PCC2_SLOT = 16,
  29. RSVD17_PCC2_SLOT = 17,
  30. RSVD18_PCC2_SLOT = 18,
  31. RSVD19_PCC2_SLOT = 19,
  32. RSVD20_PCC2_SLOT = 20,
  33. RSVD21_PCC2_SLOT = 21,
  34. RSVD22_PCC2_SLOT = 22,
  35. RSVD23_PCC2_SLOT = 23,
  36. RSVD24_PCC2_SLOT = 24,
  37. RSVD25_PCC2_SLOT = 25,
  38. RSVD26_PCC2_SLOT = 26,
  39. SEMA42_1_PCC2_SLOT = 27,
  40. RSVD28_PCC2_SLOT = 28,
  41. RSVD29_PCC2_SLOT = 29,
  42. RSVD30_PCC2_SLOT = 30,
  43. RSVD31_PCC2_SLOT = 31,
  44. /* Off-Platform (96 entries) */
  45. RSVD32_PCC2_SLOT = 32,
  46. DMA1_CH_MUX0_PCC2_SLOT = 33,
  47. MU_B_PCC2_SLOT = 34,
  48. SNVS_PCC2_SLOT = 35,
  49. CAAM_PCC2_SLOT = 36,
  50. LPTPM4_PCC2_SLOT = 37,
  51. LPTPM5_PCC2_SLOT = 38,
  52. LPIT1_PCC2_SLOT = 39,
  53. RSVD40_PCC2_SLOT = 40,
  54. LPSPI2_PCC2_SLOT = 41,
  55. LPSPI3_PCC2_SLOT = 42,
  56. LPI2C4_PCC2_SLOT = 43,
  57. LPI2C5_PCC2_SLOT = 44,
  58. LPUART4_PCC2_SLOT = 45,
  59. LPUART5_PCC2_SLOT = 46,
  60. RSVD47_PCC2_SLOT = 47,
  61. RSVD48_PCC2_SLOT = 48,
  62. FLEXIO1_PCC2_SLOT = 49,
  63. RSVD50_PCC2_SLOT = 50,
  64. USBOTG0_PCC2_SLOT = 51,
  65. USBOTG1_PCC2_SLOT = 52,
  66. USBPHY_PCC2_SLOT = 53,
  67. USB_PL301_PCC2_SLOT = 54,
  68. USDHC0_PCC2_SLOT = 55,
  69. USDHC1_PCC2_SLOT = 56,
  70. RSVD57_PCC2_SLOT = 57,
  71. TRGMUX1_PCC2_SLOT = 58,
  72. RSVD59_PCC2_SLOT = 59,
  73. RSVD60_PCC2_SLOT = 60,
  74. WDG1_PCC2_SLOT = 61,
  75. SCG1_PCC2_SLOT = 62,
  76. PCC2_PCC2_SLOT = 63,
  77. PMC1_PCC2_SLOT = 64,
  78. SMC1_PCC2_SLOT = 65,
  79. RCM1_PCC2_SLOT = 66,
  80. WDG2_PCC2_SLOT = 67,
  81. RSVD68_PCC2_SLOT = 68,
  82. TEST_SPACE1_PCC2_SLOT = 69,
  83. TEST_SPACE2_PCC2_SLOT = 70,
  84. TEST_SPACE3_PCC2_SLOT = 71,
  85. RSVD72_PCC2_SLOT = 72,
  86. RSVD73_PCC2_SLOT = 73,
  87. RSVD74_PCC2_SLOT = 74,
  88. RSVD75_PCC2_SLOT = 75,
  89. RSVD76_PCC2_SLOT = 76,
  90. RSVD77_PCC2_SLOT = 77,
  91. RSVD78_PCC2_SLOT = 78,
  92. RSVD79_PCC2_SLOT = 79,
  93. RSVD80_PCC2_SLOT = 80,
  94. RSVD81_PCC2_SLOT = 81,
  95. RSVD82_PCC2_SLOT = 82,
  96. RSVD83_PCC2_SLOT = 83,
  97. RSVD84_PCC2_SLOT = 84,
  98. RSVD85_PCC2_SLOT = 85,
  99. RSVD86_PCC2_SLOT = 86,
  100. RSVD87_PCC2_SLOT = 87,
  101. RSVD88_PCC2_SLOT = 88,
  102. RSVD89_PCC2_SLOT = 89,
  103. RSVD90_PCC2_SLOT = 90,
  104. RSVD91_PCC2_SLOT = 91,
  105. RSVD92_PCC2_SLOT = 92,
  106. RSVD93_PCC2_SLOT = 93,
  107. RSVD94_PCC2_SLOT = 94,
  108. RSVD95_PCC2_SLOT = 95,
  109. RSVD96_PCC2_SLOT = 96,
  110. RSVD97_PCC2_SLOT = 97,
  111. RSVD98_PCC2_SLOT = 98,
  112. RSVD99_PCC2_SLOT = 99,
  113. RSVD100_PCC2_SLOT = 100,
  114. RSVD101_PCC2_SLOT = 101,
  115. RSVD102_PCC2_SLOT = 102,
  116. RSVD103_PCC2_SLOT = 103,
  117. RSVD104_PCC2_SLOT = 104,
  118. RSVD105_PCC2_SLOT = 105,
  119. RSVD106_PCC2_SLOT = 106,
  120. RSVD107_PCC2_SLOT = 107,
  121. RSVD108_PCC2_SLOT = 108,
  122. RSVD109_PCC2_SLOT = 109,
  123. RSVD110_PCC2_SLOT = 110,
  124. RSVD111_PCC2_SLOT = 111,
  125. RSVD112_PCC2_SLOT = 112,
  126. RSVD113_PCC2_SLOT = 113,
  127. RSVD114_PCC2_SLOT = 114,
  128. RSVD115_PCC2_SLOT = 115,
  129. RSVD116_PCC2_SLOT = 116,
  130. RSVD117_PCC2_SLOT = 117,
  131. RSVD118_PCC2_SLOT = 118,
  132. RSVD119_PCC2_SLOT = 119,
  133. RSVD120_PCC2_SLOT = 120,
  134. RSVD121_PCC2_SLOT = 121,
  135. RSVD122_PCC2_SLOT = 122,
  136. RSVD123_PCC2_SLOT = 123,
  137. RSVD124_PCC2_SLOT = 124,
  138. RSVD125_PCC2_SLOT = 125,
  139. RSVD126_PCC2_SLOT = 126,
  140. RSVD127_PCC2_SLOT = 127,
  141. };
  142. enum pcc3_entry {
  143. /* On-Platform (32 entries) */
  144. RSVD0_PCC3_SLOT = 0,
  145. RSVD1_PCC3_SLOT = 1,
  146. RSVD2_PCC3_SLOT = 2,
  147. RSVD3_PCC3_SLOT = 3,
  148. RSVD4_PCC3_SLOT = 4,
  149. RSVD5_PCC3_SLOT = 5,
  150. RSVD6_PCC3_SLOT = 6,
  151. RSVD7_PCC3_SLOT = 7,
  152. RSVD8_PCC3_SLOT = 8,
  153. RSVD9_PCC3_SLOT = 9,
  154. RSVD10_PCC3_SLOT = 10,
  155. RSVD11_PCC3_SLOT = 11,
  156. RSVD12_PCC3_SLOT = 12,
  157. RSVD13_PCC3_SLOT = 13,
  158. RSVD14_PCC3_SLOT = 14,
  159. RSVD15_PCC3_SLOT = 15,
  160. ROMCP1_PCC3_SLOT = 16,
  161. RSVD17_PCC3_SLOT = 17,
  162. RSVD18_PCC3_SLOT = 18,
  163. RSVD19_PCC3_SLOT = 19,
  164. RSVD20_PCC3_SLOT = 20,
  165. RSVD21_PCC3_SLOT = 21,
  166. RSVD22_PCC3_SLOT = 22,
  167. RSVD23_PCC3_SLOT = 23,
  168. RSVD24_PCC3_SLOT = 24,
  169. RSVD25_PCC3_SLOT = 25,
  170. RSVD26_PCC3_SLOT = 26,
  171. RSVD27_PCC3_SLOT = 27,
  172. RSVD28_PCC3_SLOT = 28,
  173. RSVD29_PCC3_SLOT = 29,
  174. RSVD30_PCC3_SLOT = 30,
  175. RSVD31_PCC3_SLOT = 31,
  176. /* Off-Platform (96 entries) */
  177. RSVD32_PCC3_SLOT = 32,
  178. LPTPM6_PCC3_SLOT = 33,
  179. LPTPM7_PCC3_SLOT = 34,
  180. RSVD35_PCC3_SLOT = 35,
  181. LPI2C6_PCC3_SLOT = 36,
  182. LPI2C7_PCC3_SLOT = 37,
  183. LPUART6_PCC3_SLOT = 38,
  184. LPUART7_PCC3_SLOT = 39,
  185. VIU0_PCC3_SLOT = 40,
  186. DSI0_PCC3_SLOT = 41,
  187. LCDIF0_PCC3_SLOT = 42,
  188. MMDC0_PCC3_SLOT = 43,
  189. IOMUXC1_PCC3_SLOT = 44,
  190. IOMUXC_DDR_PCC3_SLOT = 45,
  191. PORTC_PCC3_SLOT = 46,
  192. PORTD_PCC3_SLOT = 47,
  193. PORTE_PCC3_SLOT = 48,
  194. PORTF_PCC3_SLOT = 49,
  195. RSVD50_PCC3_SLOT = 50,
  196. PCC3_PCC3_SLOT = 51,
  197. RSVD52_PCC3_SLOT = 52,
  198. WKPU_PCC3_SLOT = 53,
  199. RSVD54_PCC3_SLOT = 54,
  200. RSVD55_PCC3_SLOT = 55,
  201. RSVD56_PCC3_SLOT = 56,
  202. RSVD57_PCC3_SLOT = 57,
  203. RSVD58_PCC3_SLOT = 58,
  204. RSVD59_PCC3_SLOT = 59,
  205. RSVD60_PCC3_SLOT = 60,
  206. RSVD61_PCC3_SLOT = 61,
  207. RSVD62_PCC3_SLOT = 62,
  208. RSVD63_PCC3_SLOT = 63,
  209. RSVD64_PCC3_SLOT = 64,
  210. RSVD65_PCC3_SLOT = 65,
  211. RSVD66_PCC3_SLOT = 66,
  212. RSVD67_PCC3_SLOT = 67,
  213. RSVD68_PCC3_SLOT = 68,
  214. RSVD69_PCC3_SLOT = 69,
  215. RSVD70_PCC3_SLOT = 70,
  216. RSVD71_PCC3_SLOT = 71,
  217. RSVD72_PCC3_SLOT = 72,
  218. RSVD73_PCC3_SLOT = 73,
  219. RSVD74_PCC3_SLOT = 74,
  220. RSVD75_PCC3_SLOT = 75,
  221. RSVD76_PCC3_SLOT = 76,
  222. RSVD77_PCC3_SLOT = 77,
  223. RSVD78_PCC3_SLOT = 78,
  224. RSVD79_PCC3_SLOT = 79,
  225. RSVD80_PCC3_SLOT = 80,
  226. GPU3D_PCC3_SLOT = 81,
  227. GPU2D_PCC3_SLOT = 82,
  228. RSVD83_PCC3_SLOT = 83,
  229. RSVD84_PCC3_SLOT = 84,
  230. RSVD85_PCC3_SLOT = 85,
  231. RSVD86_PCC3_SLOT = 86,
  232. RSVD87_PCC3_SLOT = 87,
  233. RSVD88_PCC3_SLOT = 88,
  234. RSVD89_PCC3_SLOT = 89,
  235. RSVD90_PCC3_SLOT = 90,
  236. RSVD91_PCC3_SLOT = 91,
  237. RSVD92_PCC3_SLOT = 92,
  238. RSVD93_PCC3_SLOT = 93,
  239. RSVD94_PCC3_SLOT = 94,
  240. RSVD95_PCC3_SLOT = 95,
  241. RSVD96_PCC3_SLOT = 96,
  242. RSVD97_PCC3_SLOT = 97,
  243. RSVD98_PCC3_SLOT = 98,
  244. RSVD99_PCC3_SLOT = 99,
  245. RSVD100_PCC3_SLOT = 100,
  246. RSVD101_PCC3_SLOT = 101,
  247. RSVD102_PCC3_SLOT = 102,
  248. RSVD103_PCC3_SLOT = 103,
  249. RSVD104_PCC3_SLOT = 104,
  250. RSVD105_PCC3_SLOT = 105,
  251. RSVD106_PCC3_SLOT = 106,
  252. RSVD107_PCC3_SLOT = 107,
  253. RSVD108_PCC3_SLOT = 108,
  254. RSVD109_PCC3_SLOT = 109,
  255. RSVD110_PCC3_SLOT = 110,
  256. RSVD111_PCC3_SLOT = 111,
  257. RSVD112_PCC3_SLOT = 112,
  258. RSVD113_PCC3_SLOT = 113,
  259. RSVD114_PCC3_SLOT = 114,
  260. RSVD115_PCC3_SLOT = 115,
  261. RSVD116_PCC3_SLOT = 116,
  262. RSVD117_PCC3_SLOT = 117,
  263. RSVD118_PCC3_SLOT = 118,
  264. RSVD119_PCC3_SLOT = 119,
  265. RSVD120_PCC3_SLOT = 120,
  266. RSVD121_PCC3_SLOT = 121,
  267. RSVD122_PCC3_SLOT = 122,
  268. RSVD123_PCC3_SLOT = 123,
  269. RSVD124_PCC3_SLOT = 124,
  270. RSVD125_PCC3_SLOT = 125,
  271. RSVD126_PCC3_SLOT = 126,
  272. RSVD127_PCC3_SLOT = 127,
  273. };
  274. /* PCC registers */
  275. #define PCC_PR_OFFSET 31
  276. #define PCC_PR_MASK (0x1 << PCC_PR_OFFSET)
  277. #define PCC_CGC_OFFSET 30
  278. #define PCC_CGC_MASK (0x1 << PCC_CGC_OFFSET)
  279. #define PCC_INUSE_OFFSET 29
  280. #define PCC_INUSE_MASK (0x1 << PCC_INUSE_OFFSET)
  281. #define PCC_PCS_OFFSET 24
  282. #define PCC_PCS_MASK (0x7 << PCC_PCS_OFFSET)
  283. #define PCC_FRAC_OFFSET 4
  284. #define PCC_FRAC_MASK (0x1 << PCC_FRAC_OFFSET)
  285. #define PCC_PCD_OFFSET 0
  286. #define PCC_PCD_MASK (0xf << PCC_PCD_OFFSET)
  287. enum pcc_clksrc_type {
  288. CLKSRC_PER_PLAT = 0,
  289. CLKSRC_PER_BUS = 1,
  290. CLKSRC_NO_PCS = 2,
  291. };
  292. enum pcc_div_type {
  293. PCC_HAS_DIV,
  294. PCC_NO_DIV,
  295. };
  296. /* All peripheral clocks on A7 PCCs */
  297. enum pcc_clk {
  298. /*PCC2 clocks*/
  299. PER_CLK_DMA1 = 0,
  300. PER_CLK_RGPIO2P1,
  301. PER_CLK_FLEXBUS,
  302. PER_CLK_SEMA42_1,
  303. PER_CLK_DMA_MUX1,
  304. PER_CLK_SNVS,
  305. PER_CLK_CAAM,
  306. PER_CLK_LPTPM4,
  307. PER_CLK_LPTPM5,
  308. PER_CLK_LPIT1,
  309. PER_CLK_LPSPI2,
  310. PER_CLK_LPSPI3,
  311. PER_CLK_LPI2C4,
  312. PER_CLK_LPI2C5,
  313. PER_CLK_LPUART4,
  314. PER_CLK_LPUART5,
  315. PER_CLK_FLEXIO1,
  316. PER_CLK_USB0,
  317. PER_CLK_USB1,
  318. PER_CLK_USB_PHY,
  319. PER_CLK_USB_PL301,
  320. PER_CLK_USDHC0,
  321. PER_CLK_USDHC1,
  322. PER_CLK_WDG1,
  323. PER_CLK_WDG2,
  324. /*PCC3 clocks*/
  325. PER_CLK_LPTPM6,
  326. PER_CLK_LPTPM7,
  327. PER_CLK_LPI2C6,
  328. PER_CLK_LPI2C7,
  329. PER_CLK_LPUART6,
  330. PER_CLK_LPUART7,
  331. PER_CLK_VIU,
  332. PER_CLK_DSI,
  333. PER_CLK_LCDIF,
  334. PER_CLK_MMDC,
  335. PER_CLK_PCTLC,
  336. PER_CLK_PCTLD,
  337. PER_CLK_PCTLE,
  338. PER_CLK_PCTLF,
  339. PER_CLK_GPU3D,
  340. PER_CLK_GPU2D,
  341. };
  342. /* This structure keeps info for each pcc slot */
  343. struct pcc_entry {
  344. u32 pcc_base;
  345. u32 pcc_slot;
  346. enum pcc_clksrc_type clksrc;
  347. enum pcc_div_type div;
  348. };
  349. int pcc_clock_enable(enum pcc_clk clk, bool enable);
  350. int pcc_clock_sel(enum pcc_clk clk, enum scg_clk src);
  351. int pcc_clock_div_config(enum pcc_clk clk, bool frac, u8 div);
  352. bool pcc_clock_is_enable(enum pcc_clk clk);
  353. int pcc_clock_get_clksrc(enum pcc_clk clk, enum scg_clk *src);
  354. u32 pcc_clock_get_rate(enum pcc_clk clk);
  355. #endif