1/* 2 * Copyright (c) 2010-2013, 2015-2019 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated 11 * unmodified and in its entirety in all distributions of the software, 12 * modified or unmodified, in source code or in binary form. 13 * 14 * Redistribution and use in source and binary forms, with or without 15 * modification, are permitted provided that the following conditions are 16 * met: redistributions of source code must retain the above copyright 17 * notice, this list of conditions and the following disclaimer; 18 * redistributions in binary form must reproduce the above copyright 19 * notice, this list of conditions and the following disclaimer in the 20 * documentation and/or other materials provided with the distribution; 21 * neither the name of the copyright holders nor the names of its 22 * contributors may be used to endorse or promote products derived from 23 * this software without specific prior written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 * 37 * Authors: Gabe Black 38 * Ali Saidi 39 * Giacomo Gabrielli 40 */ 41 42#include "arch/arm/miscregs.hh" 43 44#include <tuple> 45 46#include "arch/arm/isa.hh" 47#include "base/logging.hh" 48#include "cpu/thread_context.hh" 49#include "sim/full_system.hh" 50 51namespace ArmISA 52{ 53 54MiscRegIndex 55decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2) 56{ 57 switch(crn) { 58 case 0: 59 switch (opc1) { 60 case 0: 61 switch (opc2) { 62 case 0: 63 switch (crm) { 64 case 0: 65 return MISCREG_DBGDIDR; 66 case 1: 67 return MISCREG_DBGDSCRint; 68 } 69 break; 70 } 71 break; 72 case 7: 73 switch (opc2) { 74 case 0: 75 switch (crm) { 76 case 0: 77 return MISCREG_JIDR; 78 } 79 break; 80 } 81 break; 82 } 83 break; 84 case 1: 85 switch (opc1) { 86 case 6: 87 switch (crm) { 88 case 0: 89 switch (opc2) { 90 case 0: 91 return MISCREG_TEEHBR; 92 } 93 break; 94 } 95 break; 96 case 7: 97 switch (crm) { 98 case 0: 99 switch (opc2) { 100 case 0: 101 return MISCREG_JOSCR; 102 } 103 break; 104 } 105 break; 106 } 107 break; 108 case 2: 109 switch (opc1) { 110 case 7: 111 switch (crm) { 112 case 0: 113 switch (opc2) { 114 case 0: 115 return MISCREG_JMCR; 116 } 117 break; 118 } 119 break; 120 } 121 break; 122 } 123 // If we get here then it must be a register that we haven't implemented 124 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]", 125 crn, opc1, crm, opc2); 126 return MISCREG_CP14_UNIMPL; 127} 128 129using namespace std; 130 131MiscRegIndex 132decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2) 133{ 134 switch (crn) { 135 case 0: 136 switch (opc1) { 137 case 0: 138 switch (crm) { 139 case 0: 140 switch (opc2) { 141 case 1: 142 return MISCREG_CTR; 143 case 2: 144 return MISCREG_TCMTR; 145 case 3: 146 return MISCREG_TLBTR; 147 case 5: 148 return MISCREG_MPIDR; 149 case 6: 150 return MISCREG_REVIDR; 151 default: 152 return MISCREG_MIDR; 153 } 154 break; 155 case 1: 156 switch (opc2) { 157 case 0: 158 return MISCREG_ID_PFR0; 159 case 1: 160 return MISCREG_ID_PFR1; 161 case 2: 162 return MISCREG_ID_DFR0; 163 case 3: 164 return MISCREG_ID_AFR0; 165 case 4: 166 return MISCREG_ID_MMFR0; 167 case 5: 168 return MISCREG_ID_MMFR1; 169 case 6: 170 return MISCREG_ID_MMFR2; 171 case 7: 172 return MISCREG_ID_MMFR3; 173 } 174 break; 175 case 2: 176 switch (opc2) { 177 case 0: 178 return MISCREG_ID_ISAR0; 179 case 1: 180 return MISCREG_ID_ISAR1; 181 case 2: 182 return MISCREG_ID_ISAR2; 183 case 3: 184 return MISCREG_ID_ISAR3; 185 case 4: 186 return MISCREG_ID_ISAR4; 187 case 5: 188 return MISCREG_ID_ISAR5; 189 case 6: 190 case 7: 191 return MISCREG_RAZ; // read as zero 192 } 193 break; 194 default: 195 return MISCREG_RAZ; // read as zero 196 } 197 break; 198 case 1: 199 if (crm == 0) { 200 switch (opc2) { 201 case 0: 202 return MISCREG_CCSIDR; 203 case 1: 204 return MISCREG_CLIDR; 205 case 7: 206 return MISCREG_AIDR; 207 } 208 } 209 break; 210 case 2: 211 if (crm == 0 && opc2 == 0) { 212 return MISCREG_CSSELR; 213 } 214 break; 215 case 4: 216 if (crm == 0) { 217 if (opc2 == 0) 218 return MISCREG_VPIDR; 219 else if (opc2 == 5) 220 return MISCREG_VMPIDR; 221 } 222 break; 223 } 224 break; 225 case 1: 226 if (opc1 == 0) { 227 if (crm == 0) { 228 switch (opc2) { 229 case 0: 230 return MISCREG_SCTLR; 231 case 1: 232 return MISCREG_ACTLR; 233 case 0x2: 234 return MISCREG_CPACR; 235 } 236 } else if (crm == 1) { 237 switch (opc2) { 238 case 0: 239 return MISCREG_SCR; 240 case 1: 241 return MISCREG_SDER; 242 case 2: 243 return MISCREG_NSACR; 244 } 245 } 246 } else if (opc1 == 4) { 247 if (crm == 0) { 248 if (opc2 == 0) 249 return MISCREG_HSCTLR; 250 else if (opc2 == 1) 251 return MISCREG_HACTLR; 252 } else if (crm == 1) { 253 switch (opc2) { 254 case 0: 255 return MISCREG_HCR; 256 case 1: 257 return MISCREG_HDCR; 258 case 2: 259 return MISCREG_HCPTR; 260 case 3: 261 return MISCREG_HSTR; 262 case 7: 263 return MISCREG_HACR; 264 } 265 } 266 } 267 break; 268 case 2: 269 if (opc1 == 0 && crm == 0) { 270 switch (opc2) { 271 case 0: 272 return MISCREG_TTBR0; 273 case 1: 274 return MISCREG_TTBR1; 275 case 2: 276 return MISCREG_TTBCR; 277 } 278 } else if (opc1 == 4) { 279 if (crm == 0 && opc2 == 2) 280 return MISCREG_HTCR; 281 else if (crm == 1 && opc2 == 2) 282 return MISCREG_VTCR; 283 } 284 break; 285 case 3: 286 if (opc1 == 0 && crm == 0 && opc2 == 0) { 287 return MISCREG_DACR; 288 } 289 break; 290 case 4: 291 if (opc1 == 0 && crm == 6 && opc2 == 0) { 292 return MISCREG_ICC_PMR; 293 } 294 break; 295 case 5: 296 if (opc1 == 0) { 297 if (crm == 0) { 298 if (opc2 == 0) { 299 return MISCREG_DFSR; 300 } else if (opc2 == 1) { 301 return MISCREG_IFSR; 302 } 303 } else if (crm == 1) { 304 if (opc2 == 0) { 305 return MISCREG_ADFSR; 306 } else if (opc2 == 1) { 307 return MISCREG_AIFSR; 308 } 309 } 310 } else if (opc1 == 4) { 311 if (crm == 1) { 312 if (opc2 == 0) 313 return MISCREG_HADFSR; 314 else if (opc2 == 1) 315 return MISCREG_HAIFSR; 316 } else if (crm == 2 && opc2 == 0) { 317 return MISCREG_HSR; 318 } 319 } 320 break; 321 case 6: 322 if (opc1 == 0 && crm == 0) { 323 switch (opc2) { 324 case 0: 325 return MISCREG_DFAR; 326 case 2: 327 return MISCREG_IFAR; 328 } 329 } else if (opc1 == 4 && crm == 0) { 330 switch (opc2) { 331 case 0: 332 return MISCREG_HDFAR; 333 case 2: 334 return MISCREG_HIFAR; 335 case 4: 336 return MISCREG_HPFAR; 337 } 338 } 339 break; 340 case 7: 341 if (opc1 == 0) { 342 switch (crm) { 343 case 0: 344 if (opc2 == 4) { 345 return MISCREG_NOP; 346 } 347 break; 348 case 1: 349 switch (opc2) { 350 case 0: 351 return MISCREG_ICIALLUIS; 352 case 6: 353 return MISCREG_BPIALLIS; 354 } 355 break; 356 case 4: 357 if (opc2 == 0) { 358 return MISCREG_PAR; 359 } 360 break; 361 case 5: 362 switch (opc2) { 363 case 0: 364 return MISCREG_ICIALLU; 365 case 1: 366 return MISCREG_ICIMVAU; 367 case 4: 368 return MISCREG_CP15ISB; 369 case 6: 370 return MISCREG_BPIALL; 371 case 7: 372 return MISCREG_BPIMVA; 373 } 374 break; 375 case 6: 376 if (opc2 == 1) { 377 return MISCREG_DCIMVAC; 378 } else if (opc2 == 2) { 379 return MISCREG_DCISW; 380 } 381 break; 382 case 8: 383 switch (opc2) { 384 case 0: 385 return MISCREG_ATS1CPR; 386 case 1: 387 return MISCREG_ATS1CPW; 388 case 2: 389 return MISCREG_ATS1CUR; 390 case 3: 391 return MISCREG_ATS1CUW; 392 case 4: 393 return MISCREG_ATS12NSOPR; 394 case 5: 395 return MISCREG_ATS12NSOPW; 396 case 6: 397 return MISCREG_ATS12NSOUR; 398 case 7: 399 return MISCREG_ATS12NSOUW; 400 } 401 break; 402 case 10: 403 switch (opc2) { 404 case 1: 405 return MISCREG_DCCMVAC; 406 case 2: 407 return MISCREG_DCCSW; 408 case 4: 409 return MISCREG_CP15DSB; 410 case 5: 411 return MISCREG_CP15DMB; 412 } 413 break; 414 case 11: 415 if (opc2 == 1) { 416 return MISCREG_DCCMVAU; 417 } 418 break; 419 case 13: 420 if (opc2 == 1) { 421 return MISCREG_NOP; 422 } 423 break; 424 case 14: 425 if (opc2 == 1) { 426 return MISCREG_DCCIMVAC; 427 } else if (opc2 == 2) { 428 return MISCREG_DCCISW; 429 } 430 break; 431 } 432 } else if (opc1 == 4 && crm == 8) { 433 if (opc2 == 0) 434 return MISCREG_ATS1HR; 435 else if (opc2 == 1) 436 return MISCREG_ATS1HW; 437 } 438 break; 439 case 8: 440 if (opc1 == 0) { 441 switch (crm) { 442 case 3: 443 switch (opc2) { 444 case 0: 445 return MISCREG_TLBIALLIS; 446 case 1: 447 return MISCREG_TLBIMVAIS; 448 case 2: 449 return MISCREG_TLBIASIDIS; 450 case 3: 451 return MISCREG_TLBIMVAAIS; 452 case 5: 453 return MISCREG_TLBIMVALIS; 454 case 7: 455 return MISCREG_TLBIMVAALIS; 456 } 457 break; 458 case 5: 459 switch (opc2) { 460 case 0: 461 return MISCREG_ITLBIALL; 462 case 1: 463 return MISCREG_ITLBIMVA; 464 case 2: 465 return MISCREG_ITLBIASID; 466 } 467 break; 468 case 6: 469 switch (opc2) { 470 case 0: 471 return MISCREG_DTLBIALL; 472 case 1: 473 return MISCREG_DTLBIMVA; 474 case 2: 475 return MISCREG_DTLBIASID; 476 } 477 break; 478 case 7: 479 switch (opc2) { 480 case 0: 481 return MISCREG_TLBIALL; 482 case 1: 483 return MISCREG_TLBIMVA; 484 case 2: 485 return MISCREG_TLBIASID; 486 case 3: 487 return MISCREG_TLBIMVAA; 488 case 5: 489 return MISCREG_TLBIMVAL; 490 case 7: 491 return MISCREG_TLBIMVAAL; 492 } 493 break; 494 } 495 } else if (opc1 == 4) { 496 if (crm == 0) { 497 switch (opc2) { 498 case 1: 499 return MISCREG_TLBIIPAS2IS; 500 case 5: 501 return MISCREG_TLBIIPAS2LIS; 502 } 503 } else if (crm == 3) { 504 switch (opc2) { 505 case 0: 506 return MISCREG_TLBIALLHIS; 507 case 1: 508 return MISCREG_TLBIMVAHIS; 509 case 4: 510 return MISCREG_TLBIALLNSNHIS; 511 case 5: 512 return MISCREG_TLBIMVALHIS; 513 } 514 } else if (crm == 4) { 515 switch (opc2) { 516 case 1: 517 return MISCREG_TLBIIPAS2; 518 case 5: 519 return MISCREG_TLBIIPAS2L; 520 } 521 } else if (crm == 7) { 522 switch (opc2) { 523 case 0: 524 return MISCREG_TLBIALLH; 525 case 1: 526 return MISCREG_TLBIMVAH; 527 case 4: 528 return MISCREG_TLBIALLNSNH; 529 case 5: 530 return MISCREG_TLBIMVALH; 531 } 532 } 533 } 534 break; 535 case 9: 536 // Every cop register with CRn = 9 and CRm in 537 // {0-2}, {5-8} is implementation defined regardless 538 // of opc1 and opc2. 539 switch (crm) { 540 case 0: 541 case 1: 542 case 2: 543 case 5: 544 case 6: 545 case 7: 546 case 8: 547 return MISCREG_IMPDEF_UNIMPL; 548 } 549 if (opc1 == 0) { 550 switch (crm) { 551 case 12: 552 switch (opc2) { 553 case 0: 554 return MISCREG_PMCR; 555 case 1: 556 return MISCREG_PMCNTENSET; 557 case 2: 558 return MISCREG_PMCNTENCLR; 559 case 3: 560 return MISCREG_PMOVSR; 561 case 4: 562 return MISCREG_PMSWINC; 563 case 5: 564 return MISCREG_PMSELR; 565 case 6: 566 return MISCREG_PMCEID0; 567 case 7: 568 return MISCREG_PMCEID1; 569 } 570 break; 571 case 13: 572 switch (opc2) { 573 case 0: 574 return MISCREG_PMCCNTR; 575 case 1: 576 // Selector is PMSELR.SEL 577 return MISCREG_PMXEVTYPER_PMCCFILTR; 578 case 2: 579 return MISCREG_PMXEVCNTR; 580 } 581 break; 582 case 14: 583 switch (opc2) { 584 case 0: 585 return MISCREG_PMUSERENR; 586 case 1: 587 return MISCREG_PMINTENSET; 588 case 2: 589 return MISCREG_PMINTENCLR; 590 case 3: 591 return MISCREG_PMOVSSET; 592 } 593 break; 594 } 595 } else if (opc1 == 1) { 596 switch (crm) { 597 case 0: 598 switch (opc2) { 599 case 2: // L2CTLR, L2 Control Register 600 return MISCREG_L2CTLR; 601 case 3: 602 return MISCREG_L2ECTLR; 603 } 604 break; 605 break; 606 } 607 } 608 break; 609 case 10: 610 if (opc1 == 0) { 611 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown 612 if (crm < 2) { 613 return MISCREG_IMPDEF_UNIMPL; 614 } else if (crm == 2) { // TEX Remap Registers 615 if (opc2 == 0) { 616 // Selector is TTBCR.EAE 617 return MISCREG_PRRR_MAIR0; 618 } else if (opc2 == 1) { 619 // Selector is TTBCR.EAE 620 return MISCREG_NMRR_MAIR1; 621 } 622 } else if (crm == 3) { 623 if (opc2 == 0) { 624 return MISCREG_AMAIR0; 625 } else if (opc2 == 1) { 626 return MISCREG_AMAIR1; 627 } 628 } 629 } else if (opc1 == 4) { 630 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown 631 if (crm == 2) { 632 if (opc2 == 0) 633 return MISCREG_HMAIR0; 634 else if (opc2 == 1) 635 return MISCREG_HMAIR1; 636 } else if (crm == 3) { 637 if (opc2 == 0) 638 return MISCREG_HAMAIR0; 639 else if (opc2 == 1) 640 return MISCREG_HAMAIR1; 641 } 642 } 643 break; 644 case 11: 645 if (opc1 <=7) { 646 switch (crm) { 647 case 0: 648 case 1: 649 case 2: 650 case 3: 651 case 4: 652 case 5: 653 case 6: 654 case 7: 655 case 8: 656 case 15: 657 // Reserved for DMA operations for TCM access 658 return MISCREG_IMPDEF_UNIMPL; 659 default: 660 break; 661 } 662 } 663 break; 664 case 12: 665 if (opc1 == 0) { 666 if (crm == 0) { 667 if (opc2 == 0) { 668 return MISCREG_VBAR; 669 } else if (opc2 == 1) { 670 return MISCREG_MVBAR; 671 } 672 } else if (crm == 1) { 673 if (opc2 == 0) { 674 return MISCREG_ISR; 675 } 676 } else if (crm == 8) { 677 switch (opc2) { 678 case 0: 679 return MISCREG_ICC_IAR0; 680 case 1: 681 return MISCREG_ICC_EOIR0; 682 case 2: 683 return MISCREG_ICC_HPPIR0; 684 case 3: 685 return MISCREG_ICC_BPR0; 686 case 4: 687 return MISCREG_ICC_AP0R0; 688 case 5: 689 return MISCREG_ICC_AP0R1; 690 case 6: 691 return MISCREG_ICC_AP0R2; 692 case 7: 693 return MISCREG_ICC_AP0R3; 694 } 695 } else if (crm == 9) { 696 switch (opc2) { 697 case 0: 698 return MISCREG_ICC_AP1R0; 699 case 1: 700 return MISCREG_ICC_AP1R1; 701 case 2: 702 return MISCREG_ICC_AP1R2; 703 case 3: 704 return MISCREG_ICC_AP1R3; 705 } 706 } else if (crm == 11) { 707 switch (opc2) { 708 case 1: 709 return MISCREG_ICC_DIR; 710 case 3: 711 return MISCREG_ICC_RPR; 712 } 713 } else if (crm == 12) { 714 switch (opc2) { 715 case 0: 716 return MISCREG_ICC_IAR1; 717 case 1: 718 return MISCREG_ICC_EOIR1; 719 case 2: 720 return MISCREG_ICC_HPPIR1; 721 case 3: 722 return MISCREG_ICC_BPR1; 723 case 4: 724 return MISCREG_ICC_CTLR; 725 case 5: 726 return MISCREG_ICC_SRE; 727 case 6: 728 return MISCREG_ICC_IGRPEN0; 729 case 7: 730 return MISCREG_ICC_IGRPEN1; 731 } 732 } 733 } else if (opc1 == 4) { 734 if (crm == 0 && opc2 == 0) { 735 return MISCREG_HVBAR; 736 } else if (crm == 8) { 737 switch (opc2) { 738 case 0: 739 return MISCREG_ICH_AP0R0; 740 case 1: 741 return MISCREG_ICH_AP0R1; 742 case 2: 743 return MISCREG_ICH_AP0R2; 744 case 3: 745 return MISCREG_ICH_AP0R3; 746 } 747 } else if (crm == 9) { 748 switch (opc2) { 749 case 0: 750 return MISCREG_ICH_AP1R0; 751 case 1: 752 return MISCREG_ICH_AP1R1; 753 case 2: 754 return MISCREG_ICH_AP1R2; 755 case 3: 756 return MISCREG_ICH_AP1R3; 757 case 5: 758 return MISCREG_ICC_HSRE; 759 } 760 } else if (crm == 11) { 761 switch (opc2) { 762 case 0: 763 return MISCREG_ICH_HCR; 764 case 1: 765 return MISCREG_ICH_VTR; 766 case 2: 767 return MISCREG_ICH_MISR; 768 case 3: 769 return MISCREG_ICH_EISR; 770 case 5: 771 return MISCREG_ICH_ELRSR; 772 case 7: 773 return MISCREG_ICH_VMCR; 774 } 775 } else if (crm == 12) { 776 switch (opc2) { 777 case 0: 778 return MISCREG_ICH_LR0; 779 case 1: 780 return MISCREG_ICH_LR1; 781 case 2: 782 return MISCREG_ICH_LR2; 783 case 3: 784 return MISCREG_ICH_LR3; 785 case 4: 786 return MISCREG_ICH_LR4; 787 case 5: 788 return MISCREG_ICH_LR5; 789 case 6: 790 return MISCREG_ICH_LR6; 791 case 7: 792 return MISCREG_ICH_LR7; 793 } 794 } else if (crm == 13) { 795 switch (opc2) { 796 case 0: 797 return MISCREG_ICH_LR8; 798 case 1: 799 return MISCREG_ICH_LR9; 800 case 2: 801 return MISCREG_ICH_LR10; 802 case 3: 803 return MISCREG_ICH_LR11; 804 case 4: 805 return MISCREG_ICH_LR12; 806 case 5: 807 return MISCREG_ICH_LR13; 808 case 6: 809 return MISCREG_ICH_LR14; 810 case 7: 811 return MISCREG_ICH_LR15; 812 } 813 } else if (crm == 14) { 814 switch (opc2) { 815 case 0: 816 return MISCREG_ICH_LRC0; 817 case 1: 818 return MISCREG_ICH_LRC1; 819 case 2: 820 return MISCREG_ICH_LRC2; 821 case 3: 822 return MISCREG_ICH_LRC3; 823 case 4: 824 return MISCREG_ICH_LRC4; 825 case 5: 826 return MISCREG_ICH_LRC5; 827 case 6: 828 return MISCREG_ICH_LRC6; 829 case 7: 830 return MISCREG_ICH_LRC7; 831 } 832 } else if (crm == 15) { 833 switch (opc2) { 834 case 0: 835 return MISCREG_ICH_LRC8; 836 case 1: 837 return MISCREG_ICH_LRC9; 838 case 2: 839 return MISCREG_ICH_LRC10; 840 case 3: 841 return MISCREG_ICH_LRC11; 842 case 4: 843 return MISCREG_ICH_LRC12; 844 case 5: 845 return MISCREG_ICH_LRC13; 846 case 6: 847 return MISCREG_ICH_LRC14; 848 case 7: 849 return MISCREG_ICH_LRC15; 850 } 851 } 852 } else if (opc1 == 6) { 853 if (crm == 12) { 854 switch (opc2) { 855 case 4: 856 return MISCREG_ICC_MCTLR; 857 case 5: 858 return MISCREG_ICC_MSRE; 859 case 7: 860 return MISCREG_ICC_MGRPEN1; 861 } 862 } 863 } 864 break; 865 case 13: 866 if (opc1 == 0) { 867 if (crm == 0) { 868 switch (opc2) { 869 case 0: 870 return MISCREG_FCSEIDR; 871 case 1: 872 return MISCREG_CONTEXTIDR; 873 case 2: 874 return MISCREG_TPIDRURW; 875 case 3: 876 return MISCREG_TPIDRURO; 877 case 4: 878 return MISCREG_TPIDRPRW; 879 } 880 } 881 } else if (opc1 == 4) { 882 if (crm == 0 && opc2 == 2) 883 return MISCREG_HTPIDR; 884 } 885 break; 886 case 14: 887 if (opc1 == 0) { 888 switch (crm) { 889 case 0: 890 if (opc2 == 0) 891 return MISCREG_CNTFRQ; 892 break; 893 case 1: 894 if (opc2 == 0) 895 return MISCREG_CNTKCTL; 896 break; 897 case 2: 898 if (opc2 == 0) 899 return MISCREG_CNTP_TVAL; 900 else if (opc2 == 1) 901 return MISCREG_CNTP_CTL; 902 break; 903 case 3: 904 if (opc2 == 0) 905 return MISCREG_CNTV_TVAL; 906 else if (opc2 == 1) 907 return MISCREG_CNTV_CTL; 908 break; 909 } 910 } else if (opc1 == 4) { 911 if (crm == 1 && opc2 == 0) { 912 return MISCREG_CNTHCTL; 913 } else if (crm == 2) { 914 if (opc2 == 0) 915 return MISCREG_CNTHP_TVAL; 916 else if (opc2 == 1) 917 return MISCREG_CNTHP_CTL; 918 } 919 } 920 break; 921 case 15: 922 // Implementation defined 923 return MISCREG_IMPDEF_UNIMPL; 924 } 925 // Unrecognized register 926 return MISCREG_CP15_UNIMPL; 927} 928 929MiscRegIndex 930decodeCP15Reg64(unsigned crm, unsigned opc1) 931{ 932 switch (crm) { 933 case 2: 934 switch (opc1) { 935 case 0: 936 return MISCREG_TTBR0; 937 case 1: 938 return MISCREG_TTBR1; 939 case 4: 940 return MISCREG_HTTBR; 941 case 6: 942 return MISCREG_VTTBR; 943 } 944 break; 945 case 7: 946 if (opc1 == 0) 947 return MISCREG_PAR; 948 break; 949 case 14: 950 switch (opc1) { 951 case 0: 952 return MISCREG_CNTPCT; 953 case 1: 954 return MISCREG_CNTVCT; 955 case 2: 956 return MISCREG_CNTP_CVAL; 957 case 3: 958 return MISCREG_CNTV_CVAL; 959 case 4: 960 return MISCREG_CNTVOFF; 961 case 6: 962 return MISCREG_CNTHP_CVAL; 963 } 964 break; 965 case 12: 966 switch (opc1) { 967 case 0: 968 return MISCREG_ICC_SGI1R; 969 case 1: 970 return MISCREG_ICC_ASGI1R; 971 case 2: 972 return MISCREG_ICC_SGI0R; 973 default: 974 break; 975 } 976 break; 977 case 15: 978 if (opc1 == 0) 979 return MISCREG_CPUMERRSR; 980 else if (opc1 == 1) 981 return MISCREG_L2MERRSR; 982 break; 983 } 984 // Unrecognized register 985 return MISCREG_CP15_UNIMPL; 986} 987 988std::tuple<bool, bool> 989canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr) 990{ 991 bool secure = !scr.ns; 992 bool canRead = false; 993 bool undefined = false; 994 995 switch (cpsr.mode) { 996 case MODE_USER: 997 canRead = secure ? miscRegInfo[reg][MISCREG_USR_S_RD] : 998 miscRegInfo[reg][MISCREG_USR_NS_RD]; 999 break; 1000 case MODE_FIQ: 1001 case MODE_IRQ: 1002 case MODE_SVC: 1003 case MODE_ABORT: 1004 case MODE_UNDEFINED: 1005 case MODE_SYSTEM: 1006 canRead = secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] : 1007 miscRegInfo[reg][MISCREG_PRI_NS_RD]; 1008 break; 1009 case MODE_MON: 1010 canRead = secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] : 1011 miscRegInfo[reg][MISCREG_MON_NS1_RD]; 1012 break; 1013 case MODE_HYP: 1014 canRead = miscRegInfo[reg][MISCREG_HYP_RD]; 1015 break; 1016 default: 1017 undefined = true; 1018 } 1019 // can't do permissions checkes on the root of a banked pair of regs 1020 assert(!miscRegInfo[reg][MISCREG_BANKED]); 1021 return std::make_tuple(canRead, undefined); 1022} 1023 1024std::tuple<bool, bool> 1025canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr) 1026{ 1027 bool secure = !scr.ns; 1028 bool canWrite = false; 1029 bool undefined = false; 1030 1031 switch (cpsr.mode) { 1032 case MODE_USER: 1033 canWrite = secure ? miscRegInfo[reg][MISCREG_USR_S_WR] : 1034 miscRegInfo[reg][MISCREG_USR_NS_WR]; 1035 break; 1036 case MODE_FIQ: 1037 case MODE_IRQ: 1038 case MODE_SVC: 1039 case MODE_ABORT: 1040 case MODE_UNDEFINED: 1041 case MODE_SYSTEM: 1042 canWrite = secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] : 1043 miscRegInfo[reg][MISCREG_PRI_NS_WR]; 1044 break; 1045 case MODE_MON: 1046 canWrite = secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] : 1047 miscRegInfo[reg][MISCREG_MON_NS1_WR]; 1048 break; 1049 case MODE_HYP: 1050 canWrite = miscRegInfo[reg][MISCREG_HYP_WR]; 1051 break; 1052 default: 1053 undefined = true; 1054 } 1055 // can't do permissions checkes on the root of a banked pair of regs 1056 assert(!miscRegInfo[reg][MISCREG_BANKED]); 1057 return std::make_tuple(canWrite, undefined); 1058} 1059 1060int 1061snsBankedIndex(MiscRegIndex reg, ThreadContext *tc) 1062{ 1063 SCR scr = tc->readMiscReg(MISCREG_SCR); 1064 return snsBankedIndex(reg, tc, scr.ns); 1065} 1066 1067int 1068snsBankedIndex(MiscRegIndex reg, ThreadContext *tc, bool ns) 1069{ 1070 int reg_as_int = static_cast<int>(reg); 1071 if (miscRegInfo[reg][MISCREG_BANKED]) { 1072 reg_as_int += (ArmSystem::haveSecurity(tc) && 1073 !ArmSystem::highestELIs64(tc) && !ns) ? 2 : 1; 1074 } 1075 return reg_as_int; 1076} 1077 1078int 1079snsBankedIndex64(MiscRegIndex reg, ThreadContext *tc) 1080{ 1081 SCR scr = tc->readMiscReg(MISCREG_SCR); 1082 return tc->getIsaPtr()->snsBankedIndex64(reg, scr.ns); 1083} 1084 1085/** 1086 * If the reg is a child reg of a banked set, then the parent is the last 1087 * banked one in the list. This is messy, and the wish is to eventually have 1088 * the bitmap replaced with a better data structure. the preUnflatten function 1089 * initializes a lookup table to speed up the search for these banked 1090 * registers. 1091 */ 1092 1093int unflattenResultMiscReg[NUM_MISCREGS]; 1094 1095void 1096preUnflattenMiscReg() 1097{ 1098 int reg = -1; 1099 for (int i = 0 ; i < NUM_MISCREGS; i++){ 1100 if (miscRegInfo[i][MISCREG_BANKED]) 1101 reg = i; 1102 if (miscRegInfo[i][MISCREG_BANKED_CHILD]) 1103 unflattenResultMiscReg[i] = reg; 1104 else 1105 unflattenResultMiscReg[i] = i; 1106 // if this assert fails, no parent was found, and something is broken 1107 assert(unflattenResultMiscReg[i] > -1); 1108 } 1109} 1110 1111int 1112unflattenMiscReg(int reg) 1113{ 1114 return unflattenResultMiscReg[reg]; 1115} 1116 1117bool 1118canReadAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc) 1119{ 1120 // Check for SP_EL0 access while SPSEL == 0 1121 if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0)) 1122 return false; 1123 1124 // Check for RVBAR access 1125 if (reg == MISCREG_RVBAR_EL1) { 1126 ExceptionLevel highest_el = ArmSystem::highestEL(tc); 1127 if (highest_el == EL2 || highest_el == EL3) 1128 return false; 1129 } 1130 if (reg == MISCREG_RVBAR_EL2) { 1131 ExceptionLevel highest_el = ArmSystem::highestEL(tc); 1132 if (highest_el == EL3) 1133 return false; 1134 } 1135 1136 bool secure = ArmSystem::haveSecurity(tc) && !scr.ns; 1137 1138 switch (currEL(cpsr)) { 1139 case EL0: 1140 return secure ? miscRegInfo[reg][MISCREG_USR_S_RD] : 1141 miscRegInfo[reg][MISCREG_USR_NS_RD]; 1142 case EL1: 1143 return secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] : 1144 miscRegInfo[reg][MISCREG_PRI_NS_RD]; 1145 case EL2: 1146 return miscRegInfo[reg][MISCREG_HYP_RD]; 1147 case EL3: 1148 return secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] : 1149 miscRegInfo[reg][MISCREG_MON_NS1_RD]; 1150 default: 1151 panic("Invalid exception level"); 1152 } 1153} 1154 1155bool 1156canWriteAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc) 1157{ 1158 // Check for SP_EL0 access while SPSEL == 0 1159 if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0)) 1160 return false; 1161 ExceptionLevel el = currEL(cpsr); 1162 if (reg == MISCREG_DAIF) { 1163 SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1); 1164 if (el == EL0 && !sctlr.uma) 1165 return false; 1166 } 1167 if (FullSystem && reg == MISCREG_DC_ZVA_Xt) { 1168 // In syscall-emulation mode, this test is skipped and DCZVA is always 1169 // allowed at EL0 1170 SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1); 1171 if (el == EL0 && !sctlr.dze) 1172 return false; 1173 } 1174 if (reg == MISCREG_DC_CVAC_Xt || reg == MISCREG_DC_CIVAC_Xt) { 1175 SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1); 1176 if (el == EL0 && !sctlr.uci) 1177 return false; 1178 } 1179 1180 bool secure = ArmSystem::haveSecurity(tc) && !scr.ns; 1181 1182 switch (el) { 1183 case EL0: 1184 return secure ? miscRegInfo[reg][MISCREG_USR_S_WR] : 1185 miscRegInfo[reg][MISCREG_USR_NS_WR]; 1186 case EL1: 1187 return secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] : 1188 miscRegInfo[reg][MISCREG_PRI_NS_WR]; 1189 case EL2: 1190 return miscRegInfo[reg][MISCREG_HYP_WR]; 1191 case EL3: 1192 return secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] : 1193 miscRegInfo[reg][MISCREG_MON_NS1_WR]; 1194 default: 1195 panic("Invalid exception level"); 1196 } 1197} 1198 1199MiscRegIndex 1200decodeAArch64SysReg(unsigned op0, unsigned op1, 1201 unsigned crn, unsigned crm, 1202 unsigned op2) 1203{ 1204 switch (op0) { 1205 case 1: 1206 switch (crn) { 1207 case 7: 1208 switch (op1) { 1209 case 0: 1210 switch (crm) { 1211 case 1: 1212 switch (op2) { 1213 case 0: 1214 return MISCREG_IC_IALLUIS; 1215 } 1216 break; 1217 case 5: 1218 switch (op2) { 1219 case 0: 1220 return MISCREG_IC_IALLU; 1221 } 1222 break; 1223 case 6: 1224 switch (op2) { 1225 case 1: 1226 return MISCREG_DC_IVAC_Xt; 1227 case 2: 1228 return MISCREG_DC_ISW_Xt; 1229 } 1230 break; 1231 case 8: 1232 switch (op2) { 1233 case 0: 1234 return MISCREG_AT_S1E1R_Xt; 1235 case 1: 1236 return MISCREG_AT_S1E1W_Xt; 1237 case 2: 1238 return MISCREG_AT_S1E0R_Xt; 1239 case 3: 1240 return MISCREG_AT_S1E0W_Xt; 1241 } 1242 break; 1243 case 10: 1244 switch (op2) { 1245 case 2: 1246 return MISCREG_DC_CSW_Xt; 1247 } 1248 break; 1249 case 14: 1250 switch (op2) { 1251 case 2: 1252 return MISCREG_DC_CISW_Xt; 1253 } 1254 break; 1255 } 1256 break; 1257 case 3: 1258 switch (crm) { 1259 case 4: 1260 switch (op2) { 1261 case 1: 1262 return MISCREG_DC_ZVA_Xt; 1263 } 1264 break; 1265 case 5: 1266 switch (op2) { 1267 case 1: 1268 return MISCREG_IC_IVAU_Xt; 1269 } 1270 break; 1271 case 10: 1272 switch (op2) { 1273 case 1: 1274 return MISCREG_DC_CVAC_Xt; 1275 } 1276 break; 1277 case 11: 1278 switch (op2) { 1279 case 1: 1280 return MISCREG_DC_CVAU_Xt; 1281 } 1282 break; 1283 case 14: 1284 switch (op2) { 1285 case 1: 1286 return MISCREG_DC_CIVAC_Xt; 1287 } 1288 break; 1289 } 1290 break; 1291 case 4: 1292 switch (crm) { 1293 case 8: 1294 switch (op2) { 1295 case 0: 1296 return MISCREG_AT_S1E2R_Xt; 1297 case 1: 1298 return MISCREG_AT_S1E2W_Xt; 1299 case 4: 1300 return MISCREG_AT_S12E1R_Xt; 1301 case 5: 1302 return MISCREG_AT_S12E1W_Xt; 1303 case 6: 1304 return MISCREG_AT_S12E0R_Xt; 1305 case 7: 1306 return MISCREG_AT_S12E0W_Xt; 1307 } 1308 break; 1309 } 1310 break; 1311 case 6: 1312 switch (crm) { 1313 case 8: 1314 switch (op2) { 1315 case 0: 1316 return MISCREG_AT_S1E3R_Xt; 1317 case 1: 1318 return MISCREG_AT_S1E3W_Xt; 1319 } 1320 break; 1321 } 1322 break; 1323 } 1324 break; 1325 case 8: 1326 switch (op1) { 1327 case 0: 1328 switch (crm) { 1329 case 3: 1330 switch (op2) { 1331 case 0: 1332 return MISCREG_TLBI_VMALLE1IS; 1333 case 1: 1334 return MISCREG_TLBI_VAE1IS_Xt; 1335 case 2: 1336 return MISCREG_TLBI_ASIDE1IS_Xt; 1337 case 3: 1338 return MISCREG_TLBI_VAAE1IS_Xt; 1339 case 5: 1340 return MISCREG_TLBI_VALE1IS_Xt; 1341 case 7: 1342 return MISCREG_TLBI_VAALE1IS_Xt; 1343 } 1344 break; 1345 case 7: 1346 switch (op2) { 1347 case 0: 1348 return MISCREG_TLBI_VMALLE1; 1349 case 1: 1350 return MISCREG_TLBI_VAE1_Xt; 1351 case 2: 1352 return MISCREG_TLBI_ASIDE1_Xt; 1353 case 3: 1354 return MISCREG_TLBI_VAAE1_Xt; 1355 case 5: 1356 return MISCREG_TLBI_VALE1_Xt; 1357 case 7: 1358 return MISCREG_TLBI_VAALE1_Xt; 1359 } 1360 break; 1361 } 1362 break; 1363 case 4: 1364 switch (crm) { 1365 case 0: 1366 switch (op2) { 1367 case 1: 1368 return MISCREG_TLBI_IPAS2E1IS_Xt; 1369 case 5: 1370 return MISCREG_TLBI_IPAS2LE1IS_Xt; 1371 } 1372 break; 1373 case 3: 1374 switch (op2) { 1375 case 0: 1376 return MISCREG_TLBI_ALLE2IS; 1377 case 1: 1378 return MISCREG_TLBI_VAE2IS_Xt; 1379 case 4: 1380 return MISCREG_TLBI_ALLE1IS; 1381 case 5: 1382 return MISCREG_TLBI_VALE2IS_Xt; 1383 case 6: 1384 return MISCREG_TLBI_VMALLS12E1IS; 1385 } 1386 break; 1387 case 4: 1388 switch (op2) { 1389 case 1: 1390 return MISCREG_TLBI_IPAS2E1_Xt; 1391 case 5: 1392 return MISCREG_TLBI_IPAS2LE1_Xt; 1393 } 1394 break; 1395 case 7: 1396 switch (op2) { 1397 case 0: 1398 return MISCREG_TLBI_ALLE2; 1399 case 1: 1400 return MISCREG_TLBI_VAE2_Xt; 1401 case 4: 1402 return MISCREG_TLBI_ALLE1; 1403 case 5: 1404 return MISCREG_TLBI_VALE2_Xt; 1405 case 6: 1406 return MISCREG_TLBI_VMALLS12E1; 1407 } 1408 break; 1409 } 1410 break; 1411 case 6: 1412 switch (crm) { 1413 case 3: 1414 switch (op2) { 1415 case 0: 1416 return MISCREG_TLBI_ALLE3IS; 1417 case 1: 1418 return MISCREG_TLBI_VAE3IS_Xt; 1419 case 5: 1420 return MISCREG_TLBI_VALE3IS_Xt; 1421 } 1422 break; 1423 case 7: 1424 switch (op2) { 1425 case 0: 1426 return MISCREG_TLBI_ALLE3; 1427 case 1: 1428 return MISCREG_TLBI_VAE3_Xt; 1429 case 5: 1430 return MISCREG_TLBI_VALE3_Xt; 1431 } 1432 break; 1433 } 1434 break; 1435 } 1436 break; 1437 case 11: 1438 case 15: 1439 // SYS Instruction with CRn = { 11, 15 } 1440 // (Trappable by HCR_EL2.TIDCP) 1441 return MISCREG_IMPDEF_UNIMPL; 1442 } 1443 break; 1444 case 2: 1445 switch (crn) { 1446 case 0: 1447 switch (op1) { 1448 case 0: 1449 switch (crm) { 1450 case 0: 1451 switch (op2) { 1452 case 2: 1453 return MISCREG_OSDTRRX_EL1; 1454 case 4: 1455 return MISCREG_DBGBVR0_EL1; 1456 case 5: 1457 return MISCREG_DBGBCR0_EL1; 1458 case 6: 1459 return MISCREG_DBGWVR0_EL1; 1460 case 7: 1461 return MISCREG_DBGWCR0_EL1; 1462 } 1463 break; 1464 case 1: 1465 switch (op2) { 1466 case 4: 1467 return MISCREG_DBGBVR1_EL1; 1468 case 5: 1469 return MISCREG_DBGBCR1_EL1; 1470 case 6: 1471 return MISCREG_DBGWVR1_EL1; 1472 case 7: 1473 return MISCREG_DBGWCR1_EL1; 1474 } 1475 break; 1476 case 2: 1477 switch (op2) { 1478 case 0: 1479 return MISCREG_MDCCINT_EL1; 1480 case 2: 1481 return MISCREG_MDSCR_EL1; 1482 case 4: 1483 return MISCREG_DBGBVR2_EL1; 1484 case 5: 1485 return MISCREG_DBGBCR2_EL1; 1486 case 6: 1487 return MISCREG_DBGWVR2_EL1; 1488 case 7: 1489 return MISCREG_DBGWCR2_EL1; 1490 } 1491 break; 1492 case 3: 1493 switch (op2) { 1494 case 2: 1495 return MISCREG_OSDTRTX_EL1; 1496 case 4: 1497 return MISCREG_DBGBVR3_EL1; 1498 case 5: 1499 return MISCREG_DBGBCR3_EL1; 1500 case 6: 1501 return MISCREG_DBGWVR3_EL1; 1502 case 7: 1503 return MISCREG_DBGWCR3_EL1; 1504 } 1505 break; 1506 case 4: 1507 switch (op2) { 1508 case 4: 1509 return MISCREG_DBGBVR4_EL1; 1510 case 5: 1511 return MISCREG_DBGBCR4_EL1; 1512 } 1513 break; 1514 case 5: 1515 switch (op2) { 1516 case 4: 1517 return MISCREG_DBGBVR5_EL1; 1518 case 5: 1519 return MISCREG_DBGBCR5_EL1; 1520 } 1521 break; 1522 case 6: 1523 switch (op2) { 1524 case 2: 1525 return MISCREG_OSECCR_EL1; 1526 } 1527 break; 1528 } 1529 break; 1530 case 2: 1531 switch (crm) { 1532 case 0: 1533 switch (op2) { 1534 case 0: 1535 return MISCREG_TEECR32_EL1; 1536 } 1537 break; 1538 } 1539 break; 1540 case 3: 1541 switch (crm) { 1542 case 1: 1543 switch (op2) { 1544 case 0: 1545 return MISCREG_MDCCSR_EL0; 1546 } 1547 break; 1548 case 4: 1549 switch (op2) { 1550 case 0: 1551 return MISCREG_MDDTR_EL0; 1552 } 1553 break; 1554 case 5: 1555 switch (op2) { 1556 case 0: 1557 return MISCREG_MDDTRRX_EL0; 1558 } 1559 break; 1560 } 1561 break; 1562 case 4: 1563 switch (crm) { 1564 case 7: 1565 switch (op2) { 1566 case 0: 1567 return MISCREG_DBGVCR32_EL2; 1568 } 1569 break; 1570 } 1571 break; 1572 } 1573 break; 1574 case 1: 1575 switch (op1) { 1576 case 0: 1577 switch (crm) { 1578 case 0: 1579 switch (op2) { 1580 case 0: 1581 return MISCREG_MDRAR_EL1; 1582 case 4: 1583 return MISCREG_OSLAR_EL1; 1584 } 1585 break; 1586 case 1: 1587 switch (op2) { 1588 case 4: 1589 return MISCREG_OSLSR_EL1; 1590 } 1591 break; 1592 case 3: 1593 switch (op2) { 1594 case 4: 1595 return MISCREG_OSDLR_EL1; 1596 } 1597 break; 1598 case 4: 1599 switch (op2) { 1600 case 4: 1601 return MISCREG_DBGPRCR_EL1; 1602 } 1603 break; 1604 } 1605 break; 1606 case 2: 1607 switch (crm) { 1608 case 0: 1609 switch (op2) { 1610 case 0: 1611 return MISCREG_TEEHBR32_EL1; 1612 } 1613 break; 1614 } 1615 break; 1616 } 1617 break; 1618 case 7: 1619 switch (op1) { 1620 case 0: 1621 switch (crm) { 1622 case 8: 1623 switch (op2) { 1624 case 6: 1625 return MISCREG_DBGCLAIMSET_EL1; 1626 } 1627 break; 1628 case 9: 1629 switch (op2) { 1630 case 6: 1631 return MISCREG_DBGCLAIMCLR_EL1; 1632 } 1633 break; 1634 case 14: 1635 switch (op2) { 1636 case 6: 1637 return MISCREG_DBGAUTHSTATUS_EL1; 1638 } 1639 break; 1640 } 1641 break; 1642 } 1643 break; 1644 } 1645 break; 1646 case 3: 1647 switch (crn) { 1648 case 0: 1649 switch (op1) { 1650 case 0: 1651 switch (crm) { 1652 case 0: 1653 switch (op2) { 1654 case 0: 1655 return MISCREG_MIDR_EL1; 1656 case 5: 1657 return MISCREG_MPIDR_EL1; 1658 case 6: 1659 return MISCREG_REVIDR_EL1; 1660 } 1661 break; 1662 case 1: 1663 switch (op2) { 1664 case 0: 1665 return MISCREG_ID_PFR0_EL1; 1666 case 1: 1667 return MISCREG_ID_PFR1_EL1; 1668 case 2: 1669 return MISCREG_ID_DFR0_EL1; 1670 case 3: 1671 return MISCREG_ID_AFR0_EL1; 1672 case 4: 1673 return MISCREG_ID_MMFR0_EL1; 1674 case 5: 1675 return MISCREG_ID_MMFR1_EL1; 1676 case 6: 1677 return MISCREG_ID_MMFR2_EL1; 1678 case 7: 1679 return MISCREG_ID_MMFR3_EL1; 1680 } 1681 break; 1682 case 2: 1683 switch (op2) { 1684 case 0: 1685 return MISCREG_ID_ISAR0_EL1; 1686 case 1: 1687 return MISCREG_ID_ISAR1_EL1; 1688 case 2: 1689 return MISCREG_ID_ISAR2_EL1; 1690 case 3: 1691 return MISCREG_ID_ISAR3_EL1; 1692 case 4: 1693 return MISCREG_ID_ISAR4_EL1; 1694 case 5: 1695 return MISCREG_ID_ISAR5_EL1; 1696 } 1697 break; 1698 case 3: 1699 switch (op2) { 1700 case 0: 1701 return MISCREG_MVFR0_EL1; 1702 case 1: 1703 return MISCREG_MVFR1_EL1; 1704 case 2: 1705 return MISCREG_MVFR2_EL1; 1706 case 3 ... 7: 1707 return MISCREG_RAZ; 1708 } 1709 break; 1710 case 4: 1711 switch (op2) { 1712 case 0: 1713 return MISCREG_ID_AA64PFR0_EL1; 1714 case 1: 1715 return MISCREG_ID_AA64PFR1_EL1; 1716 case 2 ... 3: 1717 return MISCREG_RAZ; 1718 case 4: 1719 return MISCREG_ID_AA64ZFR0_EL1; 1720 case 5 ... 7: 1721 return MISCREG_RAZ; 1722 } 1723 break; 1724 case 5: 1725 switch (op2) { 1726 case 0: 1727 return MISCREG_ID_AA64DFR0_EL1; 1728 case 1: 1729 return MISCREG_ID_AA64DFR1_EL1; 1730 case 4: 1731 return MISCREG_ID_AA64AFR0_EL1; 1732 case 5: 1733 return MISCREG_ID_AA64AFR1_EL1; 1734 case 2: 1735 case 3: 1736 case 6: 1737 case 7: 1738 return MISCREG_RAZ; 1739 } 1740 break; 1741 case 6: 1742 switch (op2) { 1743 case 0: 1744 return MISCREG_ID_AA64ISAR0_EL1; 1745 case 1: 1746 return MISCREG_ID_AA64ISAR1_EL1; 1747 case 2 ... 7: 1748 return MISCREG_RAZ; 1749 } 1750 break; 1751 case 7: 1752 switch (op2) { 1753 case 0: 1754 return MISCREG_ID_AA64MMFR0_EL1; 1755 case 1: 1756 return MISCREG_ID_AA64MMFR1_EL1; 1757 case 2: 1758 return MISCREG_ID_AA64MMFR2_EL1; 1759 case 3 ... 7: 1760 return MISCREG_RAZ; 1761 } 1762 break; 1763 } 1764 break; 1765 case 1: 1766 switch (crm) { 1767 case 0: 1768 switch (op2) { 1769 case 0: 1770 return MISCREG_CCSIDR_EL1; 1771 case 1: 1772 return MISCREG_CLIDR_EL1; 1773 case 7: 1774 return MISCREG_AIDR_EL1; 1775 } 1776 break; 1777 } 1778 break; 1779 case 2: 1780 switch (crm) { 1781 case 0: 1782 switch (op2) { 1783 case 0: 1784 return MISCREG_CSSELR_EL1; 1785 } 1786 break; 1787 } 1788 break; 1789 case 3: 1790 switch (crm) { 1791 case 0: 1792 switch (op2) { 1793 case 1: 1794 return MISCREG_CTR_EL0; 1795 case 7: 1796 return MISCREG_DCZID_EL0; 1797 } 1798 break; 1799 } 1800 break; 1801 case 4: 1802 switch (crm) { 1803 case 0: 1804 switch (op2) { 1805 case 0: 1806 return MISCREG_VPIDR_EL2; 1807 case 5: 1808 return MISCREG_VMPIDR_EL2; 1809 } 1810 break; 1811 } 1812 break; 1813 } 1814 break; 1815 case 1: 1816 switch (op1) { 1817 case 0: 1818 switch (crm) { 1819 case 0: 1820 switch (op2) { 1821 case 0: 1822 return MISCREG_SCTLR_EL1; 1823 case 1: 1824 return MISCREG_ACTLR_EL1; 1825 case 2: 1826 return MISCREG_CPACR_EL1; 1827 } 1828 break; 1829 case 2: 1830 switch (op2) { 1831 case 0: 1832 return MISCREG_ZCR_EL1; 1833 } 1834 break; 1835 } 1836 break; 1837 case 4: 1838 switch (crm) { 1839 case 0: 1840 switch (op2) { 1841 case 0: 1842 return MISCREG_SCTLR_EL2; 1843 case 1: 1844 return MISCREG_ACTLR_EL2; 1845 } 1846 break; 1847 case 1: 1848 switch (op2) { 1849 case 0: 1850 return MISCREG_HCR_EL2; 1851 case 1: 1852 return MISCREG_MDCR_EL2; 1853 case 2: 1854 return MISCREG_CPTR_EL2; 1855 case 3: 1856 return MISCREG_HSTR_EL2; 1857 case 7: 1858 return MISCREG_HACR_EL2; 1859 } 1860 break; 1861 case 2: 1862 switch (op2) { 1863 case 0: 1864 return MISCREG_ZCR_EL2; 1865 } 1866 break; 1867 } 1868 break; 1869 case 5: 1870 switch (crm) { 1871 case 2: 1872 switch (op2) { 1873 case 0: 1874 return MISCREG_ZCR_EL12; 1875 } 1876 break; 1877 } 1878 break; 1879 case 6: 1880 switch (crm) { 1881 case 0: 1882 switch (op2) { 1883 case 0: 1884 return MISCREG_SCTLR_EL3; 1885 case 1: 1886 return MISCREG_ACTLR_EL3; 1887 } 1888 break; 1889 case 1: 1890 switch (op2) { 1891 case 0: 1892 return MISCREG_SCR_EL3; 1893 case 1: 1894 return MISCREG_SDER32_EL3; 1895 case 2: 1896 return MISCREG_CPTR_EL3; 1897 } 1898 break; 1899 case 2: 1900 switch (op2) { 1901 case 0: 1902 return MISCREG_ZCR_EL3; 1903 } 1904 break; 1905 case 3: 1906 switch (op2) { 1907 case 1: 1908 return MISCREG_MDCR_EL3; 1909 } 1910 break; 1911 } 1912 break; 1913 } 1914 break; 1915 case 2: 1916 switch (op1) { 1917 case 0: 1918 switch (crm) { 1919 case 0: 1920 switch (op2) { 1921 case 0: 1922 return MISCREG_TTBR0_EL1; 1923 case 1: 1924 return MISCREG_TTBR1_EL1; 1925 case 2: 1926 return MISCREG_TCR_EL1; 1927 } 1928 break; 1929 } 1930 break; 1931 case 4: 1932 switch (crm) { 1933 case 0: 1934 switch (op2) { 1935 case 0: 1936 return MISCREG_TTBR0_EL2; 1937 case 1: 1938 return MISCREG_TTBR1_EL2; 1939 case 2: 1940 return MISCREG_TCR_EL2; 1941 } 1942 break; 1943 case 1: 1944 switch (op2) { 1945 case 0: 1946 return MISCREG_VTTBR_EL2; 1947 case 2: 1948 return MISCREG_VTCR_EL2; 1949 } 1950 break; 1951 } 1952 break; 1953 case 6: 1954 switch (crm) { 1955 case 0: 1956 switch (op2) { 1957 case 0: 1958 return MISCREG_TTBR0_EL3; 1959 case 2: 1960 return MISCREG_TCR_EL3; 1961 } 1962 break; 1963 } 1964 break; 1965 } 1966 break; 1967 case 3: 1968 switch (op1) { 1969 case 4: 1970 switch (crm) { 1971 case 0: 1972 switch (op2) { 1973 case 0: 1974 return MISCREG_DACR32_EL2; 1975 } 1976 break; 1977 } 1978 break; 1979 } 1980 break; 1981 case 4: 1982 switch (op1) { 1983 case 0: 1984 switch (crm) { 1985 case 0: 1986 switch (op2) { 1987 case 0: 1988 return MISCREG_SPSR_EL1; 1989 case 1: 1990 return MISCREG_ELR_EL1; 1991 } 1992 break; 1993 case 1: 1994 switch (op2) { 1995 case 0: 1996 return MISCREG_SP_EL0; 1997 } 1998 break; 1999 case 2: 2000 switch (op2) { 2001 case 0: 2002 return MISCREG_SPSEL; 2003 case 2: 2004 return MISCREG_CURRENTEL; 2005 case 3: 2006 return MISCREG_PAN; 2007 } 2008 break; 2009 case 6: 2010 switch (op2) { 2011 case 0: 2012 return MISCREG_ICC_PMR_EL1; 2013 } 2014 break; 2015 } 2016 break; 2017 case 3: 2018 switch (crm) { 2019 case 2: 2020 switch (op2) { 2021 case 0: 2022 return MISCREG_NZCV; 2023 case 1: 2024 return MISCREG_DAIF; 2025 } 2026 break; 2027 case 4: 2028 switch (op2) { 2029 case 0: 2030 return MISCREG_FPCR; 2031 case 1: 2032 return MISCREG_FPSR; 2033 } 2034 break; 2035 case 5: 2036 switch (op2) { 2037 case 0: 2038 return MISCREG_DSPSR_EL0; 2039 case 1: 2040 return MISCREG_DLR_EL0; 2041 } 2042 break; 2043 } 2044 break; 2045 case 4: 2046 switch (crm) { 2047 case 0: 2048 switch (op2) { 2049 case 0: 2050 return MISCREG_SPSR_EL2; 2051 case 1: 2052 return MISCREG_ELR_EL2; 2053 } 2054 break; 2055 case 1: 2056 switch (op2) { 2057 case 0: 2058 return MISCREG_SP_EL1; 2059 } 2060 break; 2061 case 3: 2062 switch (op2) { 2063 case 0: 2064 return MISCREG_SPSR_IRQ_AA64; 2065 case 1: 2066 return MISCREG_SPSR_ABT_AA64; 2067 case 2: 2068 return MISCREG_SPSR_UND_AA64; 2069 case 3: 2070 return MISCREG_SPSR_FIQ_AA64; 2071 } 2072 break; 2073 } 2074 break; 2075 case 6: 2076 switch (crm) { 2077 case 0: 2078 switch (op2) { 2079 case 0: 2080 return MISCREG_SPSR_EL3; 2081 case 1: 2082 return MISCREG_ELR_EL3; 2083 } 2084 break; 2085 case 1: 2086 switch (op2) { 2087 case 0: 2088 return MISCREG_SP_EL2; 2089 } 2090 break; 2091 } 2092 break; 2093 } 2094 break; 2095 case 5: 2096 switch (op1) { 2097 case 0: 2098 switch (crm) { 2099 case 1: 2100 switch (op2) { 2101 case 0: 2102 return MISCREG_AFSR0_EL1; 2103 case 1: 2104 return MISCREG_AFSR1_EL1; 2105 } 2106 break; 2107 case 2: 2108 switch (op2) { 2109 case 0: 2110 return MISCREG_ESR_EL1; 2111 } 2112 break; 2113 case 3: 2114 switch (op2) { 2115 case 0: 2116 return MISCREG_ERRIDR_EL1; 2117 case 1: 2118 return MISCREG_ERRSELR_EL1; 2119 } 2120 break; 2121 case 4: 2122 switch (op2) { 2123 case 0: 2124 return MISCREG_ERXFR_EL1; 2125 case 1: 2126 return MISCREG_ERXCTLR_EL1; 2127 case 2: 2128 return MISCREG_ERXSTATUS_EL1; 2129 case 3: 2130 return MISCREG_ERXADDR_EL1; 2131 } 2132 break; 2133 case 5: 2134 switch (op2) { 2135 case 0: 2136 return MISCREG_ERXMISC0_EL1; 2137 case 1: 2138 return MISCREG_ERXMISC1_EL1; 2139 } 2140 break; 2141 } 2142 break; 2143 case 4: 2144 switch (crm) { 2145 case 0: 2146 switch (op2) { 2147 case 1: 2148 return MISCREG_IFSR32_EL2; 2149 } 2150 break; 2151 case 1: 2152 switch (op2) { 2153 case 0: 2154 return MISCREG_AFSR0_EL2; 2155 case 1: 2156 return MISCREG_AFSR1_EL2; 2157 } 2158 break; 2159 case 2: 2160 switch (op2) { 2161 case 0: 2162 return MISCREG_ESR_EL2; 2163 case 3: 2164 return MISCREG_VSESR_EL2; 2165 } 2166 break; 2167 case 3: 2168 switch (op2) { 2169 case 0: 2170 return MISCREG_FPEXC32_EL2; 2171 } 2172 break; 2173 } 2174 break; 2175 case 6: 2176 switch (crm) { 2177 case 1: 2178 switch (op2) { 2179 case 0: 2180 return MISCREG_AFSR0_EL3; 2181 case 1: 2182 return MISCREG_AFSR1_EL3; 2183 } 2184 break; 2185 case 2: 2186 switch (op2) { 2187 case 0: 2188 return MISCREG_ESR_EL3; 2189 } 2190 break; 2191 } 2192 break; 2193 } 2194 break; 2195 case 6: 2196 switch (op1) { 2197 case 0: 2198 switch (crm) { 2199 case 0: 2200 switch (op2) { 2201 case 0: 2202 return MISCREG_FAR_EL1; 2203 } 2204 break; 2205 } 2206 break; 2207 case 4: 2208 switch (crm) { 2209 case 0: 2210 switch (op2) { 2211 case 0: 2212 return MISCREG_FAR_EL2; 2213 case 4: 2214 return MISCREG_HPFAR_EL2; 2215 } 2216 break; 2217 } 2218 break; 2219 case 6: 2220 switch (crm) { 2221 case 0: 2222 switch (op2) { 2223 case 0: 2224 return MISCREG_FAR_EL3; 2225 } 2226 break; 2227 } 2228 break; 2229 } 2230 break; 2231 case 7: 2232 switch (op1) { 2233 case 0: 2234 switch (crm) { 2235 case 4: 2236 switch (op2) { 2237 case 0: 2238 return MISCREG_PAR_EL1; 2239 } 2240 break; 2241 } 2242 break; 2243 } 2244 break; 2245 case 9: 2246 switch (op1) { 2247 case 0: 2248 switch (crm) { 2249 case 14: 2250 switch (op2) { 2251 case 1: 2252 return MISCREG_PMINTENSET_EL1; 2253 case 2: 2254 return MISCREG_PMINTENCLR_EL1; 2255 } 2256 break; 2257 } 2258 break; 2259 case 3: 2260 switch (crm) { 2261 case 12: 2262 switch (op2) { 2263 case 0: 2264 return MISCREG_PMCR_EL0; 2265 case 1: 2266 return MISCREG_PMCNTENSET_EL0; 2267 case 2: 2268 return MISCREG_PMCNTENCLR_EL0; 2269 case 3: 2270 return MISCREG_PMOVSCLR_EL0; 2271 case 4: 2272 return MISCREG_PMSWINC_EL0; 2273 case 5: 2274 return MISCREG_PMSELR_EL0; 2275 case 6: 2276 return MISCREG_PMCEID0_EL0; 2277 case 7: 2278 return MISCREG_PMCEID1_EL0; 2279 } 2280 break; 2281 case 13: 2282 switch (op2) { 2283 case 0: 2284 return MISCREG_PMCCNTR_EL0; 2285 case 1: 2286 return MISCREG_PMXEVTYPER_EL0; 2287 case 2: 2288 return MISCREG_PMXEVCNTR_EL0; 2289 } 2290 break; 2291 case 14: 2292 switch (op2) { 2293 case 0: 2294 return MISCREG_PMUSERENR_EL0; 2295 case 3: 2296 return MISCREG_PMOVSSET_EL0; 2297 } 2298 break; 2299 } 2300 break; 2301 } 2302 break; 2303 case 10: 2304 switch (op1) { 2305 case 0: 2306 switch (crm) { 2307 case 2: 2308 switch (op2) { 2309 case 0: 2310 return MISCREG_MAIR_EL1; 2311 } 2312 break; 2313 case 3: 2314 switch (op2) { 2315 case 0: 2316 return MISCREG_AMAIR_EL1; 2317 } 2318 break; 2319 } 2320 break; 2321 case 4: 2322 switch (crm) { 2323 case 2: 2324 switch (op2) { 2325 case 0: 2326 return MISCREG_MAIR_EL2; 2327 } 2328 break; 2329 case 3: 2330 switch (op2) { 2331 case 0: 2332 return MISCREG_AMAIR_EL2; 2333 } 2334 break; 2335 } 2336 break; 2337 case 6: 2338 switch (crm) { 2339 case 2: 2340 switch (op2) { 2341 case 0: 2342 return MISCREG_MAIR_EL3; 2343 } 2344 break; 2345 case 3: 2346 switch (op2) { 2347 case 0: 2348 return MISCREG_AMAIR_EL3; 2349 } 2350 break; 2351 } 2352 break; 2353 } 2354 break; 2355 case 11: 2356 switch (op1) { 2357 case 1: 2358 switch (crm) { 2359 case 0: 2360 switch (op2) { 2361 case 2: 2362 return MISCREG_L2CTLR_EL1; 2363 case 3: 2364 return MISCREG_L2ECTLR_EL1; 2365 } 2366 break; 2367 } 2368 M5_FALLTHROUGH; 2369 default: 2370 // S3_<op1>_11_<Cm>_<op2> 2371 return MISCREG_IMPDEF_UNIMPL; 2372 } 2373 M5_UNREACHABLE; 2374 case 12: 2375 switch (op1) { 2376 case 0: 2377 switch (crm) { 2378 case 0: 2379 switch (op2) { 2380 case 0: 2381 return MISCREG_VBAR_EL1; 2382 case 1: 2383 return MISCREG_RVBAR_EL1; 2384 } 2385 break; 2386 case 1: 2387 switch (op2) { 2388 case 0: 2389 return MISCREG_ISR_EL1; 2390 case 1: 2391 return MISCREG_DISR_EL1; 2392 } 2393 break; 2394 case 8: 2395 switch (op2) { 2396 case 0: 2397 return MISCREG_ICC_IAR0_EL1; 2398 case 1: 2399 return MISCREG_ICC_EOIR0_EL1; 2400 case 2: 2401 return MISCREG_ICC_HPPIR0_EL1; 2402 case 3: 2403 return MISCREG_ICC_BPR0_EL1; 2404 case 4: 2405 return MISCREG_ICC_AP0R0_EL1; 2406 case 5: 2407 return MISCREG_ICC_AP0R1_EL1; 2408 case 6: 2409 return MISCREG_ICC_AP0R2_EL1; 2410 case 7: 2411 return MISCREG_ICC_AP0R3_EL1; 2412 } 2413 break; 2414 case 9: 2415 switch (op2) { 2416 case 0: 2417 return MISCREG_ICC_AP1R0_EL1; 2418 case 1: 2419 return MISCREG_ICC_AP1R1_EL1; 2420 case 2: 2421 return MISCREG_ICC_AP1R2_EL1; 2422 case 3: 2423 return MISCREG_ICC_AP1R3_EL1; 2424 } 2425 break; 2426 case 11: 2427 switch (op2) { 2428 case 1: 2429 return MISCREG_ICC_DIR_EL1; 2430 case 3: 2431 return MISCREG_ICC_RPR_EL1; 2432 case 5: 2433 return MISCREG_ICC_SGI1R_EL1; 2434 case 6: 2435 return MISCREG_ICC_ASGI1R_EL1; 2436 case 7: 2437 return MISCREG_ICC_SGI0R_EL1; 2438 } 2439 break; 2440 case 12: 2441 switch (op2) { 2442 case 0: 2443 return MISCREG_ICC_IAR1_EL1; 2444 case 1: 2445 return MISCREG_ICC_EOIR1_EL1; 2446 case 2: 2447 return MISCREG_ICC_HPPIR1_EL1; 2448 case 3: 2449 return MISCREG_ICC_BPR1_EL1; 2450 case 4: 2451 return MISCREG_ICC_CTLR_EL1; 2452 case 5: 2453 return MISCREG_ICC_SRE_EL1; 2454 case 6: 2455 return MISCREG_ICC_IGRPEN0_EL1; 2456 case 7: 2457 return MISCREG_ICC_IGRPEN1_EL1; 2458 } 2459 break; 2460 } 2461 break; 2462 case 4: 2463 switch (crm) { 2464 case 0: 2465 switch (op2) { 2466 case 0: 2467 return MISCREG_VBAR_EL2; 2468 case 1: 2469 return MISCREG_RVBAR_EL2; 2470 } 2471 break; 2472 case 1: 2473 switch (op2) { 2474 case 1: 2475 return MISCREG_VDISR_EL2; 2476 } 2477 break; 2478 case 8: 2479 switch (op2) { 2480 case 0: 2481 return MISCREG_ICH_AP0R0_EL2; 2482 case 1: 2483 return MISCREG_ICH_AP0R1_EL2; 2484 case 2: 2485 return MISCREG_ICH_AP0R2_EL2; 2486 case 3: 2487 return MISCREG_ICH_AP0R3_EL2; 2488 } 2489 break; 2490 case 9: 2491 switch (op2) { 2492 case 0: 2493 return MISCREG_ICH_AP1R0_EL2; 2494 case 1: 2495 return MISCREG_ICH_AP1R1_EL2; 2496 case 2: 2497 return MISCREG_ICH_AP1R2_EL2; 2498 case 3: 2499 return MISCREG_ICH_AP1R3_EL2; 2500 case 5: 2501 return MISCREG_ICC_SRE_EL2; 2502 } 2503 break; 2504 case 11: 2505 switch (op2) { 2506 case 0: 2507 return MISCREG_ICH_HCR_EL2; 2508 case 1: 2509 return MISCREG_ICH_VTR_EL2; 2510 case 2: 2511 return MISCREG_ICH_MISR_EL2; 2512 case 3: 2513 return MISCREG_ICH_EISR_EL2; 2514 case 5: 2515 return MISCREG_ICH_ELRSR_EL2; 2516 case 7: 2517 return MISCREG_ICH_VMCR_EL2; 2518 } 2519 break; 2520 case 12: 2521 switch (op2) { 2522 case 0: 2523 return MISCREG_ICH_LR0_EL2; 2524 case 1: 2525 return MISCREG_ICH_LR1_EL2; 2526 case 2: 2527 return MISCREG_ICH_LR2_EL2; 2528 case 3: 2529 return MISCREG_ICH_LR3_EL2; 2530 case 4: 2531 return MISCREG_ICH_LR4_EL2; 2532 case 5: 2533 return MISCREG_ICH_LR5_EL2; 2534 case 6: 2535 return MISCREG_ICH_LR6_EL2; 2536 case 7: 2537 return MISCREG_ICH_LR7_EL2; 2538 } 2539 break; 2540 case 13: 2541 switch (op2) { 2542 case 0: 2543 return MISCREG_ICH_LR8_EL2; 2544 case 1: 2545 return MISCREG_ICH_LR9_EL2; 2546 case 2: 2547 return MISCREG_ICH_LR10_EL2; 2548 case 3: 2549 return MISCREG_ICH_LR11_EL2; 2550 case 4: 2551 return MISCREG_ICH_LR12_EL2; 2552 case 5: 2553 return MISCREG_ICH_LR13_EL2; 2554 case 6: 2555 return MISCREG_ICH_LR14_EL2; 2556 case 7: 2557 return MISCREG_ICH_LR15_EL2; 2558 } 2559 break; 2560 } 2561 break; 2562 case 6: 2563 switch (crm) { 2564 case 0: 2565 switch (op2) { 2566 case 0: 2567 return MISCREG_VBAR_EL3; 2568 case 1: 2569 return MISCREG_RVBAR_EL3; 2570 case 2: 2571 return MISCREG_RMR_EL3; 2572 } 2573 break; 2574 case 12: 2575 switch (op2) { 2576 case 4: 2577 return MISCREG_ICC_CTLR_EL3; 2578 case 5: 2579 return MISCREG_ICC_SRE_EL3; 2580 case 7: 2581 return MISCREG_ICC_IGRPEN1_EL3; 2582 } 2583 break; 2584 } 2585 break; 2586 } 2587 break; 2588 case 13: 2589 switch (op1) { 2590 case 0: 2591 switch (crm) { 2592 case 0: 2593 switch (op2) { 2594 case 1: 2595 return MISCREG_CONTEXTIDR_EL1; 2596 case 4: 2597 return MISCREG_TPIDR_EL1; 2598 } 2599 break; 2600 } 2601 break; 2602 case 3: 2603 switch (crm) { 2604 case 0: 2605 switch (op2) { 2606 case 2: 2607 return MISCREG_TPIDR_EL0; 2608 case 3: 2609 return MISCREG_TPIDRRO_EL0; 2610 } 2611 break; 2612 } 2613 break; 2614 case 4: 2615 switch (crm) { 2616 case 0: 2617 switch (op2) { 2618 case 1: 2619 return MISCREG_CONTEXTIDR_EL2; 2620 case 2: 2621 return MISCREG_TPIDR_EL2; 2622 } 2623 break; 2624 } 2625 break; 2626 case 6: 2627 switch (crm) { 2628 case 0: 2629 switch (op2) { 2630 case 2: 2631 return MISCREG_TPIDR_EL3; 2632 } 2633 break; 2634 } 2635 break; 2636 } 2637 break; 2638 case 14: 2639 switch (op1) { 2640 case 0: 2641 switch (crm) { 2642 case 1: 2643 switch (op2) { 2644 case 0: 2645 return MISCREG_CNTKCTL_EL1; 2646 } 2647 break; 2648 } 2649 break; 2650 case 3: 2651 switch (crm) { 2652 case 0: 2653 switch (op2) { 2654 case 0: 2655 return MISCREG_CNTFRQ_EL0; 2656 case 1: 2657 return MISCREG_CNTPCT_EL0; 2658 case 2: 2659 return MISCREG_CNTVCT_EL0; 2660 } 2661 break; 2662 case 2: 2663 switch (op2) { 2664 case 0: 2665 return MISCREG_CNTP_TVAL_EL0; 2666 case 1: 2667 return MISCREG_CNTP_CTL_EL0; 2668 case 2: 2669 return MISCREG_CNTP_CVAL_EL0; 2670 } 2671 break; 2672 case 3: 2673 switch (op2) { 2674 case 0: 2675 return MISCREG_CNTV_TVAL_EL0; 2676 case 1: 2677 return MISCREG_CNTV_CTL_EL0; 2678 case 2: 2679 return MISCREG_CNTV_CVAL_EL0; 2680 } 2681 break; 2682 case 8: 2683 switch (op2) { 2684 case 0: 2685 return MISCREG_PMEVCNTR0_EL0; 2686 case 1: 2687 return MISCREG_PMEVCNTR1_EL0; 2688 case 2: 2689 return MISCREG_PMEVCNTR2_EL0; 2690 case 3: 2691 return MISCREG_PMEVCNTR3_EL0; 2692 case 4: 2693 return MISCREG_PMEVCNTR4_EL0; 2694 case 5: 2695 return MISCREG_PMEVCNTR5_EL0; 2696 } 2697 break; 2698 case 12: 2699 switch (op2) { 2700 case 0: 2701 return MISCREG_PMEVTYPER0_EL0; 2702 case 1: 2703 return MISCREG_PMEVTYPER1_EL0; 2704 case 2: 2705 return MISCREG_PMEVTYPER2_EL0; 2706 case 3: 2707 return MISCREG_PMEVTYPER3_EL0; 2708 case 4: 2709 return MISCREG_PMEVTYPER4_EL0; 2710 case 5: 2711 return MISCREG_PMEVTYPER5_EL0; 2712 } 2713 break; 2714 case 15: 2715 switch (op2) { 2716 case 7: 2717 return MISCREG_PMCCFILTR_EL0; 2718 } 2719 } 2720 break; 2721 case 4: 2722 switch (crm) { 2723 case 0: 2724 switch (op2) { 2725 case 3: 2726 return MISCREG_CNTVOFF_EL2; 2727 } 2728 break; 2729 case 1: 2730 switch (op2) { 2731 case 0: 2732 return MISCREG_CNTHCTL_EL2; 2733 } 2734 break; 2735 case 2: 2736 switch (op2) { 2737 case 0: 2738 return MISCREG_CNTHP_TVAL_EL2; 2739 case 1: 2740 return MISCREG_CNTHP_CTL_EL2; 2741 case 2: 2742 return MISCREG_CNTHP_CVAL_EL2; 2743 } 2744 break; 2745 case 3: 2746 switch (op2) { 2747 case 0: 2748 return MISCREG_CNTHV_TVAL_EL2; 2749 case 1: 2750 return MISCREG_CNTHV_CTL_EL2; 2751 case 2: 2752 return MISCREG_CNTHV_CVAL_EL2; 2753 } 2754 break; 2755 } 2756 break; 2757 case 7: 2758 switch (crm) { 2759 case 2: 2760 switch (op2) { 2761 case 0: 2762 return MISCREG_CNTPS_TVAL_EL1; 2763 case 1: 2764 return MISCREG_CNTPS_CTL_EL1; 2765 case 2: 2766 return MISCREG_CNTPS_CVAL_EL1; 2767 } 2768 break; 2769 } 2770 break; 2771 } 2772 break; 2773 case 15: 2774 switch (op1) { 2775 case 0: 2776 switch (crm) { 2777 case 0: 2778 switch (op2) { 2779 case 0: 2780 return MISCREG_IL1DATA0_EL1; 2781 case 1: 2782 return MISCREG_IL1DATA1_EL1; 2783 case 2: 2784 return MISCREG_IL1DATA2_EL1; 2785 case 3: 2786 return MISCREG_IL1DATA3_EL1; 2787 } 2788 break; 2789 case 1: 2790 switch (op2) { 2791 case 0: 2792 return MISCREG_DL1DATA0_EL1; 2793 case 1: 2794 return MISCREG_DL1DATA1_EL1; 2795 case 2: 2796 return MISCREG_DL1DATA2_EL1; 2797 case 3: 2798 return MISCREG_DL1DATA3_EL1; 2799 case 4: 2800 return MISCREG_DL1DATA4_EL1; 2801 } 2802 break; 2803 } 2804 break; 2805 case 1: 2806 switch (crm) { 2807 case 0: 2808 switch (op2) { 2809 case 0: 2810 return MISCREG_L2ACTLR_EL1; 2811 } 2812 break; 2813 case 2: 2814 switch (op2) { 2815 case 0: 2816 return MISCREG_CPUACTLR_EL1; 2817 case 1: 2818 return MISCREG_CPUECTLR_EL1; 2819 case 2: 2820 return MISCREG_CPUMERRSR_EL1; 2821 case 3: 2822 return MISCREG_L2MERRSR_EL1; 2823 } 2824 break; 2825 case 3: 2826 switch (op2) { 2827 case 0: 2828 return MISCREG_CBAR_EL1; 2829 2830 } 2831 break; 2832 } 2833 break; 2834 } 2835 // S3_<op1>_15_<Cm>_<op2> 2836 return MISCREG_IMPDEF_UNIMPL; 2837 } 2838 break; 2839 } 2840 2841 return MISCREG_UNKNOWN; 2842} 2843 2844bitset<NUM_MISCREG_INFOS> miscRegInfo[NUM_MISCREGS]; // initialized below 2845 2846void 2847ISA::initializeMiscRegMetadata() 2848{ 2849 // the MiscReg metadata tables are shared across all instances of the 2850 // ISA object, so there's no need to initialize them multiple times. 2851 static bool completed = false; 2852 if (completed) 2853 return; 2854 2855 // This boolean variable specifies if the system is running in aarch32 at 2856 // EL3 (aarch32EL3 = true). It is false if EL3 is not implemented, or it 2857 // is running in aarch64 (aarch32EL3 = false) 2858 bool aarch32EL3 = haveSecurity && !highestELIs64; 2859 2860 // Set Privileged Access Never on taking an exception to EL1 (Arm 8.1+), 2861 // unsupported 2862 bool SPAN = false; 2863 2864 // Implicit error synchronization event enable (Arm 8.2+), unsupported 2865 bool IESB = false; 2866 2867 // Load Multiple and Store Multiple Atomicity and Ordering (Arm 8.2+), 2868 // unsupported 2869 bool LSMAOE = false; 2870 2871 // No Trap Load Multiple and Store Multiple (Arm 8.2+), unsupported 2872 bool nTLSMD = false; 2873 2874 // Pointer authentication (Arm 8.3+), unsupported 2875 bool EnDA = false; // using APDAKey_EL1 key of instr addrs in ELs 0,1 2876 bool EnDB = false; // using APDBKey_EL1 key of instr addrs in ELs 0,1 2877 bool EnIA = false; // using APIAKey_EL1 key of instr addrs in ELs 0,1 2878 bool EnIB = false; // using APIBKey_EL1 key of instr addrs in ELs 0,1 2879 2880 /** 2881 * Some registers alias with others, and therefore need to be translated. 2882 * When two mapping registers are given, they are the 32b lower and 2883 * upper halves, respectively, of the 64b register being mapped. 2884 * aligned with reference documentation ARM DDI 0487A.i pp 1540-1543 2885 * 2886 * NAM = "not architecturally mandated", 2887 * from ARM DDI 0487A.i, template text 2888 * "AArch64 System register ___ can be mapped to 2889 * AArch32 System register ___, but this is not 2890 * architecturally mandated." 2891 */ 2892 2893 InitReg(MISCREG_CPSR) 2894 .allPrivileges(); 2895 InitReg(MISCREG_SPSR) 2896 .allPrivileges(); 2897 InitReg(MISCREG_SPSR_FIQ) 2898 .allPrivileges(); 2899 InitReg(MISCREG_SPSR_IRQ) 2900 .allPrivileges(); 2901 InitReg(MISCREG_SPSR_SVC) 2902 .allPrivileges(); 2903 InitReg(MISCREG_SPSR_MON) 2904 .allPrivileges(); 2905 InitReg(MISCREG_SPSR_ABT) 2906 .allPrivileges(); 2907 InitReg(MISCREG_SPSR_HYP) 2908 .allPrivileges(); 2909 InitReg(MISCREG_SPSR_UND) 2910 .allPrivileges(); 2911 InitReg(MISCREG_ELR_HYP) 2912 .allPrivileges(); 2913 InitReg(MISCREG_FPSID) 2914 .allPrivileges(); 2915 InitReg(MISCREG_FPSCR) 2916 .allPrivileges(); 2917 InitReg(MISCREG_MVFR1) 2918 .allPrivileges(); 2919 InitReg(MISCREG_MVFR0) 2920 .allPrivileges(); 2921 InitReg(MISCREG_FPEXC) 2922 .allPrivileges(); 2923 2924 // Helper registers 2925 InitReg(MISCREG_CPSR_MODE) 2926 .allPrivileges(); 2927 InitReg(MISCREG_CPSR_Q) 2928 .allPrivileges(); 2929 InitReg(MISCREG_FPSCR_EXC) 2930 .allPrivileges(); 2931 InitReg(MISCREG_FPSCR_QC) 2932 .allPrivileges(); 2933 InitReg(MISCREG_LOCKADDR) 2934 .allPrivileges(); 2935 InitReg(MISCREG_LOCKFLAG) 2936 .allPrivileges(); 2937 InitReg(MISCREG_PRRR_MAIR0) 2938 .mutex() 2939 .banked(); 2940 InitReg(MISCREG_PRRR_MAIR0_NS) 2941 .mutex() 2942 .privSecure(!aarch32EL3) 2943 .bankedChild(); 2944 InitReg(MISCREG_PRRR_MAIR0_S) 2945 .mutex() 2946 .bankedChild(); 2947 InitReg(MISCREG_NMRR_MAIR1) 2948 .mutex() 2949 .banked(); 2950 InitReg(MISCREG_NMRR_MAIR1_NS) 2951 .mutex() 2952 .privSecure(!aarch32EL3) 2953 .bankedChild(); 2954 InitReg(MISCREG_NMRR_MAIR1_S) 2955 .mutex() 2956 .bankedChild(); 2957 InitReg(MISCREG_PMXEVTYPER_PMCCFILTR) 2958 .mutex(); 2959 InitReg(MISCREG_SCTLR_RST) 2960 .allPrivileges(); 2961 InitReg(MISCREG_SEV_MAILBOX) 2962 .allPrivileges(); 2963 2964 // AArch32 CP14 registers 2965 InitReg(MISCREG_DBGDIDR) 2966 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0); 2967 InitReg(MISCREG_DBGDSCRint) 2968 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0); 2969 InitReg(MISCREG_DBGDCCINT) 2970 .unimplemented() 2971 .allPrivileges(); 2972 InitReg(MISCREG_DBGDTRTXint) 2973 .unimplemented() 2974 .allPrivileges(); 2975 InitReg(MISCREG_DBGDTRRXint) 2976 .unimplemented() 2977 .allPrivileges(); 2978 InitReg(MISCREG_DBGWFAR) 2979 .unimplemented() 2980 .allPrivileges(); 2981 InitReg(MISCREG_DBGVCR) 2982 .unimplemented() 2983 .allPrivileges(); 2984 InitReg(MISCREG_DBGDTRRXext) 2985 .unimplemented() 2986 .allPrivileges(); 2987 InitReg(MISCREG_DBGDSCRext) 2988 .unimplemented() 2989 .warnNotFail() 2990 .allPrivileges(); 2991 InitReg(MISCREG_DBGDTRTXext) 2992 .unimplemented() 2993 .allPrivileges(); 2994 InitReg(MISCREG_DBGOSECCR) 2995 .unimplemented() 2996 .allPrivileges(); 2997 InitReg(MISCREG_DBGBVR0) 2998 .unimplemented() 2999 .allPrivileges(); 3000 InitReg(MISCREG_DBGBVR1) 3001 .unimplemented() 3002 .allPrivileges(); 3003 InitReg(MISCREG_DBGBVR2) 3004 .unimplemented() 3005 .allPrivileges(); 3006 InitReg(MISCREG_DBGBVR3) 3007 .unimplemented() 3008 .allPrivileges(); 3009 InitReg(MISCREG_DBGBVR4) 3010 .unimplemented() 3011 .allPrivileges(); 3012 InitReg(MISCREG_DBGBVR5) 3013 .unimplemented() 3014 .allPrivileges(); 3015 InitReg(MISCREG_DBGBCR0) 3016 .unimplemented() 3017 .allPrivileges(); 3018 InitReg(MISCREG_DBGBCR1) 3019 .unimplemented() 3020 .allPrivileges(); 3021 InitReg(MISCREG_DBGBCR2) 3022 .unimplemented() 3023 .allPrivileges(); 3024 InitReg(MISCREG_DBGBCR3) 3025 .unimplemented() 3026 .allPrivileges(); 3027 InitReg(MISCREG_DBGBCR4) 3028 .unimplemented() 3029 .allPrivileges(); 3030 InitReg(MISCREG_DBGBCR5) 3031 .unimplemented() 3032 .allPrivileges(); 3033 InitReg(MISCREG_DBGWVR0) 3034 .unimplemented() 3035 .allPrivileges(); 3036 InitReg(MISCREG_DBGWVR1) 3037 .unimplemented() 3038 .allPrivileges(); 3039 InitReg(MISCREG_DBGWVR2) 3040 .unimplemented() 3041 .allPrivileges(); 3042 InitReg(MISCREG_DBGWVR3) 3043 .unimplemented() 3044 .allPrivileges(); 3045 InitReg(MISCREG_DBGWCR0) 3046 .unimplemented() 3047 .allPrivileges(); 3048 InitReg(MISCREG_DBGWCR1) 3049 .unimplemented() 3050 .allPrivileges(); 3051 InitReg(MISCREG_DBGWCR2) 3052 .unimplemented() 3053 .allPrivileges(); 3054 InitReg(MISCREG_DBGWCR3) 3055 .unimplemented() 3056 .allPrivileges(); 3057 InitReg(MISCREG_DBGDRAR) 3058 .unimplemented() 3059 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0); 3060 InitReg(MISCREG_DBGBXVR4) 3061 .unimplemented() 3062 .allPrivileges(); 3063 InitReg(MISCREG_DBGBXVR5) 3064 .unimplemented() 3065 .allPrivileges(); 3066 InitReg(MISCREG_DBGOSLAR) 3067 .unimplemented() 3068 .allPrivileges().monSecureRead(0).monNonSecureRead(0); 3069 InitReg(MISCREG_DBGOSLSR) 3070 .unimplemented() 3071 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0); 3072 InitReg(MISCREG_DBGOSDLR) 3073 .unimplemented() 3074 .allPrivileges(); 3075 InitReg(MISCREG_DBGPRCR) 3076 .unimplemented() 3077 .allPrivileges(); 3078 InitReg(MISCREG_DBGDSAR) 3079 .unimplemented() 3080 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0); 3081 InitReg(MISCREG_DBGCLAIMSET) 3082 .unimplemented() 3083 .allPrivileges(); 3084 InitReg(MISCREG_DBGCLAIMCLR) 3085 .unimplemented() 3086 .allPrivileges(); 3087 InitReg(MISCREG_DBGAUTHSTATUS) 3088 .unimplemented() 3089 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0); 3090 InitReg(MISCREG_DBGDEVID2) 3091 .unimplemented() 3092 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0); 3093 InitReg(MISCREG_DBGDEVID1) 3094 .unimplemented() 3095 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0); 3096 InitReg(MISCREG_DBGDEVID0) 3097 .unimplemented() 3098 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0); 3099 InitReg(MISCREG_TEECR) 3100 .unimplemented() 3101 .allPrivileges(); 3102 InitReg(MISCREG_JIDR) 3103 .allPrivileges(); 3104 InitReg(MISCREG_TEEHBR) 3105 .allPrivileges(); 3106 InitReg(MISCREG_JOSCR) 3107 .allPrivileges(); 3108 InitReg(MISCREG_JMCR) 3109 .allPrivileges(); 3110 3111 // AArch32 CP15 registers 3112 InitReg(MISCREG_MIDR) 3113 .allPrivileges().exceptUserMode().writes(0); 3114 InitReg(MISCREG_CTR) 3115 .allPrivileges().exceptUserMode().writes(0); 3116 InitReg(MISCREG_TCMTR) 3117 .allPrivileges().exceptUserMode().writes(0); 3118 InitReg(MISCREG_TLBTR) 3119 .allPrivileges().exceptUserMode().writes(0); 3120 InitReg(MISCREG_MPIDR) 3121 .allPrivileges().exceptUserMode().writes(0); 3122 InitReg(MISCREG_REVIDR) 3123 .unimplemented() 3124 .warnNotFail() 3125 .allPrivileges().exceptUserMode().writes(0); 3126 InitReg(MISCREG_ID_PFR0) 3127 .allPrivileges().exceptUserMode().writes(0); 3128 InitReg(MISCREG_ID_PFR1) 3129 .allPrivileges().exceptUserMode().writes(0); 3130 InitReg(MISCREG_ID_DFR0) 3131 .allPrivileges().exceptUserMode().writes(0); 3132 InitReg(MISCREG_ID_AFR0) 3133 .allPrivileges().exceptUserMode().writes(0); 3134 InitReg(MISCREG_ID_MMFR0) 3135 .allPrivileges().exceptUserMode().writes(0); 3136 InitReg(MISCREG_ID_MMFR1) 3137 .allPrivileges().exceptUserMode().writes(0); 3138 InitReg(MISCREG_ID_MMFR2) 3139 .allPrivileges().exceptUserMode().writes(0); 3140 InitReg(MISCREG_ID_MMFR3) 3141 .allPrivileges().exceptUserMode().writes(0); 3142 InitReg(MISCREG_ID_ISAR0) 3143 .allPrivileges().exceptUserMode().writes(0); 3144 InitReg(MISCREG_ID_ISAR1) 3145 .allPrivileges().exceptUserMode().writes(0); 3146 InitReg(MISCREG_ID_ISAR2) 3147 .allPrivileges().exceptUserMode().writes(0); 3148 InitReg(MISCREG_ID_ISAR3) 3149 .allPrivileges().exceptUserMode().writes(0); 3150 InitReg(MISCREG_ID_ISAR4) 3151 .allPrivileges().exceptUserMode().writes(0); 3152 InitReg(MISCREG_ID_ISAR5) 3153 .allPrivileges().exceptUserMode().writes(0); 3154 InitReg(MISCREG_CCSIDR) 3155 .allPrivileges().exceptUserMode().writes(0); 3156 InitReg(MISCREG_CLIDR) 3157 .allPrivileges().exceptUserMode().writes(0); 3158 InitReg(MISCREG_AIDR) 3159 .allPrivileges().exceptUserMode().writes(0); 3160 InitReg(MISCREG_CSSELR) 3161 .banked(); 3162 InitReg(MISCREG_CSSELR_NS) 3163 .bankedChild() 3164 .privSecure(!aarch32EL3) 3165 .nonSecure().exceptUserMode(); 3166 InitReg(MISCREG_CSSELR_S) 3167 .bankedChild() 3168 .secure().exceptUserMode(); 3169 InitReg(MISCREG_VPIDR) 3170 .hyp().monNonSecure(); 3171 InitReg(MISCREG_VMPIDR) 3172 .hyp().monNonSecure(); 3173 InitReg(MISCREG_SCTLR) 3174 .banked() 3175 // readMiscRegNoEffect() uses this metadata 3176 // despite using children (below) as backing store 3177 .res0(0x8d22c600) 3178 .res1(0x00400800 | (SPAN ? 0 : 0x800000) 3179 | (LSMAOE ? 0 : 0x10) 3180 | (nTLSMD ? 0 : 0x8)); 3181 InitReg(MISCREG_SCTLR_NS) 3182 .bankedChild() 3183 .privSecure(!aarch32EL3) 3184 .nonSecure().exceptUserMode(); 3185 InitReg(MISCREG_SCTLR_S) 3186 .bankedChild() 3187 .secure().exceptUserMode(); 3188 InitReg(MISCREG_ACTLR) 3189 .banked(); 3190 InitReg(MISCREG_ACTLR_NS) 3191 .bankedChild() 3192 .privSecure(!aarch32EL3) 3193 .nonSecure().exceptUserMode(); 3194 InitReg(MISCREG_ACTLR_S) 3195 .bankedChild() 3196 .secure().exceptUserMode(); 3197 InitReg(MISCREG_CPACR) 3198 .allPrivileges().exceptUserMode(); 3199 InitReg(MISCREG_SCR) 3200 .mon().secure().exceptUserMode() 3201 .res0(0xff40) // [31:16], [6] 3202 .res1(0x0030); // [5:4] 3203 InitReg(MISCREG_SDER) 3204 .mon(); 3205 InitReg(MISCREG_NSACR) 3206 .allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode(); 3207 InitReg(MISCREG_HSCTLR) 3208 .hyp().monNonSecure() 3209 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000) 3210 | (IESB ? 0 : 0x200000) 3211 | (EnDA ? 0 : 0x8000000) 3212 | (EnIB ? 0 : 0x40000000) 3213 | (EnIA ? 0 : 0x80000000)) 3214 .res1(0x30c50830); 3215 InitReg(MISCREG_HACTLR) 3216 .hyp().monNonSecure(); 3217 InitReg(MISCREG_HCR) 3218 .hyp().monNonSecure(); 3219 InitReg(MISCREG_HDCR) 3220 .hyp().monNonSecure(); 3221 InitReg(MISCREG_HCPTR) 3222 .hyp().monNonSecure(); 3223 InitReg(MISCREG_HSTR) 3224 .hyp().monNonSecure(); 3225 InitReg(MISCREG_HACR) 3226 .unimplemented() 3227 .warnNotFail() 3228 .hyp().monNonSecure(); 3229 InitReg(MISCREG_TTBR0) 3230 .banked(); 3231 InitReg(MISCREG_TTBR0_NS) 3232 .bankedChild() 3233 .privSecure(!aarch32EL3) 3234 .nonSecure().exceptUserMode(); 3235 InitReg(MISCREG_TTBR0_S) 3236 .bankedChild() 3237 .secure().exceptUserMode(); 3238 InitReg(MISCREG_TTBR1) 3239 .banked(); 3240 InitReg(MISCREG_TTBR1_NS) 3241 .bankedChild() 3242 .privSecure(!aarch32EL3) 3243 .nonSecure().exceptUserMode(); 3244 InitReg(MISCREG_TTBR1_S) 3245 .bankedChild() 3246 .secure().exceptUserMode(); 3247 InitReg(MISCREG_TTBCR) 3248 .banked(); 3249 InitReg(MISCREG_TTBCR_NS) 3250 .bankedChild() 3251 .privSecure(!aarch32EL3) 3252 .nonSecure().exceptUserMode(); 3253 InitReg(MISCREG_TTBCR_S) 3254 .bankedChild() 3255 .secure().exceptUserMode(); 3256 InitReg(MISCREG_HTCR) 3257 .hyp().monNonSecure(); 3258 InitReg(MISCREG_VTCR) 3259 .hyp().monNonSecure(); 3260 InitReg(MISCREG_DACR) 3261 .banked(); 3262 InitReg(MISCREG_DACR_NS) 3263 .bankedChild() 3264 .privSecure(!aarch32EL3) 3265 .nonSecure().exceptUserMode(); 3266 InitReg(MISCREG_DACR_S) 3267 .bankedChild() 3268 .secure().exceptUserMode(); 3269 InitReg(MISCREG_DFSR) 3270 .banked(); 3271 InitReg(MISCREG_DFSR_NS) 3272 .bankedChild() 3273 .privSecure(!aarch32EL3) 3274 .nonSecure().exceptUserMode(); 3275 InitReg(MISCREG_DFSR_S) 3276 .bankedChild() 3277 .secure().exceptUserMode(); 3278 InitReg(MISCREG_IFSR) 3279 .banked(); 3280 InitReg(MISCREG_IFSR_NS) 3281 .bankedChild() 3282 .privSecure(!aarch32EL3) 3283 .nonSecure().exceptUserMode(); 3284 InitReg(MISCREG_IFSR_S) 3285 .bankedChild() 3286 .secure().exceptUserMode(); 3287 InitReg(MISCREG_ADFSR) 3288 .unimplemented() 3289 .warnNotFail() 3290 .banked(); 3291 InitReg(MISCREG_ADFSR_NS) 3292 .unimplemented() 3293 .warnNotFail() 3294 .bankedChild() 3295 .privSecure(!aarch32EL3) 3296 .nonSecure().exceptUserMode(); 3297 InitReg(MISCREG_ADFSR_S) 3298 .unimplemented() 3299 .warnNotFail() 3300 .bankedChild() 3301 .secure().exceptUserMode(); 3302 InitReg(MISCREG_AIFSR) 3303 .unimplemented() 3304 .warnNotFail() 3305 .banked(); 3306 InitReg(MISCREG_AIFSR_NS) 3307 .unimplemented() 3308 .warnNotFail() 3309 .bankedChild() 3310 .privSecure(!aarch32EL3) 3311 .nonSecure().exceptUserMode(); 3312 InitReg(MISCREG_AIFSR_S) 3313 .unimplemented() 3314 .warnNotFail() 3315 .bankedChild() 3316 .secure().exceptUserMode(); 3317 InitReg(MISCREG_HADFSR) 3318 .hyp().monNonSecure(); 3319 InitReg(MISCREG_HAIFSR) 3320 .hyp().monNonSecure(); 3321 InitReg(MISCREG_HSR) 3322 .hyp().monNonSecure(); 3323 InitReg(MISCREG_DFAR) 3324 .banked(); 3325 InitReg(MISCREG_DFAR_NS) 3326 .bankedChild() 3327 .privSecure(!aarch32EL3) 3328 .nonSecure().exceptUserMode(); 3329 InitReg(MISCREG_DFAR_S) 3330 .bankedChild() 3331 .secure().exceptUserMode(); 3332 InitReg(MISCREG_IFAR) 3333 .banked(); 3334 InitReg(MISCREG_IFAR_NS) 3335 .bankedChild() 3336 .privSecure(!aarch32EL3) 3337 .nonSecure().exceptUserMode(); 3338 InitReg(MISCREG_IFAR_S) 3339 .bankedChild() 3340 .secure().exceptUserMode(); 3341 InitReg(MISCREG_HDFAR) 3342 .hyp().monNonSecure(); 3343 InitReg(MISCREG_HIFAR) 3344 .hyp().monNonSecure(); 3345 InitReg(MISCREG_HPFAR) 3346 .hyp().monNonSecure(); 3347 InitReg(MISCREG_ICIALLUIS) 3348 .unimplemented() 3349 .warnNotFail() 3350 .writes(1).exceptUserMode(); 3351 InitReg(MISCREG_BPIALLIS) 3352 .unimplemented() 3353 .warnNotFail() 3354 .writes(1).exceptUserMode(); 3355 InitReg(MISCREG_PAR) 3356 .banked(); 3357 InitReg(MISCREG_PAR_NS) 3358 .bankedChild() 3359 .privSecure(!aarch32EL3) 3360 .nonSecure().exceptUserMode(); 3361 InitReg(MISCREG_PAR_S) 3362 .bankedChild() 3363 .secure().exceptUserMode(); 3364 InitReg(MISCREG_ICIALLU) 3365 .writes(1).exceptUserMode(); 3366 InitReg(MISCREG_ICIMVAU) 3367 .unimplemented() 3368 .warnNotFail() 3369 .writes(1).exceptUserMode(); 3370 InitReg(MISCREG_CP15ISB) 3371 .writes(1); 3372 InitReg(MISCREG_BPIALL) 3373 .unimplemented() 3374 .warnNotFail() 3375 .writes(1).exceptUserMode(); 3376 InitReg(MISCREG_BPIMVA) 3377 .unimplemented() 3378 .warnNotFail() 3379 .writes(1).exceptUserMode(); 3380 InitReg(MISCREG_DCIMVAC) 3381 .unimplemented() 3382 .warnNotFail() 3383 .writes(1).exceptUserMode(); 3384 InitReg(MISCREG_DCISW) 3385 .unimplemented() 3386 .warnNotFail() 3387 .writes(1).exceptUserMode(); 3388 InitReg(MISCREG_ATS1CPR) 3389 .writes(1).exceptUserMode(); 3390 InitReg(MISCREG_ATS1CPW) 3391 .writes(1).exceptUserMode(); 3392 InitReg(MISCREG_ATS1CUR) 3393 .writes(1).exceptUserMode(); 3394 InitReg(MISCREG_ATS1CUW) 3395 .writes(1).exceptUserMode(); 3396 InitReg(MISCREG_ATS12NSOPR) 3397 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite(); 3398 InitReg(MISCREG_ATS12NSOPW) 3399 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite(); 3400 InitReg(MISCREG_ATS12NSOUR) 3401 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite(); 3402 InitReg(MISCREG_ATS12NSOUW) 3403 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite(); 3404 InitReg(MISCREG_DCCMVAC) 3405 .writes(1).exceptUserMode(); 3406 InitReg(MISCREG_DCCSW) 3407 .unimplemented() 3408 .warnNotFail() 3409 .writes(1).exceptUserMode(); 3410 InitReg(MISCREG_CP15DSB) 3411 .writes(1); 3412 InitReg(MISCREG_CP15DMB) 3413 .writes(1); 3414 InitReg(MISCREG_DCCMVAU) 3415 .unimplemented() 3416 .warnNotFail() 3417 .writes(1).exceptUserMode(); 3418 InitReg(MISCREG_DCCIMVAC) 3419 .unimplemented() 3420 .warnNotFail() 3421 .writes(1).exceptUserMode(); 3422 InitReg(MISCREG_DCCISW) 3423 .unimplemented() 3424 .warnNotFail() 3425 .writes(1).exceptUserMode(); 3426 InitReg(MISCREG_ATS1HR) 3427 .monNonSecureWrite().hypWrite(); 3428 InitReg(MISCREG_ATS1HW) 3429 .monNonSecureWrite().hypWrite(); 3430 InitReg(MISCREG_TLBIALLIS) 3431 .writes(1).exceptUserMode(); 3432 InitReg(MISCREG_TLBIMVAIS) 3433 .writes(1).exceptUserMode(); 3434 InitReg(MISCREG_TLBIASIDIS) 3435 .writes(1).exceptUserMode(); 3436 InitReg(MISCREG_TLBIMVAAIS) 3437 .writes(1).exceptUserMode(); 3438 InitReg(MISCREG_TLBIMVALIS) 3439 .writes(1).exceptUserMode(); 3440 InitReg(MISCREG_TLBIMVAALIS) 3441 .writes(1).exceptUserMode(); 3442 InitReg(MISCREG_ITLBIALL) 3443 .writes(1).exceptUserMode(); 3444 InitReg(MISCREG_ITLBIMVA) 3445 .writes(1).exceptUserMode(); 3446 InitReg(MISCREG_ITLBIASID) 3447 .writes(1).exceptUserMode(); 3448 InitReg(MISCREG_DTLBIALL) 3449 .writes(1).exceptUserMode(); 3450 InitReg(MISCREG_DTLBIMVA) 3451 .writes(1).exceptUserMode(); 3452 InitReg(MISCREG_DTLBIASID) 3453 .writes(1).exceptUserMode(); 3454 InitReg(MISCREG_TLBIALL) 3455 .writes(1).exceptUserMode(); 3456 InitReg(MISCREG_TLBIMVA) 3457 .writes(1).exceptUserMode(); 3458 InitReg(MISCREG_TLBIASID) 3459 .writes(1).exceptUserMode(); 3460 InitReg(MISCREG_TLBIMVAA) 3461 .writes(1).exceptUserMode(); 3462 InitReg(MISCREG_TLBIMVAL) 3463 .writes(1).exceptUserMode(); 3464 InitReg(MISCREG_TLBIMVAAL) 3465 .writes(1).exceptUserMode(); 3466 InitReg(MISCREG_TLBIIPAS2IS) 3467 .monNonSecureWrite().hypWrite(); 3468 InitReg(MISCREG_TLBIIPAS2LIS) 3469 .monNonSecureWrite().hypWrite(); 3470 InitReg(MISCREG_TLBIALLHIS) 3471 .monNonSecureWrite().hypWrite(); 3472 InitReg(MISCREG_TLBIMVAHIS) 3473 .monNonSecureWrite().hypWrite(); 3474 InitReg(MISCREG_TLBIALLNSNHIS) 3475 .monNonSecureWrite().hypWrite(); 3476 InitReg(MISCREG_TLBIMVALHIS) 3477 .monNonSecureWrite().hypWrite(); 3478 InitReg(MISCREG_TLBIIPAS2) 3479 .monNonSecureWrite().hypWrite(); 3480 InitReg(MISCREG_TLBIIPAS2L) 3481 .monNonSecureWrite().hypWrite(); 3482 InitReg(MISCREG_TLBIALLH) 3483 .monNonSecureWrite().hypWrite(); 3484 InitReg(MISCREG_TLBIMVAH) 3485 .monNonSecureWrite().hypWrite(); 3486 InitReg(MISCREG_TLBIALLNSNH) 3487 .monNonSecureWrite().hypWrite(); 3488 InitReg(MISCREG_TLBIMVALH) 3489 .monNonSecureWrite().hypWrite(); 3490 InitReg(MISCREG_PMCR) 3491 .allPrivileges(); 3492 InitReg(MISCREG_PMCNTENSET) 3493 .allPrivileges(); 3494 InitReg(MISCREG_PMCNTENCLR) 3495 .allPrivileges(); 3496 InitReg(MISCREG_PMOVSR) 3497 .allPrivileges(); 3498 InitReg(MISCREG_PMSWINC) 3499 .allPrivileges(); 3500 InitReg(MISCREG_PMSELR) 3501 .allPrivileges(); 3502 InitReg(MISCREG_PMCEID0) 3503 .allPrivileges(); 3504 InitReg(MISCREG_PMCEID1) 3505 .allPrivileges(); 3506 InitReg(MISCREG_PMCCNTR) 3507 .allPrivileges(); 3508 InitReg(MISCREG_PMXEVTYPER) 3509 .allPrivileges(); 3510 InitReg(MISCREG_PMCCFILTR) 3511 .allPrivileges(); 3512 InitReg(MISCREG_PMXEVCNTR) 3513 .allPrivileges(); 3514 InitReg(MISCREG_PMUSERENR) 3515 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0); 3516 InitReg(MISCREG_PMINTENSET) 3517 .allPrivileges().exceptUserMode(); 3518 InitReg(MISCREG_PMINTENCLR) 3519 .allPrivileges().exceptUserMode(); 3520 InitReg(MISCREG_PMOVSSET) 3521 .unimplemented() 3522 .allPrivileges(); 3523 InitReg(MISCREG_L2CTLR) 3524 .allPrivileges().exceptUserMode(); 3525 InitReg(MISCREG_L2ECTLR) 3526 .unimplemented() 3527 .allPrivileges().exceptUserMode(); 3528 InitReg(MISCREG_PRRR) 3529 .banked(); 3530 InitReg(MISCREG_PRRR_NS) 3531 .bankedChild() 3532 .privSecure(!aarch32EL3) 3533 .nonSecure().exceptUserMode(); 3534 InitReg(MISCREG_PRRR_S) 3535 .bankedChild() 3536 .secure().exceptUserMode(); 3537 InitReg(MISCREG_MAIR0) 3538 .banked(); 3539 InitReg(MISCREG_MAIR0_NS) 3540 .bankedChild() 3541 .privSecure(!aarch32EL3) 3542 .nonSecure().exceptUserMode(); 3543 InitReg(MISCREG_MAIR0_S) 3544 .bankedChild() 3545 .secure().exceptUserMode(); 3546 InitReg(MISCREG_NMRR) 3547 .banked(); 3548 InitReg(MISCREG_NMRR_NS) 3549 .bankedChild() 3550 .privSecure(!aarch32EL3) 3551 .nonSecure().exceptUserMode(); 3552 InitReg(MISCREG_NMRR_S) 3553 .bankedChild() 3554 .secure().exceptUserMode(); 3555 InitReg(MISCREG_MAIR1) 3556 .banked(); 3557 InitReg(MISCREG_MAIR1_NS) 3558 .bankedChild() 3559 .privSecure(!aarch32EL3) 3560 .nonSecure().exceptUserMode(); 3561 InitReg(MISCREG_MAIR1_S) 3562 .bankedChild() 3563 .secure().exceptUserMode(); 3564 InitReg(MISCREG_AMAIR0) 3565 .banked(); 3566 InitReg(MISCREG_AMAIR0_NS) 3567 .bankedChild() 3568 .privSecure(!aarch32EL3) 3569 .nonSecure().exceptUserMode(); 3570 InitReg(MISCREG_AMAIR0_S) 3571 .bankedChild() 3572 .secure().exceptUserMode(); 3573 InitReg(MISCREG_AMAIR1) 3574 .banked(); 3575 InitReg(MISCREG_AMAIR1_NS) 3576 .bankedChild() 3577 .privSecure(!aarch32EL3) 3578 .nonSecure().exceptUserMode(); 3579 InitReg(MISCREG_AMAIR1_S) 3580 .bankedChild() 3581 .secure().exceptUserMode(); 3582 InitReg(MISCREG_HMAIR0) 3583 .hyp().monNonSecure(); 3584 InitReg(MISCREG_HMAIR1) 3585 .hyp().monNonSecure(); 3586 InitReg(MISCREG_HAMAIR0) 3587 .unimplemented() 3588 .warnNotFail() 3589 .hyp().monNonSecure(); 3590 InitReg(MISCREG_HAMAIR1) 3591 .unimplemented() 3592 .warnNotFail() 3593 .hyp().monNonSecure(); 3594 InitReg(MISCREG_VBAR) 3595 .banked(); 3596 InitReg(MISCREG_VBAR_NS) 3597 .bankedChild() 3598 .privSecure(!aarch32EL3) 3599 .nonSecure().exceptUserMode(); 3600 InitReg(MISCREG_VBAR_S) 3601 .bankedChild() 3602 .secure().exceptUserMode(); 3603 InitReg(MISCREG_MVBAR) 3604 .mon().secure() 3605 .hypRead(FullSystem && system->highestEL() == EL2) 3606 .privRead(FullSystem && system->highestEL() == EL1) 3607 .exceptUserMode(); 3608 InitReg(MISCREG_RMR) 3609 .unimplemented() 3610 .mon().secure().exceptUserMode(); 3611 InitReg(MISCREG_ISR) 3612 .allPrivileges().exceptUserMode().writes(0); 3613 InitReg(MISCREG_HVBAR) 3614 .hyp().monNonSecure() 3615 .res0(0x1f); 3616 InitReg(MISCREG_FCSEIDR) 3617 .unimplemented() 3618 .warnNotFail() 3619 .allPrivileges().exceptUserMode(); 3620 InitReg(MISCREG_CONTEXTIDR) 3621 .banked(); 3622 InitReg(MISCREG_CONTEXTIDR_NS) 3623 .bankedChild() 3624 .privSecure(!aarch32EL3) 3625 .nonSecure().exceptUserMode(); 3626 InitReg(MISCREG_CONTEXTIDR_S) 3627 .bankedChild() 3628 .secure().exceptUserMode(); 3629 InitReg(MISCREG_TPIDRURW) 3630 .banked(); 3631 InitReg(MISCREG_TPIDRURW_NS) 3632 .bankedChild() 3633 .allPrivileges() 3634 .privSecure(!aarch32EL3) 3635 .monSecure(0); 3636 InitReg(MISCREG_TPIDRURW_S) 3637 .bankedChild() 3638 .secure(); 3639 InitReg(MISCREG_TPIDRURO) 3640 .banked(); 3641 InitReg(MISCREG_TPIDRURO_NS) 3642 .bankedChild() 3643 .allPrivileges() 3644 .userNonSecureWrite(0).userSecureRead(1) 3645 .privSecure(!aarch32EL3) 3646 .monSecure(0); 3647 InitReg(MISCREG_TPIDRURO_S) 3648 .bankedChild() 3649 .secure().userSecureWrite(0); 3650 InitReg(MISCREG_TPIDRPRW) 3651 .banked(); 3652 InitReg(MISCREG_TPIDRPRW_NS) 3653 .bankedChild() 3654 .nonSecure().exceptUserMode() 3655 .privSecure(!aarch32EL3); 3656 InitReg(MISCREG_TPIDRPRW_S) 3657 .bankedChild() 3658 .secure().exceptUserMode(); 3659 InitReg(MISCREG_HTPIDR) 3660 .hyp().monNonSecure(); 3661 InitReg(MISCREG_CNTFRQ) 3662 .unverifiable() 3663 .reads(1).mon(); 3664 InitReg(MISCREG_CNTKCTL) 3665 .allPrivileges().exceptUserMode(); 3666 InitReg(MISCREG_CNTP_TVAL) 3667 .banked(); 3668 InitReg(MISCREG_CNTP_TVAL_NS) 3669 .bankedChild() 3670 .allPrivileges() 3671 .privSecure(!aarch32EL3) 3672 .monSecure(0); 3673 InitReg(MISCREG_CNTP_TVAL_S) 3674 .bankedChild() 3675 .secure().user(1); 3676 InitReg(MISCREG_CNTP_CTL) 3677 .banked(); 3678 InitReg(MISCREG_CNTP_CTL_NS) 3679 .bankedChild() 3680 .allPrivileges() 3681 .privSecure(!aarch32EL3) 3682 .monSecure(0); 3683 InitReg(MISCREG_CNTP_CTL_S) 3684 .bankedChild() 3685 .secure().user(1); 3686 InitReg(MISCREG_CNTV_TVAL) 3687 .allPrivileges(); 3688 InitReg(MISCREG_CNTV_CTL) 3689 .allPrivileges(); 3690 InitReg(MISCREG_CNTHCTL) 3691 .hypWrite().monNonSecureRead(); 3692 InitReg(MISCREG_CNTHP_TVAL) 3693 .hypWrite().monNonSecureRead(); 3694 InitReg(MISCREG_CNTHP_CTL) 3695 .hypWrite().monNonSecureRead(); 3696 InitReg(MISCREG_IL1DATA0) 3697 .unimplemented() 3698 .allPrivileges().exceptUserMode(); 3699 InitReg(MISCREG_IL1DATA1) 3700 .unimplemented() 3701 .allPrivileges().exceptUserMode(); 3702 InitReg(MISCREG_IL1DATA2) 3703 .unimplemented() 3704 .allPrivileges().exceptUserMode(); 3705 InitReg(MISCREG_IL1DATA3) 3706 .unimplemented() 3707 .allPrivileges().exceptUserMode(); 3708 InitReg(MISCREG_DL1DATA0) 3709 .unimplemented() 3710 .allPrivileges().exceptUserMode(); 3711 InitReg(MISCREG_DL1DATA1) 3712 .unimplemented() 3713 .allPrivileges().exceptUserMode(); 3714 InitReg(MISCREG_DL1DATA2) 3715 .unimplemented() 3716 .allPrivileges().exceptUserMode(); 3717 InitReg(MISCREG_DL1DATA3) 3718 .unimplemented() 3719 .allPrivileges().exceptUserMode(); 3720 InitReg(MISCREG_DL1DATA4) 3721 .unimplemented() 3722 .allPrivileges().exceptUserMode(); 3723 InitReg(MISCREG_RAMINDEX) 3724 .unimplemented() 3725 .writes(1).exceptUserMode(); 3726 InitReg(MISCREG_L2ACTLR) 3727 .unimplemented() 3728 .allPrivileges().exceptUserMode(); 3729 InitReg(MISCREG_CBAR) 3730 .unimplemented() 3731 .allPrivileges().exceptUserMode().writes(0); 3732 InitReg(MISCREG_HTTBR) 3733 .hyp().monNonSecure(); 3734 InitReg(MISCREG_VTTBR) 3735 .hyp().monNonSecure(); 3736 InitReg(MISCREG_CNTPCT) 3737 .reads(1); 3738 InitReg(MISCREG_CNTVCT) 3739 .unverifiable() 3740 .reads(1); 3741 InitReg(MISCREG_CNTP_CVAL) 3742 .banked(); 3743 InitReg(MISCREG_CNTP_CVAL_NS) 3744 .bankedChild() 3745 .allPrivileges() 3746 .privSecure(!aarch32EL3) 3747 .monSecure(0); 3748 InitReg(MISCREG_CNTP_CVAL_S) 3749 .bankedChild() 3750 .secure().user(1); 3751 InitReg(MISCREG_CNTV_CVAL) 3752 .allPrivileges(); 3753 InitReg(MISCREG_CNTVOFF) 3754 .hyp().monNonSecure(); 3755 InitReg(MISCREG_CNTHP_CVAL) 3756 .hypWrite().monNonSecureRead(); 3757 InitReg(MISCREG_CPUMERRSR) 3758 .unimplemented() 3759 .allPrivileges().exceptUserMode(); 3760 InitReg(MISCREG_L2MERRSR) 3761 .unimplemented() 3762 .warnNotFail() 3763 .allPrivileges().exceptUserMode(); 3764 3765 // AArch64 registers (Op0=2); 3766 InitReg(MISCREG_MDCCINT_EL1) 3767 .allPrivileges(); 3768 InitReg(MISCREG_OSDTRRX_EL1) 3769 .allPrivileges() 3770 .mapsTo(MISCREG_DBGDTRRXext); 3771 InitReg(MISCREG_MDSCR_EL1) 3772 .allPrivileges() 3773 .mapsTo(MISCREG_DBGDSCRext); 3774 InitReg(MISCREG_OSDTRTX_EL1) 3775 .allPrivileges() 3776 .mapsTo(MISCREG_DBGDTRTXext); 3777 InitReg(MISCREG_OSECCR_EL1) 3778 .allPrivileges() 3779 .mapsTo(MISCREG_DBGOSECCR); 3780 InitReg(MISCREG_DBGBVR0_EL1) 3781 .allPrivileges() 3782 .mapsTo(MISCREG_DBGBVR0 /*, MISCREG_DBGBXVR0 */); 3783 InitReg(MISCREG_DBGBVR1_EL1) 3784 .allPrivileges() 3785 .mapsTo(MISCREG_DBGBVR1 /*, MISCREG_DBGBXVR1 */); 3786 InitReg(MISCREG_DBGBVR2_EL1) 3787 .allPrivileges() 3788 .mapsTo(MISCREG_DBGBVR2 /*, MISCREG_DBGBXVR2 */); 3789 InitReg(MISCREG_DBGBVR3_EL1) 3790 .allPrivileges() 3791 .mapsTo(MISCREG_DBGBVR3 /*, MISCREG_DBGBXVR3 */); 3792 InitReg(MISCREG_DBGBVR4_EL1) 3793 .allPrivileges() 3794 .mapsTo(MISCREG_DBGBVR4 /*, MISCREG_DBGBXVR4 */); 3795 InitReg(MISCREG_DBGBVR5_EL1) 3796 .allPrivileges() 3797 .mapsTo(MISCREG_DBGBVR5 /*, MISCREG_DBGBXVR5 */); 3798 InitReg(MISCREG_DBGBCR0_EL1) 3799 .allPrivileges() 3800 .mapsTo(MISCREG_DBGBCR0); 3801 InitReg(MISCREG_DBGBCR1_EL1) 3802 .allPrivileges() 3803 .mapsTo(MISCREG_DBGBCR1); 3804 InitReg(MISCREG_DBGBCR2_EL1) 3805 .allPrivileges() 3806 .mapsTo(MISCREG_DBGBCR2); 3807 InitReg(MISCREG_DBGBCR3_EL1) 3808 .allPrivileges() 3809 .mapsTo(MISCREG_DBGBCR3); 3810 InitReg(MISCREG_DBGBCR4_EL1) 3811 .allPrivileges() 3812 .mapsTo(MISCREG_DBGBCR4); 3813 InitReg(MISCREG_DBGBCR5_EL1) 3814 .allPrivileges() 3815 .mapsTo(MISCREG_DBGBCR5); 3816 InitReg(MISCREG_DBGWVR0_EL1) 3817 .allPrivileges() 3818 .mapsTo(MISCREG_DBGWVR0); 3819 InitReg(MISCREG_DBGWVR1_EL1) 3820 .allPrivileges() 3821 .mapsTo(MISCREG_DBGWVR1); 3822 InitReg(MISCREG_DBGWVR2_EL1) 3823 .allPrivileges() 3824 .mapsTo(MISCREG_DBGWVR2); 3825 InitReg(MISCREG_DBGWVR3_EL1) 3826 .allPrivileges() 3827 .mapsTo(MISCREG_DBGWVR3); 3828 InitReg(MISCREG_DBGWCR0_EL1) 3829 .allPrivileges() 3830 .mapsTo(MISCREG_DBGWCR0); 3831 InitReg(MISCREG_DBGWCR1_EL1) 3832 .allPrivileges() 3833 .mapsTo(MISCREG_DBGWCR1); 3834 InitReg(MISCREG_DBGWCR2_EL1) 3835 .allPrivileges() 3836 .mapsTo(MISCREG_DBGWCR2); 3837 InitReg(MISCREG_DBGWCR3_EL1) 3838 .allPrivileges() 3839 .mapsTo(MISCREG_DBGWCR3); 3840 InitReg(MISCREG_MDCCSR_EL0) 3841 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0) 3842 .mapsTo(MISCREG_DBGDSCRint); 3843 InitReg(MISCREG_MDDTR_EL0) 3844 .allPrivileges(); 3845 InitReg(MISCREG_MDDTRTX_EL0) 3846 .allPrivileges(); 3847 InitReg(MISCREG_MDDTRRX_EL0) 3848 .allPrivileges(); 3849 InitReg(MISCREG_DBGVCR32_EL2) 3850 .allPrivileges() 3851 .mapsTo(MISCREG_DBGVCR); 3852 InitReg(MISCREG_MDRAR_EL1) 3853 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0) 3854 .mapsTo(MISCREG_DBGDRAR); 3855 InitReg(MISCREG_OSLAR_EL1) 3856 .allPrivileges().monSecureRead(0).monNonSecureRead(0) 3857 .mapsTo(MISCREG_DBGOSLAR); 3858 InitReg(MISCREG_OSLSR_EL1) 3859 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0) 3860 .mapsTo(MISCREG_DBGOSLSR); 3861 InitReg(MISCREG_OSDLR_EL1) 3862 .allPrivileges() 3863 .mapsTo(MISCREG_DBGOSDLR); 3864 InitReg(MISCREG_DBGPRCR_EL1) 3865 .allPrivileges() 3866 .mapsTo(MISCREG_DBGPRCR); 3867 InitReg(MISCREG_DBGCLAIMSET_EL1) 3868 .allPrivileges() 3869 .mapsTo(MISCREG_DBGCLAIMSET); 3870 InitReg(MISCREG_DBGCLAIMCLR_EL1) 3871 .allPrivileges() 3872 .mapsTo(MISCREG_DBGCLAIMCLR); 3873 InitReg(MISCREG_DBGAUTHSTATUS_EL1) 3874 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0) 3875 .mapsTo(MISCREG_DBGAUTHSTATUS); 3876 InitReg(MISCREG_TEECR32_EL1); 3877 InitReg(MISCREG_TEEHBR32_EL1); 3878 3879 // AArch64 registers (Op0=1,3); 3880 InitReg(MISCREG_MIDR_EL1) 3881 .allPrivileges().exceptUserMode().writes(0); 3882 InitReg(MISCREG_MPIDR_EL1) 3883 .allPrivileges().exceptUserMode().writes(0); 3884 InitReg(MISCREG_REVIDR_EL1) 3885 .allPrivileges().exceptUserMode().writes(0); 3886 InitReg(MISCREG_ID_PFR0_EL1) 3887 .allPrivileges().exceptUserMode().writes(0) 3888 .mapsTo(MISCREG_ID_PFR0); 3889 InitReg(MISCREG_ID_PFR1_EL1) 3890 .allPrivileges().exceptUserMode().writes(0) 3891 .mapsTo(MISCREG_ID_PFR1); 3892 InitReg(MISCREG_ID_DFR0_EL1) 3893 .allPrivileges().exceptUserMode().writes(0) 3894 .mapsTo(MISCREG_ID_DFR0); 3895 InitReg(MISCREG_ID_AFR0_EL1) 3896 .allPrivileges().exceptUserMode().writes(0) 3897 .mapsTo(MISCREG_ID_AFR0); 3898 InitReg(MISCREG_ID_MMFR0_EL1) 3899 .allPrivileges().exceptUserMode().writes(0) 3900 .mapsTo(MISCREG_ID_MMFR0); 3901 InitReg(MISCREG_ID_MMFR1_EL1) 3902 .allPrivileges().exceptUserMode().writes(0) 3903 .mapsTo(MISCREG_ID_MMFR1); 3904 InitReg(MISCREG_ID_MMFR2_EL1) 3905 .allPrivileges().exceptUserMode().writes(0) 3906 .mapsTo(MISCREG_ID_MMFR2); 3907 InitReg(MISCREG_ID_MMFR3_EL1) 3908 .allPrivileges().exceptUserMode().writes(0) 3909 .mapsTo(MISCREG_ID_MMFR3); 3910 InitReg(MISCREG_ID_ISAR0_EL1) 3911 .allPrivileges().exceptUserMode().writes(0) 3912 .mapsTo(MISCREG_ID_ISAR0); 3913 InitReg(MISCREG_ID_ISAR1_EL1) 3914 .allPrivileges().exceptUserMode().writes(0) 3915 .mapsTo(MISCREG_ID_ISAR1); 3916 InitReg(MISCREG_ID_ISAR2_EL1) 3917 .allPrivileges().exceptUserMode().writes(0) 3918 .mapsTo(MISCREG_ID_ISAR2); 3919 InitReg(MISCREG_ID_ISAR3_EL1) 3920 .allPrivileges().exceptUserMode().writes(0) 3921 .mapsTo(MISCREG_ID_ISAR3); 3922 InitReg(MISCREG_ID_ISAR4_EL1) 3923 .allPrivileges().exceptUserMode().writes(0) 3924 .mapsTo(MISCREG_ID_ISAR4); 3925 InitReg(MISCREG_ID_ISAR5_EL1) 3926 .allPrivileges().exceptUserMode().writes(0) 3927 .mapsTo(MISCREG_ID_ISAR5); 3928 InitReg(MISCREG_MVFR0_EL1) 3929 .allPrivileges().exceptUserMode().writes(0); 3930 InitReg(MISCREG_MVFR1_EL1) 3931 .allPrivileges().exceptUserMode().writes(0); 3932 InitReg(MISCREG_MVFR2_EL1) 3933 .allPrivileges().exceptUserMode().writes(0); 3934 InitReg(MISCREG_ID_AA64PFR0_EL1) 3935 .allPrivileges().exceptUserMode().writes(0); 3936 InitReg(MISCREG_ID_AA64PFR1_EL1) 3937 .allPrivileges().exceptUserMode().writes(0); 3938 InitReg(MISCREG_ID_AA64DFR0_EL1) 3939 .allPrivileges().exceptUserMode().writes(0); 3940 InitReg(MISCREG_ID_AA64DFR1_EL1) 3941 .allPrivileges().exceptUserMode().writes(0); 3942 InitReg(MISCREG_ID_AA64AFR0_EL1) 3943 .allPrivileges().exceptUserMode().writes(0); 3944 InitReg(MISCREG_ID_AA64AFR1_EL1) 3945 .allPrivileges().exceptUserMode().writes(0); 3946 InitReg(MISCREG_ID_AA64ISAR0_EL1) 3947 .allPrivileges().exceptUserMode().writes(0); 3948 InitReg(MISCREG_ID_AA64ISAR1_EL1) 3949 .allPrivileges().exceptUserMode().writes(0); 3950 InitReg(MISCREG_ID_AA64MMFR0_EL1) 3951 .allPrivileges().exceptUserMode().writes(0); 3952 InitReg(MISCREG_ID_AA64MMFR1_EL1) 3953 .allPrivileges().exceptUserMode().writes(0); 3954 InitReg(MISCREG_ID_AA64MMFR2_EL1) 3955 .allPrivileges().exceptUserMode().writes(0); 3956 InitReg(MISCREG_CCSIDR_EL1) 3957 .allPrivileges().exceptUserMode().writes(0); 3958 InitReg(MISCREG_CLIDR_EL1) 3959 .allPrivileges().exceptUserMode().writes(0); 3960 InitReg(MISCREG_AIDR_EL1) 3961 .allPrivileges().exceptUserMode().writes(0); 3962 InitReg(MISCREG_CSSELR_EL1) 3963 .allPrivileges().exceptUserMode() 3964 .mapsTo(MISCREG_CSSELR_NS); 3965 InitReg(MISCREG_CTR_EL0) 3966 .reads(1); 3967 InitReg(MISCREG_DCZID_EL0) 3968 .reads(1); 3969 InitReg(MISCREG_VPIDR_EL2) 3970 .hyp().mon() 3971 .mapsTo(MISCREG_VPIDR); 3972 InitReg(MISCREG_VMPIDR_EL2) 3973 .hyp().mon() 3974 .mapsTo(MISCREG_VMPIDR); 3975 InitReg(MISCREG_SCTLR_EL1) 3976 .allPrivileges().exceptUserMode() 3977 .res0( 0x20440 | (EnDB ? 0 : 0x2000) 3978 | (IESB ? 0 : 0x200000) 3979 | (EnDA ? 0 : 0x8000000) 3980 | (EnIB ? 0 : 0x40000000) 3981 | (EnIA ? 0 : 0x80000000)) 3982 .res1(0x500800 | (SPAN ? 0 : 0x800000) 3983 | (nTLSMD ? 0 : 0x8000000) 3984 | (LSMAOE ? 0 : 0x10000000)) 3985 .mapsTo(MISCREG_SCTLR_NS); 3986 InitReg(MISCREG_ACTLR_EL1) 3987 .allPrivileges().exceptUserMode() 3988 .mapsTo(MISCREG_ACTLR_NS); 3989 InitReg(MISCREG_CPACR_EL1) 3990 .allPrivileges().exceptUserMode() 3991 .mapsTo(MISCREG_CPACR); 3992 InitReg(MISCREG_SCTLR_EL2) 3993 .hyp().mon() 3994 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000) 3995 | (IESB ? 0 : 0x200000) 3996 | (EnDA ? 0 : 0x8000000) 3997 | (EnIB ? 0 : 0x40000000) 3998 | (EnIA ? 0 : 0x80000000)) 3999 .res1(0x30c50830) 4000 .mapsTo(MISCREG_HSCTLR); 4001 InitReg(MISCREG_ACTLR_EL2) 4002 .hyp().mon() 4003 .mapsTo(MISCREG_HACTLR); 4004 InitReg(MISCREG_HCR_EL2) 4005 .hyp().mon() 4006 .mapsTo(MISCREG_HCR /*, MISCREG_HCR2*/); 4007 InitReg(MISCREG_MDCR_EL2) 4008 .hyp().mon() 4009 .mapsTo(MISCREG_HDCR); 4010 InitReg(MISCREG_CPTR_EL2) 4011 .hyp().mon() 4012 .mapsTo(MISCREG_HCPTR); 4013 InitReg(MISCREG_HSTR_EL2) 4014 .hyp().mon() 4015 .mapsTo(MISCREG_HSTR); 4016 InitReg(MISCREG_HACR_EL2) 4017 .hyp().mon() 4018 .mapsTo(MISCREG_HACR); 4019 InitReg(MISCREG_SCTLR_EL3) 4020 .mon() 4021 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000) 4022 | (IESB ? 0 : 0x200000) 4023 | (EnDA ? 0 : 0x8000000) 4024 | (EnIB ? 0 : 0x40000000) 4025 | (EnIA ? 0 : 0x80000000)) 4026 .res1(0x30c50830); 4027 InitReg(MISCREG_ACTLR_EL3) 4028 .mon(); 4029 InitReg(MISCREG_SCR_EL3) 4030 .mon() 4031 .mapsTo(MISCREG_SCR); // NAM D7-2005 4032 InitReg(MISCREG_SDER32_EL3) 4033 .mon() 4034 .mapsTo(MISCREG_SDER); 4035 InitReg(MISCREG_CPTR_EL3) 4036 .mon(); 4037 InitReg(MISCREG_MDCR_EL3) 4038 .mon(); 4039 InitReg(MISCREG_TTBR0_EL1) 4040 .allPrivileges().exceptUserMode() 4041 .mapsTo(MISCREG_TTBR0_NS); 4042 InitReg(MISCREG_TTBR1_EL1) 4043 .allPrivileges().exceptUserMode() 4044 .mapsTo(MISCREG_TTBR1_NS); 4045 InitReg(MISCREG_TCR_EL1) 4046 .allPrivileges().exceptUserMode() 4047 .mapsTo(MISCREG_TTBCR_NS); 4048 InitReg(MISCREG_TTBR0_EL2) 4049 .hyp().mon() 4050 .mapsTo(MISCREG_HTTBR); 4051 InitReg(MISCREG_TTBR1_EL2) 4052 .hyp().mon(); 4053 InitReg(MISCREG_TCR_EL2) 4054 .hyp().mon() 4055 .mapsTo(MISCREG_HTCR); 4056 InitReg(MISCREG_VTTBR_EL2) 4057 .hyp().mon() 4058 .mapsTo(MISCREG_VTTBR); 4059 InitReg(MISCREG_VTCR_EL2) 4060 .hyp().mon() 4061 .mapsTo(MISCREG_VTCR); 4062 InitReg(MISCREG_TTBR0_EL3) 4063 .mon(); 4064 InitReg(MISCREG_TCR_EL3) 4065 .mon(); 4066 InitReg(MISCREG_DACR32_EL2) 4067 .hyp().mon() 4068 .mapsTo(MISCREG_DACR_NS); 4069 InitReg(MISCREG_SPSR_EL1) 4070 .allPrivileges().exceptUserMode() 4071 .mapsTo(MISCREG_SPSR_SVC); // NAM C5.2.17 SPSR_EL1 4072 InitReg(MISCREG_ELR_EL1) 4073 .allPrivileges().exceptUserMode(); 4074 InitReg(MISCREG_SP_EL0) 4075 .allPrivileges().exceptUserMode(); 4076 InitReg(MISCREG_SPSEL) 4077 .allPrivileges().exceptUserMode(); 4078 InitReg(MISCREG_CURRENTEL) 4079 .allPrivileges().exceptUserMode().writes(0); 4080 InitReg(MISCREG_PAN) 4081 .allPrivileges().exceptUserMode() 4082 .implemented(havePAN); 4083 InitReg(MISCREG_NZCV) 4084 .allPrivileges(); 4085 InitReg(MISCREG_DAIF) 4086 .allPrivileges(); 4087 InitReg(MISCREG_FPCR) 4088 .allPrivileges(); 4089 InitReg(MISCREG_FPSR) 4090 .allPrivileges(); 4091 InitReg(MISCREG_DSPSR_EL0) 4092 .allPrivileges(); 4093 InitReg(MISCREG_DLR_EL0) 4094 .allPrivileges(); 4095 InitReg(MISCREG_SPSR_EL2) 4096 .hyp().mon() 4097 .mapsTo(MISCREG_SPSR_HYP); // NAM C5.2.18 SPSR_EL2 4098 InitReg(MISCREG_ELR_EL2) 4099 .hyp().mon(); 4100 InitReg(MISCREG_SP_EL1) 4101 .hyp().mon(); 4102 InitReg(MISCREG_SPSR_IRQ_AA64) 4103 .hyp().mon(); 4104 InitReg(MISCREG_SPSR_ABT_AA64) 4105 .hyp().mon(); 4106 InitReg(MISCREG_SPSR_UND_AA64) 4107 .hyp().mon(); 4108 InitReg(MISCREG_SPSR_FIQ_AA64) 4109 .hyp().mon(); 4110 InitReg(MISCREG_SPSR_EL3) 4111 .mon() 4112 .mapsTo(MISCREG_SPSR_MON); // NAM C5.2.19 SPSR_EL3 4113 InitReg(MISCREG_ELR_EL3) 4114 .mon(); 4115 InitReg(MISCREG_SP_EL2) 4116 .mon(); 4117 InitReg(MISCREG_AFSR0_EL1) 4118 .allPrivileges().exceptUserMode() 4119 .mapsTo(MISCREG_ADFSR_NS); 4120 InitReg(MISCREG_AFSR1_EL1) 4121 .allPrivileges().exceptUserMode() 4122 .mapsTo(MISCREG_AIFSR_NS); 4123 InitReg(MISCREG_ESR_EL1) 4124 .allPrivileges().exceptUserMode(); 4125 InitReg(MISCREG_IFSR32_EL2) 4126 .hyp().mon() 4127 .mapsTo(MISCREG_IFSR_NS); 4128 InitReg(MISCREG_AFSR0_EL2) 4129 .hyp().mon() 4130 .mapsTo(MISCREG_HADFSR); 4131 InitReg(MISCREG_AFSR1_EL2) 4132 .hyp().mon() 4133 .mapsTo(MISCREG_HAIFSR); 4134 InitReg(MISCREG_ESR_EL2) 4135 .hyp().mon() 4136 .mapsTo(MISCREG_HSR); 4137 InitReg(MISCREG_FPEXC32_EL2) 4138 .hyp().mon().mapsTo(MISCREG_FPEXC); 4139 InitReg(MISCREG_AFSR0_EL3) 4140 .mon(); 4141 InitReg(MISCREG_AFSR1_EL3) 4142 .mon(); 4143 InitReg(MISCREG_ESR_EL3) 4144 .mon(); 4145 InitReg(MISCREG_FAR_EL1) 4146 .allPrivileges().exceptUserMode() 4147 .mapsTo(MISCREG_DFAR_NS, MISCREG_IFAR_NS); 4148 InitReg(MISCREG_FAR_EL2) 4149 .hyp().mon() 4150 .mapsTo(MISCREG_HDFAR, MISCREG_HIFAR); 4151 InitReg(MISCREG_HPFAR_EL2) 4152 .hyp().mon() 4153 .mapsTo(MISCREG_HPFAR); 4154 InitReg(MISCREG_FAR_EL3) 4155 .mon(); 4156 InitReg(MISCREG_IC_IALLUIS) 4157 .warnNotFail() 4158 .writes(1).exceptUserMode(); 4159 InitReg(MISCREG_PAR_EL1) 4160 .allPrivileges().exceptUserMode() 4161 .mapsTo(MISCREG_PAR_NS); 4162 InitReg(MISCREG_IC_IALLU) 4163 .warnNotFail() 4164 .writes(1).exceptUserMode(); 4165 InitReg(MISCREG_DC_IVAC_Xt) 4166 .warnNotFail() 4167 .writes(1).exceptUserMode(); 4168 InitReg(MISCREG_DC_ISW_Xt) 4169 .warnNotFail() 4170 .writes(1).exceptUserMode(); 4171 InitReg(MISCREG_AT_S1E1R_Xt) 4172 .writes(1).exceptUserMode(); 4173 InitReg(MISCREG_AT_S1E1W_Xt) 4174 .writes(1).exceptUserMode(); 4175 InitReg(MISCREG_AT_S1E0R_Xt) 4176 .writes(1).exceptUserMode(); 4177 InitReg(MISCREG_AT_S1E0W_Xt) 4178 .writes(1).exceptUserMode(); 4179 InitReg(MISCREG_DC_CSW_Xt) 4180 .warnNotFail() 4181 .writes(1).exceptUserMode(); 4182 InitReg(MISCREG_DC_CISW_Xt) 4183 .warnNotFail() 4184 .writes(1).exceptUserMode(); 4185 InitReg(MISCREG_DC_ZVA_Xt) 4186 .warnNotFail() 4187 .writes(1).userSecureWrite(0); 4188 InitReg(MISCREG_IC_IVAU_Xt) 4189 .writes(1); 4190 InitReg(MISCREG_DC_CVAC_Xt) 4191 .warnNotFail() 4192 .writes(1); 4193 InitReg(MISCREG_DC_CVAU_Xt) 4194 .warnNotFail() 4195 .writes(1); 4196 InitReg(MISCREG_DC_CIVAC_Xt) 4197 .warnNotFail() 4198 .writes(1); 4199 InitReg(MISCREG_AT_S1E2R_Xt) 4200 .monNonSecureWrite().hypWrite(); 4201 InitReg(MISCREG_AT_S1E2W_Xt) 4202 .monNonSecureWrite().hypWrite(); 4203 InitReg(MISCREG_AT_S12E1R_Xt) 4204 .hypWrite().monSecureWrite().monNonSecureWrite(); 4205 InitReg(MISCREG_AT_S12E1W_Xt) 4206 .hypWrite().monSecureWrite().monNonSecureWrite(); 4207 InitReg(MISCREG_AT_S12E0R_Xt) 4208 .hypWrite().monSecureWrite().monNonSecureWrite(); 4209 InitReg(MISCREG_AT_S12E0W_Xt) 4210 .hypWrite().monSecureWrite().monNonSecureWrite(); 4211 InitReg(MISCREG_AT_S1E3R_Xt) 4212 .monSecureWrite().monNonSecureWrite(); 4213 InitReg(MISCREG_AT_S1E3W_Xt) 4214 .monSecureWrite().monNonSecureWrite(); 4215 InitReg(MISCREG_TLBI_VMALLE1IS) 4216 .writes(1).exceptUserMode(); 4217 InitReg(MISCREG_TLBI_VAE1IS_Xt) 4218 .writes(1).exceptUserMode(); 4219 InitReg(MISCREG_TLBI_ASIDE1IS_Xt) 4220 .writes(1).exceptUserMode(); 4221 InitReg(MISCREG_TLBI_VAAE1IS_Xt) 4222 .writes(1).exceptUserMode(); 4223 InitReg(MISCREG_TLBI_VALE1IS_Xt) 4224 .writes(1).exceptUserMode(); 4225 InitReg(MISCREG_TLBI_VAALE1IS_Xt) 4226 .writes(1).exceptUserMode(); 4227 InitReg(MISCREG_TLBI_VMALLE1) 4228 .writes(1).exceptUserMode(); 4229 InitReg(MISCREG_TLBI_VAE1_Xt) 4230 .writes(1).exceptUserMode(); 4231 InitReg(MISCREG_TLBI_ASIDE1_Xt) 4232 .writes(1).exceptUserMode(); 4233 InitReg(MISCREG_TLBI_VAAE1_Xt) 4234 .writes(1).exceptUserMode(); 4235 InitReg(MISCREG_TLBI_VALE1_Xt) 4236 .writes(1).exceptUserMode(); 4237 InitReg(MISCREG_TLBI_VAALE1_Xt) 4238 .writes(1).exceptUserMode(); 4239 InitReg(MISCREG_TLBI_IPAS2E1IS_Xt) 4240 .hypWrite().monSecureWrite().monNonSecureWrite(); 4241 InitReg(MISCREG_TLBI_IPAS2LE1IS_Xt) 4242 .hypWrite().monSecureWrite().monNonSecureWrite(); 4243 InitReg(MISCREG_TLBI_ALLE2IS) 4244 .monNonSecureWrite().hypWrite(); 4245 InitReg(MISCREG_TLBI_VAE2IS_Xt) 4246 .monNonSecureWrite().hypWrite(); 4247 InitReg(MISCREG_TLBI_ALLE1IS) 4248 .hypWrite().monSecureWrite().monNonSecureWrite(); 4249 InitReg(MISCREG_TLBI_VALE2IS_Xt) 4250 .monNonSecureWrite().hypWrite(); 4251 InitReg(MISCREG_TLBI_VMALLS12E1IS) 4252 .hypWrite().monSecureWrite().monNonSecureWrite(); 4253 InitReg(MISCREG_TLBI_IPAS2E1_Xt) 4254 .hypWrite().monSecureWrite().monNonSecureWrite(); 4255 InitReg(MISCREG_TLBI_IPAS2LE1_Xt) 4256 .hypWrite().monSecureWrite().monNonSecureWrite(); 4257 InitReg(MISCREG_TLBI_ALLE2) 4258 .monNonSecureWrite().hypWrite(); 4259 InitReg(MISCREG_TLBI_VAE2_Xt) 4260 .monNonSecureWrite().hypWrite(); 4261 InitReg(MISCREG_TLBI_ALLE1) 4262 .hypWrite().monSecureWrite().monNonSecureWrite(); 4263 InitReg(MISCREG_TLBI_VALE2_Xt) 4264 .monNonSecureWrite().hypWrite(); 4265 InitReg(MISCREG_TLBI_VMALLS12E1) 4266 .hypWrite().monSecureWrite().monNonSecureWrite(); 4267 InitReg(MISCREG_TLBI_ALLE3IS) 4268 .monSecureWrite().monNonSecureWrite(); 4269 InitReg(MISCREG_TLBI_VAE3IS_Xt) 4270 .monSecureWrite().monNonSecureWrite(); 4271 InitReg(MISCREG_TLBI_VALE3IS_Xt) 4272 .monSecureWrite().monNonSecureWrite(); 4273 InitReg(MISCREG_TLBI_ALLE3) 4274 .monSecureWrite().monNonSecureWrite(); 4275 InitReg(MISCREG_TLBI_VAE3_Xt) 4276 .monSecureWrite().monNonSecureWrite(); 4277 InitReg(MISCREG_TLBI_VALE3_Xt) 4278 .monSecureWrite().monNonSecureWrite(); 4279 InitReg(MISCREG_PMINTENSET_EL1) 4280 .allPrivileges().exceptUserMode() 4281 .mapsTo(MISCREG_PMINTENSET); 4282 InitReg(MISCREG_PMINTENCLR_EL1) 4283 .allPrivileges().exceptUserMode() 4284 .mapsTo(MISCREG_PMINTENCLR); 4285 InitReg(MISCREG_PMCR_EL0) 4286 .allPrivileges() 4287 .mapsTo(MISCREG_PMCR); 4288 InitReg(MISCREG_PMCNTENSET_EL0) 4289 .allPrivileges() 4290 .mapsTo(MISCREG_PMCNTENSET); 4291 InitReg(MISCREG_PMCNTENCLR_EL0) 4292 .allPrivileges() 4293 .mapsTo(MISCREG_PMCNTENCLR); 4294 InitReg(MISCREG_PMOVSCLR_EL0) 4295 .allPrivileges(); 4296// .mapsTo(MISCREG_PMOVSCLR); 4297 InitReg(MISCREG_PMSWINC_EL0) 4298 .writes(1).user() 4299 .mapsTo(MISCREG_PMSWINC); 4300 InitReg(MISCREG_PMSELR_EL0) 4301 .allPrivileges() 4302 .mapsTo(MISCREG_PMSELR); 4303 InitReg(MISCREG_PMCEID0_EL0) 4304 .reads(1).user() 4305 .mapsTo(MISCREG_PMCEID0); 4306 InitReg(MISCREG_PMCEID1_EL0) 4307 .reads(1).user() 4308 .mapsTo(MISCREG_PMCEID1); 4309 InitReg(MISCREG_PMCCNTR_EL0) 4310 .allPrivileges() 4311 .mapsTo(MISCREG_PMCCNTR); 4312 InitReg(MISCREG_PMXEVTYPER_EL0) 4313 .allPrivileges() 4314 .mapsTo(MISCREG_PMXEVTYPER); 4315 InitReg(MISCREG_PMCCFILTR_EL0) 4316 .allPrivileges(); 4317 InitReg(MISCREG_PMXEVCNTR_EL0) 4318 .allPrivileges() 4319 .mapsTo(MISCREG_PMXEVCNTR); 4320 InitReg(MISCREG_PMUSERENR_EL0) 4321 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0) 4322 .mapsTo(MISCREG_PMUSERENR); 4323 InitReg(MISCREG_PMOVSSET_EL0) 4324 .allPrivileges() 4325 .mapsTo(MISCREG_PMOVSSET); 4326 InitReg(MISCREG_MAIR_EL1) 4327 .allPrivileges().exceptUserMode() 4328 .mapsTo(MISCREG_PRRR_NS, MISCREG_NMRR_NS); 4329 InitReg(MISCREG_AMAIR_EL1) 4330 .allPrivileges().exceptUserMode() 4331 .mapsTo(MISCREG_AMAIR0_NS, MISCREG_AMAIR1_NS); 4332 InitReg(MISCREG_MAIR_EL2) 4333 .hyp().mon() 4334 .mapsTo(MISCREG_HMAIR0, MISCREG_HMAIR1); 4335 InitReg(MISCREG_AMAIR_EL2) 4336 .hyp().mon() 4337 .mapsTo(MISCREG_HAMAIR0, MISCREG_HAMAIR1); 4338 InitReg(MISCREG_MAIR_EL3) 4339 .mon(); 4340 InitReg(MISCREG_AMAIR_EL3) 4341 .mon(); 4342 InitReg(MISCREG_L2CTLR_EL1) 4343 .allPrivileges().exceptUserMode(); 4344 InitReg(MISCREG_L2ECTLR_EL1) 4345 .allPrivileges().exceptUserMode(); 4346 InitReg(MISCREG_VBAR_EL1) 4347 .allPrivileges().exceptUserMode() 4348 .mapsTo(MISCREG_VBAR_NS); 4349 InitReg(MISCREG_RVBAR_EL1) 4350 .allPrivileges().exceptUserMode().writes(0); 4351 InitReg(MISCREG_ISR_EL1) 4352 .allPrivileges().exceptUserMode().writes(0); 4353 InitReg(MISCREG_VBAR_EL2) 4354 .hyp().mon() 4355 .res0(0x7ff) 4356 .mapsTo(MISCREG_HVBAR); 4357 InitReg(MISCREG_RVBAR_EL2) 4358 .mon().hyp().writes(0); 4359 InitReg(MISCREG_VBAR_EL3) 4360 .mon(); 4361 InitReg(MISCREG_RVBAR_EL3) 4362 .mon().writes(0); 4363 InitReg(MISCREG_RMR_EL3) 4364 .mon(); 4365 InitReg(MISCREG_CONTEXTIDR_EL1) 4366 .allPrivileges().exceptUserMode() 4367 .mapsTo(MISCREG_CONTEXTIDR_NS); 4368 InitReg(MISCREG_TPIDR_EL1) 4369 .allPrivileges().exceptUserMode() 4370 .mapsTo(MISCREG_TPIDRPRW_NS); 4371 InitReg(MISCREG_TPIDR_EL0) 4372 .allPrivileges() 4373 .mapsTo(MISCREG_TPIDRURW_NS); 4374 InitReg(MISCREG_TPIDRRO_EL0) 4375 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0) 4376 .mapsTo(MISCREG_TPIDRURO_NS); 4377 InitReg(MISCREG_TPIDR_EL2) 4378 .hyp().mon() 4379 .mapsTo(MISCREG_HTPIDR); 4380 InitReg(MISCREG_TPIDR_EL3) 4381 .mon(); 4382 InitReg(MISCREG_CNTKCTL_EL1) 4383 .allPrivileges().exceptUserMode() 4384 .mapsTo(MISCREG_CNTKCTL); 4385 InitReg(MISCREG_CNTFRQ_EL0) 4386 .reads(1).mon() 4387 .mapsTo(MISCREG_CNTFRQ); 4388 InitReg(MISCREG_CNTPCT_EL0) 4389 .reads(1) 4390 .mapsTo(MISCREG_CNTPCT); /* 64b */ 4391 InitReg(MISCREG_CNTVCT_EL0) 4392 .unverifiable() 4393 .reads(1) 4394 .mapsTo(MISCREG_CNTVCT); /* 64b */ 4395 InitReg(MISCREG_CNTP_TVAL_EL0) 4396 .allPrivileges() 4397 .mapsTo(MISCREG_CNTP_TVAL_NS); 4398 InitReg(MISCREG_CNTP_CTL_EL0) 4399 .allPrivileges() 4400 .mapsTo(MISCREG_CNTP_CTL_NS); 4401 InitReg(MISCREG_CNTP_CVAL_EL0) 4402 .allPrivileges() 4403 .mapsTo(MISCREG_CNTP_CVAL_NS); /* 64b */ 4404 InitReg(MISCREG_CNTV_TVAL_EL0) 4405 .allPrivileges() 4406 .mapsTo(MISCREG_CNTV_TVAL); 4407 InitReg(MISCREG_CNTV_CTL_EL0) 4408 .allPrivileges() 4409 .mapsTo(MISCREG_CNTV_CTL); 4410 InitReg(MISCREG_CNTV_CVAL_EL0) 4411 .allPrivileges() 4412 .mapsTo(MISCREG_CNTV_CVAL); /* 64b */ 4413 InitReg(MISCREG_PMEVCNTR0_EL0) 4414 .allPrivileges(); 4415// .mapsTo(MISCREG_PMEVCNTR0); 4416 InitReg(MISCREG_PMEVCNTR1_EL0) 4417 .allPrivileges(); 4418// .mapsTo(MISCREG_PMEVCNTR1); 4419 InitReg(MISCREG_PMEVCNTR2_EL0) 4420 .allPrivileges(); 4421// .mapsTo(MISCREG_PMEVCNTR2); 4422 InitReg(MISCREG_PMEVCNTR3_EL0) 4423 .allPrivileges(); 4424// .mapsTo(MISCREG_PMEVCNTR3); 4425 InitReg(MISCREG_PMEVCNTR4_EL0) 4426 .allPrivileges(); 4427// .mapsTo(MISCREG_PMEVCNTR4); 4428 InitReg(MISCREG_PMEVCNTR5_EL0) 4429 .allPrivileges(); 4430// .mapsTo(MISCREG_PMEVCNTR5); 4431 InitReg(MISCREG_PMEVTYPER0_EL0) 4432 .allPrivileges(); 4433// .mapsTo(MISCREG_PMEVTYPER0); 4434 InitReg(MISCREG_PMEVTYPER1_EL0) 4435 .allPrivileges(); 4436// .mapsTo(MISCREG_PMEVTYPER1); 4437 InitReg(MISCREG_PMEVTYPER2_EL0) 4438 .allPrivileges(); 4439// .mapsTo(MISCREG_PMEVTYPER2); 4440 InitReg(MISCREG_PMEVTYPER3_EL0) 4441 .allPrivileges(); 4442// .mapsTo(MISCREG_PMEVTYPER3); 4443 InitReg(MISCREG_PMEVTYPER4_EL0) 4444 .allPrivileges(); 4445// .mapsTo(MISCREG_PMEVTYPER4); 4446 InitReg(MISCREG_PMEVTYPER5_EL0) 4447 .allPrivileges(); 4448// .mapsTo(MISCREG_PMEVTYPER5); 4449 InitReg(MISCREG_CNTVOFF_EL2) 4450 .hyp().mon() 4451 .mapsTo(MISCREG_CNTVOFF); /* 64b */ 4452 InitReg(MISCREG_CNTHCTL_EL2) 4453 .mon().hyp() 4454 .mapsTo(MISCREG_CNTHCTL); 4455 InitReg(MISCREG_CNTHP_TVAL_EL2) 4456 .mon().hyp() 4457 .mapsTo(MISCREG_CNTHP_TVAL); 4458 InitReg(MISCREG_CNTHP_CTL_EL2) 4459 .mon().hyp() 4460 .mapsTo(MISCREG_CNTHP_CTL); 4461 InitReg(MISCREG_CNTHP_CVAL_EL2) 4462 .mon().hyp() 4463 .mapsTo(MISCREG_CNTHP_CVAL); /* 64b */ 4464 InitReg(MISCREG_CNTPS_TVAL_EL1) 4465 .mon().privSecure(); 4466 InitReg(MISCREG_CNTPS_CTL_EL1) 4467 .mon().privSecure(); 4468 InitReg(MISCREG_CNTPS_CVAL_EL1) 4469 .mon().privSecure(); 4470 InitReg(MISCREG_IL1DATA0_EL1) 4471 .allPrivileges().exceptUserMode(); 4472 InitReg(MISCREG_IL1DATA1_EL1) 4473 .allPrivileges().exceptUserMode(); 4474 InitReg(MISCREG_IL1DATA2_EL1) 4475 .allPrivileges().exceptUserMode(); 4476 InitReg(MISCREG_IL1DATA3_EL1) 4477 .allPrivileges().exceptUserMode(); 4478 InitReg(MISCREG_DL1DATA0_EL1) 4479 .allPrivileges().exceptUserMode(); 4480 InitReg(MISCREG_DL1DATA1_EL1) 4481 .allPrivileges().exceptUserMode(); 4482 InitReg(MISCREG_DL1DATA2_EL1) 4483 .allPrivileges().exceptUserMode(); 4484 InitReg(MISCREG_DL1DATA3_EL1) 4485 .allPrivileges().exceptUserMode(); 4486 InitReg(MISCREG_DL1DATA4_EL1) 4487 .allPrivileges().exceptUserMode(); 4488 InitReg(MISCREG_L2ACTLR_EL1) 4489 .allPrivileges().exceptUserMode(); 4490 InitReg(MISCREG_CPUACTLR_EL1) 4491 .allPrivileges().exceptUserMode(); 4492 InitReg(MISCREG_CPUECTLR_EL1) 4493 .allPrivileges().exceptUserMode(); 4494 InitReg(MISCREG_CPUMERRSR_EL1) 4495 .allPrivileges().exceptUserMode(); 4496 InitReg(MISCREG_L2MERRSR_EL1) 4497 .unimplemented() 4498 .warnNotFail() 4499 .allPrivileges().exceptUserMode(); 4500 InitReg(MISCREG_CBAR_EL1) 4501 .allPrivileges().exceptUserMode().writes(0); 4502 InitReg(MISCREG_CONTEXTIDR_EL2) 4503 .mon().hyp(); 4504 4505 // GICv3 AArch64 4506 InitReg(MISCREG_ICC_PMR_EL1) 4507 .res0(0xffffff00) // [31:8] 4508 .allPrivileges().exceptUserMode() 4509 .mapsTo(MISCREG_ICC_PMR); 4510 InitReg(MISCREG_ICC_IAR0_EL1) 4511 .allPrivileges().exceptUserMode().writes(0) 4512 .mapsTo(MISCREG_ICC_IAR0); 4513 InitReg(MISCREG_ICC_EOIR0_EL1) 4514 .allPrivileges().exceptUserMode().reads(0) 4515 .mapsTo(MISCREG_ICC_EOIR0); 4516 InitReg(MISCREG_ICC_HPPIR0_EL1) 4517 .allPrivileges().exceptUserMode().writes(0) 4518 .mapsTo(MISCREG_ICC_HPPIR0); 4519 InitReg(MISCREG_ICC_BPR0_EL1) 4520 .res0(0xfffffff8) // [31:3] 4521 .allPrivileges().exceptUserMode() 4522 .mapsTo(MISCREG_ICC_BPR0); 4523 InitReg(MISCREG_ICC_AP0R0_EL1) 4524 .allPrivileges().exceptUserMode() 4525 .mapsTo(MISCREG_ICC_AP0R0); 4526 InitReg(MISCREG_ICC_AP0R1_EL1) 4527 .allPrivileges().exceptUserMode() 4528 .mapsTo(MISCREG_ICC_AP0R1); 4529 InitReg(MISCREG_ICC_AP0R2_EL1) 4530 .allPrivileges().exceptUserMode() 4531 .mapsTo(MISCREG_ICC_AP0R2); 4532 InitReg(MISCREG_ICC_AP0R3_EL1) 4533 .allPrivileges().exceptUserMode() 4534 .mapsTo(MISCREG_ICC_AP0R3); 4535 InitReg(MISCREG_ICC_AP1R0_EL1) 4536 .banked64() 4537 .mapsTo(MISCREG_ICC_AP1R0); 4538 InitReg(MISCREG_ICC_AP1R0_EL1_NS) 4539 .bankedChild() 4540 .allPrivileges().exceptUserMode() 4541 .mapsTo(MISCREG_ICC_AP1R0_NS); 4542 InitReg(MISCREG_ICC_AP1R0_EL1_S) 4543 .bankedChild() 4544 .allPrivileges().exceptUserMode() 4545 .mapsTo(MISCREG_ICC_AP1R0_S); 4546 InitReg(MISCREG_ICC_AP1R1_EL1) 4547 .banked64() 4548 .mapsTo(MISCREG_ICC_AP1R1); 4549 InitReg(MISCREG_ICC_AP1R1_EL1_NS) 4550 .bankedChild() 4551 .allPrivileges().exceptUserMode() 4552 .mapsTo(MISCREG_ICC_AP1R1_NS); 4553 InitReg(MISCREG_ICC_AP1R1_EL1_S) 4554 .bankedChild() 4555 .allPrivileges().exceptUserMode() 4556 .mapsTo(MISCREG_ICC_AP1R1_S); 4557 InitReg(MISCREG_ICC_AP1R2_EL1) 4558 .banked64() 4559 .mapsTo(MISCREG_ICC_AP1R2); 4560 InitReg(MISCREG_ICC_AP1R2_EL1_NS) 4561 .bankedChild() 4562 .allPrivileges().exceptUserMode() 4563 .mapsTo(MISCREG_ICC_AP1R2_NS); 4564 InitReg(MISCREG_ICC_AP1R2_EL1_S) 4565 .bankedChild() 4566 .allPrivileges().exceptUserMode() 4567 .mapsTo(MISCREG_ICC_AP1R2_S); 4568 InitReg(MISCREG_ICC_AP1R3_EL1) 4569 .banked64() 4570 .mapsTo(MISCREG_ICC_AP1R3); 4571 InitReg(MISCREG_ICC_AP1R3_EL1_NS) 4572 .bankedChild() 4573 .allPrivileges().exceptUserMode() 4574 .mapsTo(MISCREG_ICC_AP1R3_NS); 4575 InitReg(MISCREG_ICC_AP1R3_EL1_S) 4576 .bankedChild() 4577 .allPrivileges().exceptUserMode() 4578 .mapsTo(MISCREG_ICC_AP1R3_S); 4579 InitReg(MISCREG_ICC_DIR_EL1) 4580 .res0(0xFF000000) // [31:24] 4581 .allPrivileges().exceptUserMode().reads(0) 4582 .mapsTo(MISCREG_ICC_DIR); 4583 InitReg(MISCREG_ICC_RPR_EL1) 4584 .allPrivileges().exceptUserMode().writes(0) 4585 .mapsTo(MISCREG_ICC_RPR); 4586 InitReg(MISCREG_ICC_SGI1R_EL1) 4587 .allPrivileges().exceptUserMode().reads(0) 4588 .mapsTo(MISCREG_ICC_SGI1R); 4589 InitReg(MISCREG_ICC_ASGI1R_EL1) 4590 .allPrivileges().exceptUserMode().reads(0) 4591 .mapsTo(MISCREG_ICC_ASGI1R); 4592 InitReg(MISCREG_ICC_SGI0R_EL1) 4593 .allPrivileges().exceptUserMode().reads(0) 4594 .mapsTo(MISCREG_ICC_SGI0R); 4595 InitReg(MISCREG_ICC_IAR1_EL1) 4596 .allPrivileges().exceptUserMode().writes(0) 4597 .mapsTo(MISCREG_ICC_IAR1); 4598 InitReg(MISCREG_ICC_EOIR1_EL1) 4599 .res0(0xFF000000) // [31:24] 4600 .allPrivileges().exceptUserMode().reads(0) 4601 .mapsTo(MISCREG_ICC_EOIR1); 4602 InitReg(MISCREG_ICC_HPPIR1_EL1) 4603 .allPrivileges().exceptUserMode().writes(0) 4604 .mapsTo(MISCREG_ICC_HPPIR1); 4605 InitReg(MISCREG_ICC_BPR1_EL1) 4606 .banked64() 4607 .mapsTo(MISCREG_ICC_BPR1); 4608 InitReg(MISCREG_ICC_BPR1_EL1_NS) 4609 .bankedChild() 4610 .res0(0xfffffff8) // [31:3] 4611 .allPrivileges().exceptUserMode() 4612 .mapsTo(MISCREG_ICC_BPR1_NS); 4613 InitReg(MISCREG_ICC_BPR1_EL1_S) 4614 .bankedChild() 4615 .res0(0xfffffff8) // [31:3] 4616 .secure().exceptUserMode() 4617 .mapsTo(MISCREG_ICC_BPR1_S); 4618 InitReg(MISCREG_ICC_CTLR_EL1) 4619 .banked64() 4620 .mapsTo(MISCREG_ICC_CTLR); 4621 InitReg(MISCREG_ICC_CTLR_EL1_NS) 4622 .bankedChild() 4623 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2] 4624 .allPrivileges().exceptUserMode() 4625 .mapsTo(MISCREG_ICC_CTLR_NS); 4626 InitReg(MISCREG_ICC_CTLR_EL1_S) 4627 .bankedChild() 4628 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2] 4629 .secure().exceptUserMode() 4630 .mapsTo(MISCREG_ICC_CTLR_S); 4631 InitReg(MISCREG_ICC_SRE_EL1) 4632 .banked() 4633 .mapsTo(MISCREG_ICC_SRE); 4634 InitReg(MISCREG_ICC_SRE_EL1_NS) 4635 .bankedChild() 4636 .res0(0xFFFFFFF8) // [31:3] 4637 .allPrivileges().exceptUserMode() 4638 .mapsTo(MISCREG_ICC_SRE_NS); 4639 InitReg(MISCREG_ICC_SRE_EL1_S) 4640 .bankedChild() 4641 .res0(0xFFFFFFF8) // [31:3] 4642 .secure().exceptUserMode() 4643 .mapsTo(MISCREG_ICC_SRE_S); 4644 InitReg(MISCREG_ICC_IGRPEN0_EL1) 4645 .res0(0xFFFFFFFE) // [31:1] 4646 .allPrivileges().exceptUserMode() 4647 .mapsTo(MISCREG_ICC_IGRPEN0); 4648 InitReg(MISCREG_ICC_IGRPEN1_EL1) 4649 .banked64() 4650 .mapsTo(MISCREG_ICC_IGRPEN1); 4651 InitReg(MISCREG_ICC_IGRPEN1_EL1_NS) 4652 .bankedChild() 4653 .res0(0xFFFFFFFE) // [31:1] 4654 .allPrivileges().exceptUserMode() 4655 .mapsTo(MISCREG_ICC_IGRPEN1_NS); 4656 InitReg(MISCREG_ICC_IGRPEN1_EL1_S) 4657 .bankedChild() 4658 .res0(0xFFFFFFFE) // [31:1] 4659 .secure().exceptUserMode() 4660 .mapsTo(MISCREG_ICC_IGRPEN1_S); 4661 InitReg(MISCREG_ICC_SRE_EL2) 4662 .hyp().mon() 4663 .mapsTo(MISCREG_ICC_HSRE); 4664 InitReg(MISCREG_ICC_CTLR_EL3) 4665 .allPrivileges().exceptUserMode() 4666 .mapsTo(MISCREG_ICC_MCTLR); 4667 InitReg(MISCREG_ICC_SRE_EL3) 4668 .allPrivileges().exceptUserMode() 4669 .mapsTo(MISCREG_ICC_MSRE); 4670 InitReg(MISCREG_ICC_IGRPEN1_EL3) 4671 .allPrivileges().exceptUserMode() 4672 .mapsTo(MISCREG_ICC_MGRPEN1); 4673 4674 InitReg(MISCREG_ICH_AP0R0_EL2) 4675 .hyp().mon() 4676 .mapsTo(MISCREG_ICH_AP0R0); 4677 InitReg(MISCREG_ICH_AP0R1_EL2) 4678 .hyp().mon() 4679 .unimplemented() 4680 .mapsTo(MISCREG_ICH_AP0R1); 4681 InitReg(MISCREG_ICH_AP0R2_EL2) 4682 .hyp().mon() 4683 .unimplemented() 4684 .mapsTo(MISCREG_ICH_AP0R2); 4685 InitReg(MISCREG_ICH_AP0R3_EL2) 4686 .hyp().mon() 4687 .unimplemented() 4688 .mapsTo(MISCREG_ICH_AP0R3); 4689 InitReg(MISCREG_ICH_AP1R0_EL2) 4690 .hyp().mon() 4691 .mapsTo(MISCREG_ICH_AP1R0); 4692 InitReg(MISCREG_ICH_AP1R1_EL2) 4693 .hyp().mon() 4694 .unimplemented() 4695 .mapsTo(MISCREG_ICH_AP1R1); 4696 InitReg(MISCREG_ICH_AP1R2_EL2) 4697 .hyp().mon() 4698 .unimplemented() 4699 .mapsTo(MISCREG_ICH_AP1R2); 4700 InitReg(MISCREG_ICH_AP1R3_EL2) 4701 .hyp().mon() 4702 .unimplemented() 4703 .mapsTo(MISCREG_ICH_AP1R3); 4704 InitReg(MISCREG_ICH_HCR_EL2) 4705 .hyp().mon() 4706 .mapsTo(MISCREG_ICH_HCR); 4707 InitReg(MISCREG_ICH_VTR_EL2) 4708 .hyp().mon().writes(0) 4709 .mapsTo(MISCREG_ICH_VTR); 4710 InitReg(MISCREG_ICH_MISR_EL2) 4711 .hyp().mon().writes(0) 4712 .mapsTo(MISCREG_ICH_MISR); 4713 InitReg(MISCREG_ICH_EISR_EL2) 4714 .hyp().mon().writes(0) 4715 .mapsTo(MISCREG_ICH_EISR); 4716 InitReg(MISCREG_ICH_ELRSR_EL2) 4717 .hyp().mon().writes(0) 4718 .mapsTo(MISCREG_ICH_ELRSR); 4719 InitReg(MISCREG_ICH_VMCR_EL2) 4720 .hyp().mon() 4721 .mapsTo(MISCREG_ICH_VMCR); 4722 InitReg(MISCREG_ICH_LR0_EL2) 4723 .hyp().mon() 4724 .allPrivileges().exceptUserMode(); 4725 InitReg(MISCREG_ICH_LR1_EL2) 4726 .hyp().mon() 4727 .allPrivileges().exceptUserMode(); 4728 InitReg(MISCREG_ICH_LR2_EL2) 4729 .hyp().mon() 4730 .allPrivileges().exceptUserMode(); 4731 InitReg(MISCREG_ICH_LR3_EL2) 4732 .hyp().mon() 4733 .allPrivileges().exceptUserMode(); 4734 InitReg(MISCREG_ICH_LR4_EL2) 4735 .hyp().mon() 4736 .allPrivileges().exceptUserMode(); 4737 InitReg(MISCREG_ICH_LR5_EL2) 4738 .hyp().mon() 4739 .allPrivileges().exceptUserMode(); 4740 InitReg(MISCREG_ICH_LR6_EL2) 4741 .hyp().mon() 4742 .allPrivileges().exceptUserMode(); 4743 InitReg(MISCREG_ICH_LR7_EL2) 4744 .hyp().mon() 4745 .allPrivileges().exceptUserMode(); 4746 InitReg(MISCREG_ICH_LR8_EL2) 4747 .hyp().mon() 4748 .allPrivileges().exceptUserMode(); 4749 InitReg(MISCREG_ICH_LR9_EL2) 4750 .hyp().mon() 4751 .allPrivileges().exceptUserMode(); 4752 InitReg(MISCREG_ICH_LR10_EL2) 4753 .hyp().mon() 4754 .allPrivileges().exceptUserMode(); 4755 InitReg(MISCREG_ICH_LR11_EL2) 4756 .hyp().mon() 4757 .allPrivileges().exceptUserMode(); 4758 InitReg(MISCREG_ICH_LR12_EL2) 4759 .hyp().mon() 4760 .allPrivileges().exceptUserMode(); 4761 InitReg(MISCREG_ICH_LR13_EL2) 4762 .hyp().mon() 4763 .allPrivileges().exceptUserMode(); 4764 InitReg(MISCREG_ICH_LR14_EL2) 4765 .hyp().mon() 4766 .allPrivileges().exceptUserMode(); 4767 InitReg(MISCREG_ICH_LR15_EL2) 4768 .hyp().mon() 4769 .allPrivileges().exceptUserMode(); 4770 4771 // GICv3 AArch32 4772 InitReg(MISCREG_ICC_AP0R0) 4773 .allPrivileges().exceptUserMode(); 4774 InitReg(MISCREG_ICC_AP0R1) 4775 .allPrivileges().exceptUserMode(); 4776 InitReg(MISCREG_ICC_AP0R2) 4777 .allPrivileges().exceptUserMode(); 4778 InitReg(MISCREG_ICC_AP0R3) 4779 .allPrivileges().exceptUserMode(); 4780 InitReg(MISCREG_ICC_AP1R0) 4781 .allPrivileges().exceptUserMode(); 4782 InitReg(MISCREG_ICC_AP1R0_NS) 4783 .allPrivileges().exceptUserMode(); 4784 InitReg(MISCREG_ICC_AP1R0_S) 4785 .allPrivileges().exceptUserMode(); 4786 InitReg(MISCREG_ICC_AP1R1) 4787 .allPrivileges().exceptUserMode(); 4788 InitReg(MISCREG_ICC_AP1R1_NS) 4789 .allPrivileges().exceptUserMode(); 4790 InitReg(MISCREG_ICC_AP1R1_S) 4791 .allPrivileges().exceptUserMode(); 4792 InitReg(MISCREG_ICC_AP1R2) 4793 .allPrivileges().exceptUserMode(); 4794 InitReg(MISCREG_ICC_AP1R2_NS) 4795 .allPrivileges().exceptUserMode(); 4796 InitReg(MISCREG_ICC_AP1R2_S) 4797 .allPrivileges().exceptUserMode(); 4798 InitReg(MISCREG_ICC_AP1R3) 4799 .allPrivileges().exceptUserMode(); 4800 InitReg(MISCREG_ICC_AP1R3_NS) 4801 .allPrivileges().exceptUserMode(); 4802 InitReg(MISCREG_ICC_AP1R3_S) 4803 .allPrivileges().exceptUserMode(); 4804 InitReg(MISCREG_ICC_ASGI1R) 4805 .allPrivileges().exceptUserMode().reads(0); 4806 InitReg(MISCREG_ICC_BPR0) 4807 .allPrivileges().exceptUserMode(); 4808 InitReg(MISCREG_ICC_BPR1) 4809 .allPrivileges().exceptUserMode(); 4810 InitReg(MISCREG_ICC_BPR1_NS) 4811 .allPrivileges().exceptUserMode(); 4812 InitReg(MISCREG_ICC_BPR1_S) 4813 .allPrivileges().exceptUserMode(); 4814 InitReg(MISCREG_ICC_CTLR) 4815 .allPrivileges().exceptUserMode(); 4816 InitReg(MISCREG_ICC_CTLR_NS) 4817 .allPrivileges().exceptUserMode(); 4818 InitReg(MISCREG_ICC_CTLR_S) 4819 .allPrivileges().exceptUserMode(); 4820 InitReg(MISCREG_ICC_DIR) 4821 .allPrivileges().exceptUserMode().reads(0); 4822 InitReg(MISCREG_ICC_EOIR0) 4823 .allPrivileges().exceptUserMode().reads(0); 4824 InitReg(MISCREG_ICC_EOIR1) 4825 .allPrivileges().exceptUserMode().reads(0); 4826 InitReg(MISCREG_ICC_HPPIR0) 4827 .allPrivileges().exceptUserMode().writes(0); 4828 InitReg(MISCREG_ICC_HPPIR1) 4829 .allPrivileges().exceptUserMode().writes(0); 4830 InitReg(MISCREG_ICC_HSRE) 4831 .allPrivileges().exceptUserMode(); 4832 InitReg(MISCREG_ICC_IAR0) 4833 .allPrivileges().exceptUserMode().writes(0); 4834 InitReg(MISCREG_ICC_IAR1) 4835 .allPrivileges().exceptUserMode().writes(0); 4836 InitReg(MISCREG_ICC_IGRPEN0) 4837 .allPrivileges().exceptUserMode(); 4838 InitReg(MISCREG_ICC_IGRPEN1) 4839 .allPrivileges().exceptUserMode(); 4840 InitReg(MISCREG_ICC_IGRPEN1_NS) 4841 .allPrivileges().exceptUserMode(); 4842 InitReg(MISCREG_ICC_IGRPEN1_S) 4843 .allPrivileges().exceptUserMode(); 4844 InitReg(MISCREG_ICC_MCTLR) 4845 .allPrivileges().exceptUserMode(); 4846 InitReg(MISCREG_ICC_MGRPEN1) 4847 .allPrivileges().exceptUserMode(); 4848 InitReg(MISCREG_ICC_MSRE) 4849 .allPrivileges().exceptUserMode(); 4850 InitReg(MISCREG_ICC_PMR) 4851 .allPrivileges().exceptUserMode(); 4852 InitReg(MISCREG_ICC_RPR) 4853 .allPrivileges().exceptUserMode().writes(0); 4854 InitReg(MISCREG_ICC_SGI0R) 4855 .allPrivileges().exceptUserMode().reads(0); 4856 InitReg(MISCREG_ICC_SGI1R) 4857 .allPrivileges().exceptUserMode().reads(0); 4858 InitReg(MISCREG_ICC_SRE) 4859 .allPrivileges().exceptUserMode(); 4860 InitReg(MISCREG_ICC_SRE_NS) 4861 .allPrivileges().exceptUserMode(); 4862 InitReg(MISCREG_ICC_SRE_S) 4863 .allPrivileges().exceptUserMode(); 4864 4865 InitReg(MISCREG_ICH_AP0R0) 4866 .hyp().mon(); 4867 InitReg(MISCREG_ICH_AP0R1) 4868 .hyp().mon(); 4869 InitReg(MISCREG_ICH_AP0R2) 4870 .hyp().mon(); 4871 InitReg(MISCREG_ICH_AP0R3) 4872 .hyp().mon(); 4873 InitReg(MISCREG_ICH_AP1R0) 4874 .hyp().mon(); 4875 InitReg(MISCREG_ICH_AP1R1) 4876 .hyp().mon(); 4877 InitReg(MISCREG_ICH_AP1R2) 4878 .hyp().mon(); 4879 InitReg(MISCREG_ICH_AP1R3) 4880 .hyp().mon(); 4881 InitReg(MISCREG_ICH_HCR) 4882 .hyp().mon(); 4883 InitReg(MISCREG_ICH_VTR) 4884 .hyp().mon().writes(0); 4885 InitReg(MISCREG_ICH_MISR) 4886 .hyp().mon().writes(0); 4887 InitReg(MISCREG_ICH_EISR) 4888 .hyp().mon().writes(0); 4889 InitReg(MISCREG_ICH_ELRSR) 4890 .hyp().mon().writes(0); 4891 InitReg(MISCREG_ICH_VMCR) 4892 .hyp().mon(); 4893 InitReg(MISCREG_ICH_LR0) 4894 .hyp().mon(); 4895 InitReg(MISCREG_ICH_LR1) 4896 .hyp().mon(); 4897 InitReg(MISCREG_ICH_LR2) 4898 .hyp().mon(); 4899 InitReg(MISCREG_ICH_LR3) 4900 .hyp().mon(); 4901 InitReg(MISCREG_ICH_LR4) 4902 .hyp().mon(); 4903 InitReg(MISCREG_ICH_LR5) 4904 .hyp().mon(); 4905 InitReg(MISCREG_ICH_LR6) 4906 .hyp().mon(); 4907 InitReg(MISCREG_ICH_LR7) 4908 .hyp().mon(); 4909 InitReg(MISCREG_ICH_LR8) 4910 .hyp().mon(); 4911 InitReg(MISCREG_ICH_LR9) 4912 .hyp().mon(); 4913 InitReg(MISCREG_ICH_LR10) 4914 .hyp().mon(); 4915 InitReg(MISCREG_ICH_LR11) 4916 .hyp().mon(); 4917 InitReg(MISCREG_ICH_LR12) 4918 .hyp().mon(); 4919 InitReg(MISCREG_ICH_LR13) 4920 .hyp().mon(); 4921 InitReg(MISCREG_ICH_LR14) 4922 .hyp().mon(); 4923 InitReg(MISCREG_ICH_LR15) 4924 .hyp().mon(); 4925 InitReg(MISCREG_ICH_LRC0) 4926 .mapsTo(MISCREG_ICH_LR0) 4927 .hyp().mon(); 4928 InitReg(MISCREG_ICH_LRC1) 4929 .mapsTo(MISCREG_ICH_LR1) 4930 .hyp().mon(); 4931 InitReg(MISCREG_ICH_LRC2) 4932 .mapsTo(MISCREG_ICH_LR2) 4933 .hyp().mon(); 4934 InitReg(MISCREG_ICH_LRC3) 4935 .mapsTo(MISCREG_ICH_LR3) 4936 .hyp().mon(); 4937 InitReg(MISCREG_ICH_LRC4) 4938 .mapsTo(MISCREG_ICH_LR4) 4939 .hyp().mon(); 4940 InitReg(MISCREG_ICH_LRC5) 4941 .mapsTo(MISCREG_ICH_LR5) 4942 .hyp().mon(); 4943 InitReg(MISCREG_ICH_LRC6) 4944 .mapsTo(MISCREG_ICH_LR6) 4945 .hyp().mon(); 4946 InitReg(MISCREG_ICH_LRC7) 4947 .mapsTo(MISCREG_ICH_LR7) 4948 .hyp().mon(); 4949 InitReg(MISCREG_ICH_LRC8) 4950 .mapsTo(MISCREG_ICH_LR8) 4951 .hyp().mon(); 4952 InitReg(MISCREG_ICH_LRC9) 4953 .mapsTo(MISCREG_ICH_LR9) 4954 .hyp().mon(); 4955 InitReg(MISCREG_ICH_LRC10) 4956 .mapsTo(MISCREG_ICH_LR10) 4957 .hyp().mon(); 4958 InitReg(MISCREG_ICH_LRC11) 4959 .mapsTo(MISCREG_ICH_LR11) 4960 .hyp().mon(); 4961 InitReg(MISCREG_ICH_LRC12) 4962 .mapsTo(MISCREG_ICH_LR12) 4963 .hyp().mon(); 4964 InitReg(MISCREG_ICH_LRC13) 4965 .mapsTo(MISCREG_ICH_LR13) 4966 .hyp().mon(); 4967 InitReg(MISCREG_ICH_LRC14) 4968 .mapsTo(MISCREG_ICH_LR14) 4969 .hyp().mon(); 4970 InitReg(MISCREG_ICH_LRC15) 4971 .mapsTo(MISCREG_ICH_LR15) 4972 .hyp().mon(); 4973 4974 InitReg(MISCREG_CNTHV_CTL_EL2) 4975 .mon().hyp(); 4976 InitReg(MISCREG_CNTHV_CVAL_EL2) 4977 .mon().hyp(); 4978 InitReg(MISCREG_CNTHV_TVAL_EL2) 4979 .mon().hyp(); 4980 4981 // SVE 4982 InitReg(MISCREG_ID_AA64ZFR0_EL1) 4983 .allPrivileges().exceptUserMode().writes(0); 4984 InitReg(MISCREG_ZCR_EL3) 4985 .mon(); 4986 InitReg(MISCREG_ZCR_EL2) 4987 .hyp().mon(); 4988 InitReg(MISCREG_ZCR_EL12) 4989 .unimplemented().warnNotFail(); 4990 InitReg(MISCREG_ZCR_EL1) 4991 .allPrivileges().exceptUserMode(); 4992 4993 // Dummy registers 4994 InitReg(MISCREG_NOP) 4995 .allPrivileges(); 4996 InitReg(MISCREG_RAZ) 4997 .allPrivileges().exceptUserMode().writes(0); 4998 InitReg(MISCREG_CP14_UNIMPL) 4999 .unimplemented() 5000 .warnNotFail(); 5001 InitReg(MISCREG_CP15_UNIMPL) 5002 .unimplemented() 5003 .warnNotFail(); 5004 InitReg(MISCREG_UNKNOWN); 5005 InitReg(MISCREG_IMPDEF_UNIMPL) 5006 .unimplemented() 5007 .warnNotFail(impdefAsNop); 5008 5009 // RAS extension (unimplemented) 5010 InitReg(MISCREG_ERRIDR_EL1) 5011 .unimplemented() 5012 .warnNotFail(); 5013 InitReg(MISCREG_ERRSELR_EL1) 5014 .unimplemented() 5015 .warnNotFail(); 5016 InitReg(MISCREG_ERXFR_EL1) 5017 .unimplemented() 5018 .warnNotFail(); 5019 InitReg(MISCREG_ERXCTLR_EL1) 5020 .unimplemented() 5021 .warnNotFail(); 5022 InitReg(MISCREG_ERXSTATUS_EL1) 5023 .unimplemented() 5024 .warnNotFail(); 5025 InitReg(MISCREG_ERXADDR_EL1) 5026 .unimplemented() 5027 .warnNotFail(); 5028 InitReg(MISCREG_ERXMISC0_EL1) 5029 .unimplemented() 5030 .warnNotFail(); 5031 InitReg(MISCREG_ERXMISC1_EL1) 5032 .unimplemented() 5033 .warnNotFail(); 5034 InitReg(MISCREG_DISR_EL1) 5035 .unimplemented() 5036 .warnNotFail(); 5037 InitReg(MISCREG_VSESR_EL2) 5038 .unimplemented() 5039 .warnNotFail(); 5040 InitReg(MISCREG_VDISR_EL2) 5041 .unimplemented() 5042 .warnNotFail(); 5043 5044 // Register mappings for some unimplemented registers: 5045 // ESR_EL1 -> DFSR 5046 // RMR_EL1 -> RMR 5047 // RMR_EL2 -> HRMR 5048 // DBGDTR_EL0 -> DBGDTR{R or T}Xint 5049 // DBGDTRRX_EL0 -> DBGDTRRXint 5050 // DBGDTRTX_EL0 -> DBGDTRRXint 5051 // MDCR_EL3 -> SDCR, NAM D7-2108 (the latter is unimpl. in gem5) 5052 5053 completed = true; 5054} 5055 5056} // namespace ArmISA 5057