coresight-etm-cp14.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (c) 2012, The Linux Foundation. All rights reserved.
  4. */
  5. #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  6. #include <linux/kernel.h>
  7. #include <linux/types.h>
  8. #include <linux/bug.h>
  9. #include <asm/hardware/cp14.h>
  10. #include "coresight-etm.h"
  11. int etm_readl_cp14(u32 reg, unsigned int *val)
  12. {
  13. switch (reg) {
  14. case ETMCR:
  15. *val = etm_read(ETMCR);
  16. return 0;
  17. case ETMCCR:
  18. *val = etm_read(ETMCCR);
  19. return 0;
  20. case ETMTRIGGER:
  21. *val = etm_read(ETMTRIGGER);
  22. return 0;
  23. case ETMSR:
  24. *val = etm_read(ETMSR);
  25. return 0;
  26. case ETMSCR:
  27. *val = etm_read(ETMSCR);
  28. return 0;
  29. case ETMTSSCR:
  30. *val = etm_read(ETMTSSCR);
  31. return 0;
  32. case ETMTEEVR:
  33. *val = etm_read(ETMTEEVR);
  34. return 0;
  35. case ETMTECR1:
  36. *val = etm_read(ETMTECR1);
  37. return 0;
  38. case ETMFFLR:
  39. *val = etm_read(ETMFFLR);
  40. return 0;
  41. case ETMACVRn(0):
  42. *val = etm_read(ETMACVR0);
  43. return 0;
  44. case ETMACVRn(1):
  45. *val = etm_read(ETMACVR1);
  46. return 0;
  47. case ETMACVRn(2):
  48. *val = etm_read(ETMACVR2);
  49. return 0;
  50. case ETMACVRn(3):
  51. *val = etm_read(ETMACVR3);
  52. return 0;
  53. case ETMACVRn(4):
  54. *val = etm_read(ETMACVR4);
  55. return 0;
  56. case ETMACVRn(5):
  57. *val = etm_read(ETMACVR5);
  58. return 0;
  59. case ETMACVRn(6):
  60. *val = etm_read(ETMACVR6);
  61. return 0;
  62. case ETMACVRn(7):
  63. *val = etm_read(ETMACVR7);
  64. return 0;
  65. case ETMACVRn(8):
  66. *val = etm_read(ETMACVR8);
  67. return 0;
  68. case ETMACVRn(9):
  69. *val = etm_read(ETMACVR9);
  70. return 0;
  71. case ETMACVRn(10):
  72. *val = etm_read(ETMACVR10);
  73. return 0;
  74. case ETMACVRn(11):
  75. *val = etm_read(ETMACVR11);
  76. return 0;
  77. case ETMACVRn(12):
  78. *val = etm_read(ETMACVR12);
  79. return 0;
  80. case ETMACVRn(13):
  81. *val = etm_read(ETMACVR13);
  82. return 0;
  83. case ETMACVRn(14):
  84. *val = etm_read(ETMACVR14);
  85. return 0;
  86. case ETMACVRn(15):
  87. *val = etm_read(ETMACVR15);
  88. return 0;
  89. case ETMACTRn(0):
  90. *val = etm_read(ETMACTR0);
  91. return 0;
  92. case ETMACTRn(1):
  93. *val = etm_read(ETMACTR1);
  94. return 0;
  95. case ETMACTRn(2):
  96. *val = etm_read(ETMACTR2);
  97. return 0;
  98. case ETMACTRn(3):
  99. *val = etm_read(ETMACTR3);
  100. return 0;
  101. case ETMACTRn(4):
  102. *val = etm_read(ETMACTR4);
  103. return 0;
  104. case ETMACTRn(5):
  105. *val = etm_read(ETMACTR5);
  106. return 0;
  107. case ETMACTRn(6):
  108. *val = etm_read(ETMACTR6);
  109. return 0;
  110. case ETMACTRn(7):
  111. *val = etm_read(ETMACTR7);
  112. return 0;
  113. case ETMACTRn(8):
  114. *val = etm_read(ETMACTR8);
  115. return 0;
  116. case ETMACTRn(9):
  117. *val = etm_read(ETMACTR9);
  118. return 0;
  119. case ETMACTRn(10):
  120. *val = etm_read(ETMACTR10);
  121. return 0;
  122. case ETMACTRn(11):
  123. *val = etm_read(ETMACTR11);
  124. return 0;
  125. case ETMACTRn(12):
  126. *val = etm_read(ETMACTR12);
  127. return 0;
  128. case ETMACTRn(13):
  129. *val = etm_read(ETMACTR13);
  130. return 0;
  131. case ETMACTRn(14):
  132. *val = etm_read(ETMACTR14);
  133. return 0;
  134. case ETMACTRn(15):
  135. *val = etm_read(ETMACTR15);
  136. return 0;
  137. case ETMCNTRLDVRn(0):
  138. *val = etm_read(ETMCNTRLDVR0);
  139. return 0;
  140. case ETMCNTRLDVRn(1):
  141. *val = etm_read(ETMCNTRLDVR1);
  142. return 0;
  143. case ETMCNTRLDVRn(2):
  144. *val = etm_read(ETMCNTRLDVR2);
  145. return 0;
  146. case ETMCNTRLDVRn(3):
  147. *val = etm_read(ETMCNTRLDVR3);
  148. return 0;
  149. case ETMCNTENRn(0):
  150. *val = etm_read(ETMCNTENR0);
  151. return 0;
  152. case ETMCNTENRn(1):
  153. *val = etm_read(ETMCNTENR1);
  154. return 0;
  155. case ETMCNTENRn(2):
  156. *val = etm_read(ETMCNTENR2);
  157. return 0;
  158. case ETMCNTENRn(3):
  159. *val = etm_read(ETMCNTENR3);
  160. return 0;
  161. case ETMCNTRLDEVRn(0):
  162. *val = etm_read(ETMCNTRLDEVR0);
  163. return 0;
  164. case ETMCNTRLDEVRn(1):
  165. *val = etm_read(ETMCNTRLDEVR1);
  166. return 0;
  167. case ETMCNTRLDEVRn(2):
  168. *val = etm_read(ETMCNTRLDEVR2);
  169. return 0;
  170. case ETMCNTRLDEVRn(3):
  171. *val = etm_read(ETMCNTRLDEVR3);
  172. return 0;
  173. case ETMCNTVRn(0):
  174. *val = etm_read(ETMCNTVR0);
  175. return 0;
  176. case ETMCNTVRn(1):
  177. *val = etm_read(ETMCNTVR1);
  178. return 0;
  179. case ETMCNTVRn(2):
  180. *val = etm_read(ETMCNTVR2);
  181. return 0;
  182. case ETMCNTVRn(3):
  183. *val = etm_read(ETMCNTVR3);
  184. return 0;
  185. case ETMSQ12EVR:
  186. *val = etm_read(ETMSQ12EVR);
  187. return 0;
  188. case ETMSQ21EVR:
  189. *val = etm_read(ETMSQ21EVR);
  190. return 0;
  191. case ETMSQ23EVR:
  192. *val = etm_read(ETMSQ23EVR);
  193. return 0;
  194. case ETMSQ31EVR:
  195. *val = etm_read(ETMSQ31EVR);
  196. return 0;
  197. case ETMSQ32EVR:
  198. *val = etm_read(ETMSQ32EVR);
  199. return 0;
  200. case ETMSQ13EVR:
  201. *val = etm_read(ETMSQ13EVR);
  202. return 0;
  203. case ETMSQR:
  204. *val = etm_read(ETMSQR);
  205. return 0;
  206. case ETMEXTOUTEVRn(0):
  207. *val = etm_read(ETMEXTOUTEVR0);
  208. return 0;
  209. case ETMEXTOUTEVRn(1):
  210. *val = etm_read(ETMEXTOUTEVR1);
  211. return 0;
  212. case ETMEXTOUTEVRn(2):
  213. *val = etm_read(ETMEXTOUTEVR2);
  214. return 0;
  215. case ETMEXTOUTEVRn(3):
  216. *val = etm_read(ETMEXTOUTEVR3);
  217. return 0;
  218. case ETMCIDCVRn(0):
  219. *val = etm_read(ETMCIDCVR0);
  220. return 0;
  221. case ETMCIDCVRn(1):
  222. *val = etm_read(ETMCIDCVR1);
  223. return 0;
  224. case ETMCIDCVRn(2):
  225. *val = etm_read(ETMCIDCVR2);
  226. return 0;
  227. case ETMCIDCMR:
  228. *val = etm_read(ETMCIDCMR);
  229. return 0;
  230. case ETMIMPSPEC0:
  231. *val = etm_read(ETMIMPSPEC0);
  232. return 0;
  233. case ETMIMPSPEC1:
  234. *val = etm_read(ETMIMPSPEC1);
  235. return 0;
  236. case ETMIMPSPEC2:
  237. *val = etm_read(ETMIMPSPEC2);
  238. return 0;
  239. case ETMIMPSPEC3:
  240. *val = etm_read(ETMIMPSPEC3);
  241. return 0;
  242. case ETMIMPSPEC4:
  243. *val = etm_read(ETMIMPSPEC4);
  244. return 0;
  245. case ETMIMPSPEC5:
  246. *val = etm_read(ETMIMPSPEC5);
  247. return 0;
  248. case ETMIMPSPEC6:
  249. *val = etm_read(ETMIMPSPEC6);
  250. return 0;
  251. case ETMIMPSPEC7:
  252. *val = etm_read(ETMIMPSPEC7);
  253. return 0;
  254. case ETMSYNCFR:
  255. *val = etm_read(ETMSYNCFR);
  256. return 0;
  257. case ETMIDR:
  258. *val = etm_read(ETMIDR);
  259. return 0;
  260. case ETMCCER:
  261. *val = etm_read(ETMCCER);
  262. return 0;
  263. case ETMEXTINSELR:
  264. *val = etm_read(ETMEXTINSELR);
  265. return 0;
  266. case ETMTESSEICR:
  267. *val = etm_read(ETMTESSEICR);
  268. return 0;
  269. case ETMEIBCR:
  270. *val = etm_read(ETMEIBCR);
  271. return 0;
  272. case ETMTSEVR:
  273. *val = etm_read(ETMTSEVR);
  274. return 0;
  275. case ETMAUXCR:
  276. *val = etm_read(ETMAUXCR);
  277. return 0;
  278. case ETMTRACEIDR:
  279. *val = etm_read(ETMTRACEIDR);
  280. return 0;
  281. case ETMVMIDCVR:
  282. *val = etm_read(ETMVMIDCVR);
  283. return 0;
  284. case ETMOSLSR:
  285. *val = etm_read(ETMOSLSR);
  286. return 0;
  287. case ETMOSSRR:
  288. *val = etm_read(ETMOSSRR);
  289. return 0;
  290. case ETMPDCR:
  291. *val = etm_read(ETMPDCR);
  292. return 0;
  293. case ETMPDSR:
  294. *val = etm_read(ETMPDSR);
  295. return 0;
  296. default:
  297. *val = 0;
  298. return -EINVAL;
  299. }
  300. }
  301. int etm_writel_cp14(u32 reg, u32 val)
  302. {
  303. switch (reg) {
  304. case ETMCR:
  305. etm_write(val, ETMCR);
  306. break;
  307. case ETMTRIGGER:
  308. etm_write(val, ETMTRIGGER);
  309. break;
  310. case ETMSR:
  311. etm_write(val, ETMSR);
  312. break;
  313. case ETMTSSCR:
  314. etm_write(val, ETMTSSCR);
  315. break;
  316. case ETMTEEVR:
  317. etm_write(val, ETMTEEVR);
  318. break;
  319. case ETMTECR1:
  320. etm_write(val, ETMTECR1);
  321. break;
  322. case ETMFFLR:
  323. etm_write(val, ETMFFLR);
  324. break;
  325. case ETMACVRn(0):
  326. etm_write(val, ETMACVR0);
  327. break;
  328. case ETMACVRn(1):
  329. etm_write(val, ETMACVR1);
  330. break;
  331. case ETMACVRn(2):
  332. etm_write(val, ETMACVR2);
  333. break;
  334. case ETMACVRn(3):
  335. etm_write(val, ETMACVR3);
  336. break;
  337. case ETMACVRn(4):
  338. etm_write(val, ETMACVR4);
  339. break;
  340. case ETMACVRn(5):
  341. etm_write(val, ETMACVR5);
  342. break;
  343. case ETMACVRn(6):
  344. etm_write(val, ETMACVR6);
  345. break;
  346. case ETMACVRn(7):
  347. etm_write(val, ETMACVR7);
  348. break;
  349. case ETMACVRn(8):
  350. etm_write(val, ETMACVR8);
  351. break;
  352. case ETMACVRn(9):
  353. etm_write(val, ETMACVR9);
  354. break;
  355. case ETMACVRn(10):
  356. etm_write(val, ETMACVR10);
  357. break;
  358. case ETMACVRn(11):
  359. etm_write(val, ETMACVR11);
  360. break;
  361. case ETMACVRn(12):
  362. etm_write(val, ETMACVR12);
  363. break;
  364. case ETMACVRn(13):
  365. etm_write(val, ETMACVR13);
  366. break;
  367. case ETMACVRn(14):
  368. etm_write(val, ETMACVR14);
  369. break;
  370. case ETMACVRn(15):
  371. etm_write(val, ETMACVR15);
  372. break;
  373. case ETMACTRn(0):
  374. etm_write(val, ETMACTR0);
  375. break;
  376. case ETMACTRn(1):
  377. etm_write(val, ETMACTR1);
  378. break;
  379. case ETMACTRn(2):
  380. etm_write(val, ETMACTR2);
  381. break;
  382. case ETMACTRn(3):
  383. etm_write(val, ETMACTR3);
  384. break;
  385. case ETMACTRn(4):
  386. etm_write(val, ETMACTR4);
  387. break;
  388. case ETMACTRn(5):
  389. etm_write(val, ETMACTR5);
  390. break;
  391. case ETMACTRn(6):
  392. etm_write(val, ETMACTR6);
  393. break;
  394. case ETMACTRn(7):
  395. etm_write(val, ETMACTR7);
  396. break;
  397. case ETMACTRn(8):
  398. etm_write(val, ETMACTR8);
  399. break;
  400. case ETMACTRn(9):
  401. etm_write(val, ETMACTR9);
  402. break;
  403. case ETMACTRn(10):
  404. etm_write(val, ETMACTR10);
  405. break;
  406. case ETMACTRn(11):
  407. etm_write(val, ETMACTR11);
  408. break;
  409. case ETMACTRn(12):
  410. etm_write(val, ETMACTR12);
  411. break;
  412. case ETMACTRn(13):
  413. etm_write(val, ETMACTR13);
  414. break;
  415. case ETMACTRn(14):
  416. etm_write(val, ETMACTR14);
  417. break;
  418. case ETMACTRn(15):
  419. etm_write(val, ETMACTR15);
  420. break;
  421. case ETMCNTRLDVRn(0):
  422. etm_write(val, ETMCNTRLDVR0);
  423. break;
  424. case ETMCNTRLDVRn(1):
  425. etm_write(val, ETMCNTRLDVR1);
  426. break;
  427. case ETMCNTRLDVRn(2):
  428. etm_write(val, ETMCNTRLDVR2);
  429. break;
  430. case ETMCNTRLDVRn(3):
  431. etm_write(val, ETMCNTRLDVR3);
  432. break;
  433. case ETMCNTENRn(0):
  434. etm_write(val, ETMCNTENR0);
  435. break;
  436. case ETMCNTENRn(1):
  437. etm_write(val, ETMCNTENR1);
  438. break;
  439. case ETMCNTENRn(2):
  440. etm_write(val, ETMCNTENR2);
  441. break;
  442. case ETMCNTENRn(3):
  443. etm_write(val, ETMCNTENR3);
  444. break;
  445. case ETMCNTRLDEVRn(0):
  446. etm_write(val, ETMCNTRLDEVR0);
  447. break;
  448. case ETMCNTRLDEVRn(1):
  449. etm_write(val, ETMCNTRLDEVR1);
  450. break;
  451. case ETMCNTRLDEVRn(2):
  452. etm_write(val, ETMCNTRLDEVR2);
  453. break;
  454. case ETMCNTRLDEVRn(3):
  455. etm_write(val, ETMCNTRLDEVR3);
  456. break;
  457. case ETMCNTVRn(0):
  458. etm_write(val, ETMCNTVR0);
  459. break;
  460. case ETMCNTVRn(1):
  461. etm_write(val, ETMCNTVR1);
  462. break;
  463. case ETMCNTVRn(2):
  464. etm_write(val, ETMCNTVR2);
  465. break;
  466. case ETMCNTVRn(3):
  467. etm_write(val, ETMCNTVR3);
  468. break;
  469. case ETMSQ12EVR:
  470. etm_write(val, ETMSQ12EVR);
  471. break;
  472. case ETMSQ21EVR:
  473. etm_write(val, ETMSQ21EVR);
  474. break;
  475. case ETMSQ23EVR:
  476. etm_write(val, ETMSQ23EVR);
  477. break;
  478. case ETMSQ31EVR:
  479. etm_write(val, ETMSQ31EVR);
  480. break;
  481. case ETMSQ32EVR:
  482. etm_write(val, ETMSQ32EVR);
  483. break;
  484. case ETMSQ13EVR:
  485. etm_write(val, ETMSQ13EVR);
  486. break;
  487. case ETMSQR:
  488. etm_write(val, ETMSQR);
  489. break;
  490. case ETMEXTOUTEVRn(0):
  491. etm_write(val, ETMEXTOUTEVR0);
  492. break;
  493. case ETMEXTOUTEVRn(1):
  494. etm_write(val, ETMEXTOUTEVR1);
  495. break;
  496. case ETMEXTOUTEVRn(2):
  497. etm_write(val, ETMEXTOUTEVR2);
  498. break;
  499. case ETMEXTOUTEVRn(3):
  500. etm_write(val, ETMEXTOUTEVR3);
  501. break;
  502. case ETMCIDCVRn(0):
  503. etm_write(val, ETMCIDCVR0);
  504. break;
  505. case ETMCIDCVRn(1):
  506. etm_write(val, ETMCIDCVR1);
  507. break;
  508. case ETMCIDCVRn(2):
  509. etm_write(val, ETMCIDCVR2);
  510. break;
  511. case ETMCIDCMR:
  512. etm_write(val, ETMCIDCMR);
  513. break;
  514. case ETMIMPSPEC0:
  515. etm_write(val, ETMIMPSPEC0);
  516. break;
  517. case ETMIMPSPEC1:
  518. etm_write(val, ETMIMPSPEC1);
  519. break;
  520. case ETMIMPSPEC2:
  521. etm_write(val, ETMIMPSPEC2);
  522. break;
  523. case ETMIMPSPEC3:
  524. etm_write(val, ETMIMPSPEC3);
  525. break;
  526. case ETMIMPSPEC4:
  527. etm_write(val, ETMIMPSPEC4);
  528. break;
  529. case ETMIMPSPEC5:
  530. etm_write(val, ETMIMPSPEC5);
  531. break;
  532. case ETMIMPSPEC6:
  533. etm_write(val, ETMIMPSPEC6);
  534. break;
  535. case ETMIMPSPEC7:
  536. etm_write(val, ETMIMPSPEC7);
  537. break;
  538. case ETMSYNCFR:
  539. etm_write(val, ETMSYNCFR);
  540. break;
  541. case ETMEXTINSELR:
  542. etm_write(val, ETMEXTINSELR);
  543. break;
  544. case ETMTESSEICR:
  545. etm_write(val, ETMTESSEICR);
  546. break;
  547. case ETMEIBCR:
  548. etm_write(val, ETMEIBCR);
  549. break;
  550. case ETMTSEVR:
  551. etm_write(val, ETMTSEVR);
  552. break;
  553. case ETMAUXCR:
  554. etm_write(val, ETMAUXCR);
  555. break;
  556. case ETMTRACEIDR:
  557. etm_write(val, ETMTRACEIDR);
  558. break;
  559. case ETMVMIDCVR:
  560. etm_write(val, ETMVMIDCVR);
  561. break;
  562. case ETMOSLAR:
  563. etm_write(val, ETMOSLAR);
  564. break;
  565. case ETMOSSRR:
  566. etm_write(val, ETMOSSRR);
  567. break;
  568. case ETMPDCR:
  569. etm_write(val, ETMPDCR);
  570. break;
  571. case ETMPDSR:
  572. etm_write(val, ETMPDSR);
  573. break;
  574. default:
  575. return -EINVAL;
  576. }
  577. return 0;
  578. }