1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2012, The Linux Foundation. All rights reserved. 4 */ 5 6 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 7 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 15 int 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 306 int 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