k3-psil-j721e.c 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com
  4. * Author: Peter Ujfalusi <[email protected]>
  5. */
  6. #include <linux/kernel.h>
  7. #include "k3-psil-priv.h"
  8. #define PSIL_PDMA_XY_TR(x) \
  9. { \
  10. .thread_id = x, \
  11. .ep_config = { \
  12. .ep_type = PSIL_EP_PDMA_XY, \
  13. }, \
  14. }
  15. #define PSIL_PDMA_XY_PKT(x) \
  16. { \
  17. .thread_id = x, \
  18. .ep_config = { \
  19. .ep_type = PSIL_EP_PDMA_XY, \
  20. .pkt_mode = 1, \
  21. }, \
  22. }
  23. #define PSIL_PDMA_MCASP(x) \
  24. { \
  25. .thread_id = x, \
  26. .ep_config = { \
  27. .ep_type = PSIL_EP_PDMA_XY, \
  28. .pdma_acc32 = 1, \
  29. .pdma_burst = 1, \
  30. }, \
  31. }
  32. #define PSIL_ETHERNET(x) \
  33. { \
  34. .thread_id = x, \
  35. .ep_config = { \
  36. .ep_type = PSIL_EP_NATIVE, \
  37. .pkt_mode = 1, \
  38. .needs_epib = 1, \
  39. .psd_size = 16, \
  40. }, \
  41. }
  42. #define PSIL_SA2UL(x, tx) \
  43. { \
  44. .thread_id = x, \
  45. .ep_config = { \
  46. .ep_type = PSIL_EP_NATIVE, \
  47. .pkt_mode = 1, \
  48. .needs_epib = 1, \
  49. .psd_size = 64, \
  50. .notdpkt = tx, \
  51. }, \
  52. }
  53. #define PSIL_CSI2RX(x) \
  54. { \
  55. .thread_id = x, \
  56. .ep_config = { \
  57. .ep_type = PSIL_EP_NATIVE, \
  58. }, \
  59. }
  60. /* PSI-L source thread IDs, used for RX (DMA_DEV_TO_MEM) */
  61. static struct psil_ep j721e_src_ep_map[] = {
  62. /* SA2UL */
  63. PSIL_SA2UL(0x4000, 0),
  64. PSIL_SA2UL(0x4001, 0),
  65. PSIL_SA2UL(0x4002, 0),
  66. PSIL_SA2UL(0x4003, 0),
  67. /* PRU_ICSSG0 */
  68. PSIL_ETHERNET(0x4100),
  69. PSIL_ETHERNET(0x4101),
  70. PSIL_ETHERNET(0x4102),
  71. PSIL_ETHERNET(0x4103),
  72. /* PRU_ICSSG1 */
  73. PSIL_ETHERNET(0x4200),
  74. PSIL_ETHERNET(0x4201),
  75. PSIL_ETHERNET(0x4202),
  76. PSIL_ETHERNET(0x4203),
  77. /* PDMA6 (PSIL_PDMA_MCASP_G0) - McASP0-2 */
  78. PSIL_PDMA_MCASP(0x4400),
  79. PSIL_PDMA_MCASP(0x4401),
  80. PSIL_PDMA_MCASP(0x4402),
  81. /* PDMA7 (PSIL_PDMA_MCASP_G1) - McASP3-11 */
  82. PSIL_PDMA_MCASP(0x4500),
  83. PSIL_PDMA_MCASP(0x4501),
  84. PSIL_PDMA_MCASP(0x4502),
  85. PSIL_PDMA_MCASP(0x4503),
  86. PSIL_PDMA_MCASP(0x4504),
  87. PSIL_PDMA_MCASP(0x4505),
  88. PSIL_PDMA_MCASP(0x4506),
  89. PSIL_PDMA_MCASP(0x4507),
  90. PSIL_PDMA_MCASP(0x4508),
  91. /* PDMA8 (PDMA_MISC_G0) - SPI0-1 */
  92. PSIL_PDMA_XY_PKT(0x4600),
  93. PSIL_PDMA_XY_PKT(0x4601),
  94. PSIL_PDMA_XY_PKT(0x4602),
  95. PSIL_PDMA_XY_PKT(0x4603),
  96. PSIL_PDMA_XY_PKT(0x4604),
  97. PSIL_PDMA_XY_PKT(0x4605),
  98. PSIL_PDMA_XY_PKT(0x4606),
  99. PSIL_PDMA_XY_PKT(0x4607),
  100. /* PDMA9 (PDMA_MISC_G1) - SPI2-3 */
  101. PSIL_PDMA_XY_PKT(0x460c),
  102. PSIL_PDMA_XY_PKT(0x460d),
  103. PSIL_PDMA_XY_PKT(0x460e),
  104. PSIL_PDMA_XY_PKT(0x460f),
  105. PSIL_PDMA_XY_PKT(0x4610),
  106. PSIL_PDMA_XY_PKT(0x4611),
  107. PSIL_PDMA_XY_PKT(0x4612),
  108. PSIL_PDMA_XY_PKT(0x4613),
  109. /* PDMA10 (PDMA_MISC_G2) - SPI4-5 */
  110. PSIL_PDMA_XY_PKT(0x4618),
  111. PSIL_PDMA_XY_PKT(0x4619),
  112. PSIL_PDMA_XY_PKT(0x461a),
  113. PSIL_PDMA_XY_PKT(0x461b),
  114. PSIL_PDMA_XY_PKT(0x461c),
  115. PSIL_PDMA_XY_PKT(0x461d),
  116. PSIL_PDMA_XY_PKT(0x461e),
  117. PSIL_PDMA_XY_PKT(0x461f),
  118. /* PDMA11 (PDMA_MISC_G3) */
  119. PSIL_PDMA_XY_PKT(0x4624),
  120. PSIL_PDMA_XY_PKT(0x4625),
  121. PSIL_PDMA_XY_PKT(0x4626),
  122. PSIL_PDMA_XY_PKT(0x4627),
  123. PSIL_PDMA_XY_PKT(0x4628),
  124. PSIL_PDMA_XY_PKT(0x4629),
  125. PSIL_PDMA_XY_PKT(0x4630),
  126. PSIL_PDMA_XY_PKT(0x463a),
  127. /* PDMA13 (PDMA_USART_G0) - UART0-1 */
  128. PSIL_PDMA_XY_PKT(0x4700),
  129. PSIL_PDMA_XY_PKT(0x4701),
  130. /* PDMA14 (PDMA_USART_G1) - UART2-3 */
  131. PSIL_PDMA_XY_PKT(0x4702),
  132. PSIL_PDMA_XY_PKT(0x4703),
  133. /* PDMA15 (PDMA_USART_G2) - UART4-9 */
  134. PSIL_PDMA_XY_PKT(0x4704),
  135. PSIL_PDMA_XY_PKT(0x4705),
  136. PSIL_PDMA_XY_PKT(0x4706),
  137. PSIL_PDMA_XY_PKT(0x4707),
  138. PSIL_PDMA_XY_PKT(0x4708),
  139. PSIL_PDMA_XY_PKT(0x4709),
  140. /* CSI2RX */
  141. PSIL_CSI2RX(0x4940),
  142. PSIL_CSI2RX(0x4941),
  143. PSIL_CSI2RX(0x4942),
  144. PSIL_CSI2RX(0x4943),
  145. PSIL_CSI2RX(0x4944),
  146. PSIL_CSI2RX(0x4945),
  147. PSIL_CSI2RX(0x4946),
  148. PSIL_CSI2RX(0x4947),
  149. PSIL_CSI2RX(0x4948),
  150. PSIL_CSI2RX(0x4949),
  151. PSIL_CSI2RX(0x494a),
  152. PSIL_CSI2RX(0x494b),
  153. PSIL_CSI2RX(0x494c),
  154. PSIL_CSI2RX(0x494d),
  155. PSIL_CSI2RX(0x494e),
  156. PSIL_CSI2RX(0x494f),
  157. PSIL_CSI2RX(0x4950),
  158. PSIL_CSI2RX(0x4951),
  159. PSIL_CSI2RX(0x4952),
  160. PSIL_CSI2RX(0x4953),
  161. PSIL_CSI2RX(0x4954),
  162. PSIL_CSI2RX(0x4955),
  163. PSIL_CSI2RX(0x4956),
  164. PSIL_CSI2RX(0x4957),
  165. PSIL_CSI2RX(0x4958),
  166. PSIL_CSI2RX(0x4959),
  167. PSIL_CSI2RX(0x495a),
  168. PSIL_CSI2RX(0x495b),
  169. PSIL_CSI2RX(0x495c),
  170. PSIL_CSI2RX(0x495d),
  171. PSIL_CSI2RX(0x495e),
  172. PSIL_CSI2RX(0x495f),
  173. PSIL_CSI2RX(0x4960),
  174. PSIL_CSI2RX(0x4961),
  175. PSIL_CSI2RX(0x4962),
  176. PSIL_CSI2RX(0x4963),
  177. PSIL_CSI2RX(0x4964),
  178. PSIL_CSI2RX(0x4965),
  179. PSIL_CSI2RX(0x4966),
  180. PSIL_CSI2RX(0x4967),
  181. PSIL_CSI2RX(0x4968),
  182. PSIL_CSI2RX(0x4969),
  183. PSIL_CSI2RX(0x496a),
  184. PSIL_CSI2RX(0x496b),
  185. PSIL_CSI2RX(0x496c),
  186. PSIL_CSI2RX(0x496d),
  187. PSIL_CSI2RX(0x496e),
  188. PSIL_CSI2RX(0x496f),
  189. PSIL_CSI2RX(0x4970),
  190. PSIL_CSI2RX(0x4971),
  191. PSIL_CSI2RX(0x4972),
  192. PSIL_CSI2RX(0x4973),
  193. PSIL_CSI2RX(0x4974),
  194. PSIL_CSI2RX(0x4975),
  195. PSIL_CSI2RX(0x4976),
  196. PSIL_CSI2RX(0x4977),
  197. PSIL_CSI2RX(0x4978),
  198. PSIL_CSI2RX(0x4979),
  199. PSIL_CSI2RX(0x497a),
  200. PSIL_CSI2RX(0x497b),
  201. PSIL_CSI2RX(0x497c),
  202. PSIL_CSI2RX(0x497d),
  203. PSIL_CSI2RX(0x497e),
  204. PSIL_CSI2RX(0x497f),
  205. /* CPSW9 */
  206. PSIL_ETHERNET(0x4a00),
  207. /* CPSW0 */
  208. PSIL_ETHERNET(0x7000),
  209. /* MCU_PDMA0 (MCU_PDMA_MISC_G0) - SPI0 */
  210. PSIL_PDMA_XY_PKT(0x7100),
  211. PSIL_PDMA_XY_PKT(0x7101),
  212. PSIL_PDMA_XY_PKT(0x7102),
  213. PSIL_PDMA_XY_PKT(0x7103),
  214. /* MCU_PDMA1 (MCU_PDMA_MISC_G1) - SPI1-2 */
  215. PSIL_PDMA_XY_PKT(0x7200),
  216. PSIL_PDMA_XY_PKT(0x7201),
  217. PSIL_PDMA_XY_PKT(0x7202),
  218. PSIL_PDMA_XY_PKT(0x7203),
  219. PSIL_PDMA_XY_PKT(0x7204),
  220. PSIL_PDMA_XY_PKT(0x7205),
  221. PSIL_PDMA_XY_PKT(0x7206),
  222. PSIL_PDMA_XY_PKT(0x7207),
  223. /* MCU_PDMA2 (MCU_PDMA_MISC_G2) - UART0 */
  224. PSIL_PDMA_XY_PKT(0x7300),
  225. /* MCU_PDMA_ADC - ADC0-1 */
  226. PSIL_PDMA_XY_TR(0x7400),
  227. PSIL_PDMA_XY_TR(0x7401),
  228. PSIL_PDMA_XY_TR(0x7402),
  229. PSIL_PDMA_XY_TR(0x7403),
  230. /* SA2UL */
  231. PSIL_SA2UL(0x7500, 0),
  232. PSIL_SA2UL(0x7501, 0),
  233. PSIL_SA2UL(0x7502, 0),
  234. PSIL_SA2UL(0x7503, 0),
  235. };
  236. /* PSI-L destination thread IDs, used for TX (DMA_MEM_TO_DEV) */
  237. static struct psil_ep j721e_dst_ep_map[] = {
  238. /* SA2UL */
  239. PSIL_SA2UL(0xc000, 1),
  240. PSIL_SA2UL(0xc001, 1),
  241. /* PRU_ICSSG0 */
  242. PSIL_ETHERNET(0xc100),
  243. PSIL_ETHERNET(0xc101),
  244. PSIL_ETHERNET(0xc102),
  245. PSIL_ETHERNET(0xc103),
  246. PSIL_ETHERNET(0xc104),
  247. PSIL_ETHERNET(0xc105),
  248. PSIL_ETHERNET(0xc106),
  249. PSIL_ETHERNET(0xc107),
  250. /* PRU_ICSSG1 */
  251. PSIL_ETHERNET(0xc200),
  252. PSIL_ETHERNET(0xc201),
  253. PSIL_ETHERNET(0xc202),
  254. PSIL_ETHERNET(0xc203),
  255. PSIL_ETHERNET(0xc204),
  256. PSIL_ETHERNET(0xc205),
  257. PSIL_ETHERNET(0xc206),
  258. PSIL_ETHERNET(0xc207),
  259. /* PDMA6 (PSIL_PDMA_MCASP_G0) - McASP0-2 */
  260. PSIL_PDMA_MCASP(0xc400),
  261. PSIL_PDMA_MCASP(0xc401),
  262. PSIL_PDMA_MCASP(0xc402),
  263. /* PDMA7 (PSIL_PDMA_MCASP_G1) - McASP3-11 */
  264. PSIL_PDMA_MCASP(0xc500),
  265. PSIL_PDMA_MCASP(0xc501),
  266. PSIL_PDMA_MCASP(0xc502),
  267. PSIL_PDMA_MCASP(0xc503),
  268. PSIL_PDMA_MCASP(0xc504),
  269. PSIL_PDMA_MCASP(0xc505),
  270. PSIL_PDMA_MCASP(0xc506),
  271. PSIL_PDMA_MCASP(0xc507),
  272. PSIL_PDMA_MCASP(0xc508),
  273. /* PDMA8 (PDMA_MISC_G0) - SPI0-1 */
  274. PSIL_PDMA_XY_PKT(0xc600),
  275. PSIL_PDMA_XY_PKT(0xc601),
  276. PSIL_PDMA_XY_PKT(0xc602),
  277. PSIL_PDMA_XY_PKT(0xc603),
  278. PSIL_PDMA_XY_PKT(0xc604),
  279. PSIL_PDMA_XY_PKT(0xc605),
  280. PSIL_PDMA_XY_PKT(0xc606),
  281. PSIL_PDMA_XY_PKT(0xc607),
  282. /* PDMA9 (PDMA_MISC_G1) - SPI2-3 */
  283. PSIL_PDMA_XY_PKT(0xc60c),
  284. PSIL_PDMA_XY_PKT(0xc60d),
  285. PSIL_PDMA_XY_PKT(0xc60e),
  286. PSIL_PDMA_XY_PKT(0xc60f),
  287. PSIL_PDMA_XY_PKT(0xc610),
  288. PSIL_PDMA_XY_PKT(0xc611),
  289. PSIL_PDMA_XY_PKT(0xc612),
  290. PSIL_PDMA_XY_PKT(0xc613),
  291. /* PDMA10 (PDMA_MISC_G2) - SPI4-5 */
  292. PSIL_PDMA_XY_PKT(0xc618),
  293. PSIL_PDMA_XY_PKT(0xc619),
  294. PSIL_PDMA_XY_PKT(0xc61a),
  295. PSIL_PDMA_XY_PKT(0xc61b),
  296. PSIL_PDMA_XY_PKT(0xc61c),
  297. PSIL_PDMA_XY_PKT(0xc61d),
  298. PSIL_PDMA_XY_PKT(0xc61e),
  299. PSIL_PDMA_XY_PKT(0xc61f),
  300. /* PDMA11 (PDMA_MISC_G3) */
  301. PSIL_PDMA_XY_PKT(0xc624),
  302. PSIL_PDMA_XY_PKT(0xc625),
  303. PSIL_PDMA_XY_PKT(0xc626),
  304. PSIL_PDMA_XY_PKT(0xc627),
  305. PSIL_PDMA_XY_PKT(0xc628),
  306. PSIL_PDMA_XY_PKT(0xc629),
  307. PSIL_PDMA_XY_PKT(0xc630),
  308. PSIL_PDMA_XY_PKT(0xc63a),
  309. /* PDMA13 (PDMA_USART_G0) - UART0-1 */
  310. PSIL_PDMA_XY_PKT(0xc700),
  311. PSIL_PDMA_XY_PKT(0xc701),
  312. /* PDMA14 (PDMA_USART_G1) - UART2-3 */
  313. PSIL_PDMA_XY_PKT(0xc702),
  314. PSIL_PDMA_XY_PKT(0xc703),
  315. /* PDMA15 (PDMA_USART_G2) - UART4-9 */
  316. PSIL_PDMA_XY_PKT(0xc704),
  317. PSIL_PDMA_XY_PKT(0xc705),
  318. PSIL_PDMA_XY_PKT(0xc706),
  319. PSIL_PDMA_XY_PKT(0xc707),
  320. PSIL_PDMA_XY_PKT(0xc708),
  321. PSIL_PDMA_XY_PKT(0xc709),
  322. /* CPSW9 */
  323. PSIL_ETHERNET(0xca00),
  324. PSIL_ETHERNET(0xca01),
  325. PSIL_ETHERNET(0xca02),
  326. PSIL_ETHERNET(0xca03),
  327. PSIL_ETHERNET(0xca04),
  328. PSIL_ETHERNET(0xca05),
  329. PSIL_ETHERNET(0xca06),
  330. PSIL_ETHERNET(0xca07),
  331. /* CPSW0 */
  332. PSIL_ETHERNET(0xf000),
  333. PSIL_ETHERNET(0xf001),
  334. PSIL_ETHERNET(0xf002),
  335. PSIL_ETHERNET(0xf003),
  336. PSIL_ETHERNET(0xf004),
  337. PSIL_ETHERNET(0xf005),
  338. PSIL_ETHERNET(0xf006),
  339. PSIL_ETHERNET(0xf007),
  340. /* MCU_PDMA0 (MCU_PDMA_MISC_G0) - SPI0 */
  341. PSIL_PDMA_XY_PKT(0xf100),
  342. PSIL_PDMA_XY_PKT(0xf101),
  343. PSIL_PDMA_XY_PKT(0xf102),
  344. PSIL_PDMA_XY_PKT(0xf103),
  345. /* MCU_PDMA1 (MCU_PDMA_MISC_G1) - SPI1-2 */
  346. PSIL_PDMA_XY_PKT(0xf200),
  347. PSIL_PDMA_XY_PKT(0xf201),
  348. PSIL_PDMA_XY_PKT(0xf202),
  349. PSIL_PDMA_XY_PKT(0xf203),
  350. PSIL_PDMA_XY_PKT(0xf204),
  351. PSIL_PDMA_XY_PKT(0xf205),
  352. PSIL_PDMA_XY_PKT(0xf206),
  353. PSIL_PDMA_XY_PKT(0xf207),
  354. /* MCU_PDMA2 (MCU_PDMA_MISC_G2) - UART0 */
  355. PSIL_PDMA_XY_PKT(0xf300),
  356. /* SA2UL */
  357. PSIL_SA2UL(0xf500, 1),
  358. PSIL_SA2UL(0xf501, 1),
  359. };
  360. struct psil_ep_map j721e_ep_map = {
  361. .name = "j721e",
  362. .src = j721e_src_ep_map,
  363. .src_count = ARRAY_SIZE(j721e_src_ep_map),
  364. .dst = j721e_dst_ep_map,
  365. .dst_count = ARRAY_SIZE(j721e_dst_ep_map),
  366. };