coresight-etm-cp14.c 12 KB

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