0001
0002
0003
0004
0005
0006 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0007
0008 #include <linux/kernel.h>
0009 #include <linux/types.h>
0010 #include <linux/bug.h>
0011 #include <asm/hardware/cp14.h>
0012
0013 #include "coresight-etm.h"
0014
0015 int etm_readl_cp14(u32 reg, unsigned int *val)
0016 {
0017 switch (reg) {
0018 case ETMCR:
0019 *val = etm_read(ETMCR);
0020 return 0;
0021 case ETMCCR:
0022 *val = etm_read(ETMCCR);
0023 return 0;
0024 case ETMTRIGGER:
0025 *val = etm_read(ETMTRIGGER);
0026 return 0;
0027 case ETMSR:
0028 *val = etm_read(ETMSR);
0029 return 0;
0030 case ETMSCR:
0031 *val = etm_read(ETMSCR);
0032 return 0;
0033 case ETMTSSCR:
0034 *val = etm_read(ETMTSSCR);
0035 return 0;
0036 case ETMTEEVR:
0037 *val = etm_read(ETMTEEVR);
0038 return 0;
0039 case ETMTECR1:
0040 *val = etm_read(ETMTECR1);
0041 return 0;
0042 case ETMFFLR:
0043 *val = etm_read(ETMFFLR);
0044 return 0;
0045 case ETMACVRn(0):
0046 *val = etm_read(ETMACVR0);
0047 return 0;
0048 case ETMACVRn(1):
0049 *val = etm_read(ETMACVR1);
0050 return 0;
0051 case ETMACVRn(2):
0052 *val = etm_read(ETMACVR2);
0053 return 0;
0054 case ETMACVRn(3):
0055 *val = etm_read(ETMACVR3);
0056 return 0;
0057 case ETMACVRn(4):
0058 *val = etm_read(ETMACVR4);
0059 return 0;
0060 case ETMACVRn(5):
0061 *val = etm_read(ETMACVR5);
0062 return 0;
0063 case ETMACVRn(6):
0064 *val = etm_read(ETMACVR6);
0065 return 0;
0066 case ETMACVRn(7):
0067 *val = etm_read(ETMACVR7);
0068 return 0;
0069 case ETMACVRn(8):
0070 *val = etm_read(ETMACVR8);
0071 return 0;
0072 case ETMACVRn(9):
0073 *val = etm_read(ETMACVR9);
0074 return 0;
0075 case ETMACVRn(10):
0076 *val = etm_read(ETMACVR10);
0077 return 0;
0078 case ETMACVRn(11):
0079 *val = etm_read(ETMACVR11);
0080 return 0;
0081 case ETMACVRn(12):
0082 *val = etm_read(ETMACVR12);
0083 return 0;
0084 case ETMACVRn(13):
0085 *val = etm_read(ETMACVR13);
0086 return 0;
0087 case ETMACVRn(14):
0088 *val = etm_read(ETMACVR14);
0089 return 0;
0090 case ETMACVRn(15):
0091 *val = etm_read(ETMACVR15);
0092 return 0;
0093 case ETMACTRn(0):
0094 *val = etm_read(ETMACTR0);
0095 return 0;
0096 case ETMACTRn(1):
0097 *val = etm_read(ETMACTR1);
0098 return 0;
0099 case ETMACTRn(2):
0100 *val = etm_read(ETMACTR2);
0101 return 0;
0102 case ETMACTRn(3):
0103 *val = etm_read(ETMACTR3);
0104 return 0;
0105 case ETMACTRn(4):
0106 *val = etm_read(ETMACTR4);
0107 return 0;
0108 case ETMACTRn(5):
0109 *val = etm_read(ETMACTR5);
0110 return 0;
0111 case ETMACTRn(6):
0112 *val = etm_read(ETMACTR6);
0113 return 0;
0114 case ETMACTRn(7):
0115 *val = etm_read(ETMACTR7);
0116 return 0;
0117 case ETMACTRn(8):
0118 *val = etm_read(ETMACTR8);
0119 return 0;
0120 case ETMACTRn(9):
0121 *val = etm_read(ETMACTR9);
0122 return 0;
0123 case ETMACTRn(10):
0124 *val = etm_read(ETMACTR10);
0125 return 0;
0126 case ETMACTRn(11):
0127 *val = etm_read(ETMACTR11);
0128 return 0;
0129 case ETMACTRn(12):
0130 *val = etm_read(ETMACTR12);
0131 return 0;
0132 case ETMACTRn(13):
0133 *val = etm_read(ETMACTR13);
0134 return 0;
0135 case ETMACTRn(14):
0136 *val = etm_read(ETMACTR14);
0137 return 0;
0138 case ETMACTRn(15):
0139 *val = etm_read(ETMACTR15);
0140 return 0;
0141 case ETMCNTRLDVRn(0):
0142 *val = etm_read(ETMCNTRLDVR0);
0143 return 0;
0144 case ETMCNTRLDVRn(1):
0145 *val = etm_read(ETMCNTRLDVR1);
0146 return 0;
0147 case ETMCNTRLDVRn(2):
0148 *val = etm_read(ETMCNTRLDVR2);
0149 return 0;
0150 case ETMCNTRLDVRn(3):
0151 *val = etm_read(ETMCNTRLDVR3);
0152 return 0;
0153 case ETMCNTENRn(0):
0154 *val = etm_read(ETMCNTENR0);
0155 return 0;
0156 case ETMCNTENRn(1):
0157 *val = etm_read(ETMCNTENR1);
0158 return 0;
0159 case ETMCNTENRn(2):
0160 *val = etm_read(ETMCNTENR2);
0161 return 0;
0162 case ETMCNTENRn(3):
0163 *val = etm_read(ETMCNTENR3);
0164 return 0;
0165 case ETMCNTRLDEVRn(0):
0166 *val = etm_read(ETMCNTRLDEVR0);
0167 return 0;
0168 case ETMCNTRLDEVRn(1):
0169 *val = etm_read(ETMCNTRLDEVR1);
0170 return 0;
0171 case ETMCNTRLDEVRn(2):
0172 *val = etm_read(ETMCNTRLDEVR2);
0173 return 0;
0174 case ETMCNTRLDEVRn(3):
0175 *val = etm_read(ETMCNTRLDEVR3);
0176 return 0;
0177 case ETMCNTVRn(0):
0178 *val = etm_read(ETMCNTVR0);
0179 return 0;
0180 case ETMCNTVRn(1):
0181 *val = etm_read(ETMCNTVR1);
0182 return 0;
0183 case ETMCNTVRn(2):
0184 *val = etm_read(ETMCNTVR2);
0185 return 0;
0186 case ETMCNTVRn(3):
0187 *val = etm_read(ETMCNTVR3);
0188 return 0;
0189 case ETMSQ12EVR:
0190 *val = etm_read(ETMSQ12EVR);
0191 return 0;
0192 case ETMSQ21EVR:
0193 *val = etm_read(ETMSQ21EVR);
0194 return 0;
0195 case ETMSQ23EVR:
0196 *val = etm_read(ETMSQ23EVR);
0197 return 0;
0198 case ETMSQ31EVR:
0199 *val = etm_read(ETMSQ31EVR);
0200 return 0;
0201 case ETMSQ32EVR:
0202 *val = etm_read(ETMSQ32EVR);
0203 return 0;
0204 case ETMSQ13EVR:
0205 *val = etm_read(ETMSQ13EVR);
0206 return 0;
0207 case ETMSQR:
0208 *val = etm_read(ETMSQR);
0209 return 0;
0210 case ETMEXTOUTEVRn(0):
0211 *val = etm_read(ETMEXTOUTEVR0);
0212 return 0;
0213 case ETMEXTOUTEVRn(1):
0214 *val = etm_read(ETMEXTOUTEVR1);
0215 return 0;
0216 case ETMEXTOUTEVRn(2):
0217 *val = etm_read(ETMEXTOUTEVR2);
0218 return 0;
0219 case ETMEXTOUTEVRn(3):
0220 *val = etm_read(ETMEXTOUTEVR3);
0221 return 0;
0222 case ETMCIDCVRn(0):
0223 *val = etm_read(ETMCIDCVR0);
0224 return 0;
0225 case ETMCIDCVRn(1):
0226 *val = etm_read(ETMCIDCVR1);
0227 return 0;
0228 case ETMCIDCVRn(2):
0229 *val = etm_read(ETMCIDCVR2);
0230 return 0;
0231 case ETMCIDCMR:
0232 *val = etm_read(ETMCIDCMR);
0233 return 0;
0234 case ETMIMPSPEC0:
0235 *val = etm_read(ETMIMPSPEC0);
0236 return 0;
0237 case ETMIMPSPEC1:
0238 *val = etm_read(ETMIMPSPEC1);
0239 return 0;
0240 case ETMIMPSPEC2:
0241 *val = etm_read(ETMIMPSPEC2);
0242 return 0;
0243 case ETMIMPSPEC3:
0244 *val = etm_read(ETMIMPSPEC3);
0245 return 0;
0246 case ETMIMPSPEC4:
0247 *val = etm_read(ETMIMPSPEC4);
0248 return 0;
0249 case ETMIMPSPEC5:
0250 *val = etm_read(ETMIMPSPEC5);
0251 return 0;
0252 case ETMIMPSPEC6:
0253 *val = etm_read(ETMIMPSPEC6);
0254 return 0;
0255 case ETMIMPSPEC7:
0256 *val = etm_read(ETMIMPSPEC7);
0257 return 0;
0258 case ETMSYNCFR:
0259 *val = etm_read(ETMSYNCFR);
0260 return 0;
0261 case ETMIDR:
0262 *val = etm_read(ETMIDR);
0263 return 0;
0264 case ETMCCER:
0265 *val = etm_read(ETMCCER);
0266 return 0;
0267 case ETMEXTINSELR:
0268 *val = etm_read(ETMEXTINSELR);
0269 return 0;
0270 case ETMTESSEICR:
0271 *val = etm_read(ETMTESSEICR);
0272 return 0;
0273 case ETMEIBCR:
0274 *val = etm_read(ETMEIBCR);
0275 return 0;
0276 case ETMTSEVR:
0277 *val = etm_read(ETMTSEVR);
0278 return 0;
0279 case ETMAUXCR:
0280 *val = etm_read(ETMAUXCR);
0281 return 0;
0282 case ETMTRACEIDR:
0283 *val = etm_read(ETMTRACEIDR);
0284 return 0;
0285 case ETMVMIDCVR:
0286 *val = etm_read(ETMVMIDCVR);
0287 return 0;
0288 case ETMOSLSR:
0289 *val = etm_read(ETMOSLSR);
0290 return 0;
0291 case ETMOSSRR:
0292 *val = etm_read(ETMOSSRR);
0293 return 0;
0294 case ETMPDCR:
0295 *val = etm_read(ETMPDCR);
0296 return 0;
0297 case ETMPDSR:
0298 *val = etm_read(ETMPDSR);
0299 return 0;
0300 default:
0301 *val = 0;
0302 return -EINVAL;
0303 }
0304 }
0305
0306 int etm_writel_cp14(u32 reg, u32 val)
0307 {
0308 switch (reg) {
0309 case ETMCR:
0310 etm_write(val, ETMCR);
0311 break;
0312 case ETMTRIGGER:
0313 etm_write(val, ETMTRIGGER);
0314 break;
0315 case ETMSR:
0316 etm_write(val, ETMSR);
0317 break;
0318 case ETMTSSCR:
0319 etm_write(val, ETMTSSCR);
0320 break;
0321 case ETMTEEVR:
0322 etm_write(val, ETMTEEVR);
0323 break;
0324 case ETMTECR1:
0325 etm_write(val, ETMTECR1);
0326 break;
0327 case ETMFFLR:
0328 etm_write(val, ETMFFLR);
0329 break;
0330 case ETMACVRn(0):
0331 etm_write(val, ETMACVR0);
0332 break;
0333 case ETMACVRn(1):
0334 etm_write(val, ETMACVR1);
0335 break;
0336 case ETMACVRn(2):
0337 etm_write(val, ETMACVR2);
0338 break;
0339 case ETMACVRn(3):
0340 etm_write(val, ETMACVR3);
0341 break;
0342 case ETMACVRn(4):
0343 etm_write(val, ETMACVR4);
0344 break;
0345 case ETMACVRn(5):
0346 etm_write(val, ETMACVR5);
0347 break;
0348 case ETMACVRn(6):
0349 etm_write(val, ETMACVR6);
0350 break;
0351 case ETMACVRn(7):
0352 etm_write(val, ETMACVR7);
0353 break;
0354 case ETMACVRn(8):
0355 etm_write(val, ETMACVR8);
0356 break;
0357 case ETMACVRn(9):
0358 etm_write(val, ETMACVR9);
0359 break;
0360 case ETMACVRn(10):
0361 etm_write(val, ETMACVR10);
0362 break;
0363 case ETMACVRn(11):
0364 etm_write(val, ETMACVR11);
0365 break;
0366 case ETMACVRn(12):
0367 etm_write(val, ETMACVR12);
0368 break;
0369 case ETMACVRn(13):
0370 etm_write(val, ETMACVR13);
0371 break;
0372 case ETMACVRn(14):
0373 etm_write(val, ETMACVR14);
0374 break;
0375 case ETMACVRn(15):
0376 etm_write(val, ETMACVR15);
0377 break;
0378 case ETMACTRn(0):
0379 etm_write(val, ETMACTR0);
0380 break;
0381 case ETMACTRn(1):
0382 etm_write(val, ETMACTR1);
0383 break;
0384 case ETMACTRn(2):
0385 etm_write(val, ETMACTR2);
0386 break;
0387 case ETMACTRn(3):
0388 etm_write(val, ETMACTR3);
0389 break;
0390 case ETMACTRn(4):
0391 etm_write(val, ETMACTR4);
0392 break;
0393 case ETMACTRn(5):
0394 etm_write(val, ETMACTR5);
0395 break;
0396 case ETMACTRn(6):
0397 etm_write(val, ETMACTR6);
0398 break;
0399 case ETMACTRn(7):
0400 etm_write(val, ETMACTR7);
0401 break;
0402 case ETMACTRn(8):
0403 etm_write(val, ETMACTR8);
0404 break;
0405 case ETMACTRn(9):
0406 etm_write(val, ETMACTR9);
0407 break;
0408 case ETMACTRn(10):
0409 etm_write(val, ETMACTR10);
0410 break;
0411 case ETMACTRn(11):
0412 etm_write(val, ETMACTR11);
0413 break;
0414 case ETMACTRn(12):
0415 etm_write(val, ETMACTR12);
0416 break;
0417 case ETMACTRn(13):
0418 etm_write(val, ETMACTR13);
0419 break;
0420 case ETMACTRn(14):
0421 etm_write(val, ETMACTR14);
0422 break;
0423 case ETMACTRn(15):
0424 etm_write(val, ETMACTR15);
0425 break;
0426 case ETMCNTRLDVRn(0):
0427 etm_write(val, ETMCNTRLDVR0);
0428 break;
0429 case ETMCNTRLDVRn(1):
0430 etm_write(val, ETMCNTRLDVR1);
0431 break;
0432 case ETMCNTRLDVRn(2):
0433 etm_write(val, ETMCNTRLDVR2);
0434 break;
0435 case ETMCNTRLDVRn(3):
0436 etm_write(val, ETMCNTRLDVR3);
0437 break;
0438 case ETMCNTENRn(0):
0439 etm_write(val, ETMCNTENR0);
0440 break;
0441 case ETMCNTENRn(1):
0442 etm_write(val, ETMCNTENR1);
0443 break;
0444 case ETMCNTENRn(2):
0445 etm_write(val, ETMCNTENR2);
0446 break;
0447 case ETMCNTENRn(3):
0448 etm_write(val, ETMCNTENR3);
0449 break;
0450 case ETMCNTRLDEVRn(0):
0451 etm_write(val, ETMCNTRLDEVR0);
0452 break;
0453 case ETMCNTRLDEVRn(1):
0454 etm_write(val, ETMCNTRLDEVR1);
0455 break;
0456 case ETMCNTRLDEVRn(2):
0457 etm_write(val, ETMCNTRLDEVR2);
0458 break;
0459 case ETMCNTRLDEVRn(3):
0460 etm_write(val, ETMCNTRLDEVR3);
0461 break;
0462 case ETMCNTVRn(0):
0463 etm_write(val, ETMCNTVR0);
0464 break;
0465 case ETMCNTVRn(1):
0466 etm_write(val, ETMCNTVR1);
0467 break;
0468 case ETMCNTVRn(2):
0469 etm_write(val, ETMCNTVR2);
0470 break;
0471 case ETMCNTVRn(3):
0472 etm_write(val, ETMCNTVR3);
0473 break;
0474 case ETMSQ12EVR:
0475 etm_write(val, ETMSQ12EVR);
0476 break;
0477 case ETMSQ21EVR:
0478 etm_write(val, ETMSQ21EVR);
0479 break;
0480 case ETMSQ23EVR:
0481 etm_write(val, ETMSQ23EVR);
0482 break;
0483 case ETMSQ31EVR:
0484 etm_write(val, ETMSQ31EVR);
0485 break;
0486 case ETMSQ32EVR:
0487 etm_write(val, ETMSQ32EVR);
0488 break;
0489 case ETMSQ13EVR:
0490 etm_write(val, ETMSQ13EVR);
0491 break;
0492 case ETMSQR:
0493 etm_write(val, ETMSQR);
0494 break;
0495 case ETMEXTOUTEVRn(0):
0496 etm_write(val, ETMEXTOUTEVR0);
0497 break;
0498 case ETMEXTOUTEVRn(1):
0499 etm_write(val, ETMEXTOUTEVR1);
0500 break;
0501 case ETMEXTOUTEVRn(2):
0502 etm_write(val, ETMEXTOUTEVR2);
0503 break;
0504 case ETMEXTOUTEVRn(3):
0505 etm_write(val, ETMEXTOUTEVR3);
0506 break;
0507 case ETMCIDCVRn(0):
0508 etm_write(val, ETMCIDCVR0);
0509 break;
0510 case ETMCIDCVRn(1):
0511 etm_write(val, ETMCIDCVR1);
0512 break;
0513 case ETMCIDCVRn(2):
0514 etm_write(val, ETMCIDCVR2);
0515 break;
0516 case ETMCIDCMR:
0517 etm_write(val, ETMCIDCMR);
0518 break;
0519 case ETMIMPSPEC0:
0520 etm_write(val, ETMIMPSPEC0);
0521 break;
0522 case ETMIMPSPEC1:
0523 etm_write(val, ETMIMPSPEC1);
0524 break;
0525 case ETMIMPSPEC2:
0526 etm_write(val, ETMIMPSPEC2);
0527 break;
0528 case ETMIMPSPEC3:
0529 etm_write(val, ETMIMPSPEC3);
0530 break;
0531 case ETMIMPSPEC4:
0532 etm_write(val, ETMIMPSPEC4);
0533 break;
0534 case ETMIMPSPEC5:
0535 etm_write(val, ETMIMPSPEC5);
0536 break;
0537 case ETMIMPSPEC6:
0538 etm_write(val, ETMIMPSPEC6);
0539 break;
0540 case ETMIMPSPEC7:
0541 etm_write(val, ETMIMPSPEC7);
0542 break;
0543 case ETMSYNCFR:
0544 etm_write(val, ETMSYNCFR);
0545 break;
0546 case ETMEXTINSELR:
0547 etm_write(val, ETMEXTINSELR);
0548 break;
0549 case ETMTESSEICR:
0550 etm_write(val, ETMTESSEICR);
0551 break;
0552 case ETMEIBCR:
0553 etm_write(val, ETMEIBCR);
0554 break;
0555 case ETMTSEVR:
0556 etm_write(val, ETMTSEVR);
0557 break;
0558 case ETMAUXCR:
0559 etm_write(val, ETMAUXCR);
0560 break;
0561 case ETMTRACEIDR:
0562 etm_write(val, ETMTRACEIDR);
0563 break;
0564 case ETMVMIDCVR:
0565 etm_write(val, ETMVMIDCVR);
0566 break;
0567 case ETMOSLAR:
0568 etm_write(val, ETMOSLAR);
0569 break;
0570 case ETMOSSRR:
0571 etm_write(val, ETMOSSRR);
0572 break;
0573 case ETMPDCR:
0574 etm_write(val, ETMPDCR);
0575 break;
0576 case ETMPDSR:
0577 etm_write(val, ETMPDSR);
0578 break;
0579 default:
0580 return -EINVAL;
0581 }
0582
0583 return 0;
0584 }