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