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