miscregs.cc revision 8902
17259Sgblack@eecs.umich.edu/* 28868SMatt.Horsnell@arm.com * Copyright (c) 2010-2012 ARM Limited 37259Sgblack@eecs.umich.edu * All rights reserved 47259Sgblack@eecs.umich.edu * 57259Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall 67259Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual 77259Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating 87259Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software 97259Sgblack@eecs.umich.edu * licensed hereunder. You may use the software subject to the license 107259Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated 117259Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software, 127259Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form. 137259Sgblack@eecs.umich.edu * 147259Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 157259Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 167259Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 177259Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 187259Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 197259Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 207259Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 217259Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 227259Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 237259Sgblack@eecs.umich.edu * this software without specific prior written permission. 247259Sgblack@eecs.umich.edu * 257259Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 267259Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 277259Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 287259Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 297259Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 307259Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 317259Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 327259Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 337259Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 347259Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 357259Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 367259Sgblack@eecs.umich.edu * 377259Sgblack@eecs.umich.edu * Authors: Gabe Black 387405SAli.Saidi@ARM.com * Ali Saidi 397259Sgblack@eecs.umich.edu */ 407259Sgblack@eecs.umich.edu 417405SAli.Saidi@ARM.com#include "arch/arm/isa.hh" 427259Sgblack@eecs.umich.edu#include "arch/arm/miscregs.hh" 437404SAli.Saidi@ARM.com#include "base/misc.hh" 447259Sgblack@eecs.umich.edu 457259Sgblack@eecs.umich.edunamespace ArmISA 467259Sgblack@eecs.umich.edu{ 477259Sgblack@eecs.umich.edu 487259Sgblack@eecs.umich.eduMiscRegIndex 498868SMatt.Horsnell@arm.comdecodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2) 508868SMatt.Horsnell@arm.com{ 518868SMatt.Horsnell@arm.com switch(crn) { 528868SMatt.Horsnell@arm.com case 0: 538868SMatt.Horsnell@arm.com switch (opc2) { 548868SMatt.Horsnell@arm.com case 0: 558868SMatt.Horsnell@arm.com switch (crm) { 568868SMatt.Horsnell@arm.com case 0: 578868SMatt.Horsnell@arm.com return MISCREG_DBGDIDR; 588868SMatt.Horsnell@arm.com case 1: 598868SMatt.Horsnell@arm.com return MISCREG_DBGDSCR_INT; 608868SMatt.Horsnell@arm.com default: 618868SMatt.Horsnell@arm.com warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]", 628868SMatt.Horsnell@arm.com crn, opc1, crm, opc2); 638868SMatt.Horsnell@arm.com return NUM_MISCREGS; 648868SMatt.Horsnell@arm.com } 658868SMatt.Horsnell@arm.com default: 668868SMatt.Horsnell@arm.com warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]", 678868SMatt.Horsnell@arm.com crn, opc1, crm, opc2); 688868SMatt.Horsnell@arm.com return NUM_MISCREGS; 698868SMatt.Horsnell@arm.com } 708868SMatt.Horsnell@arm.com default: 718868SMatt.Horsnell@arm.com warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]", 728868SMatt.Horsnell@arm.com crn, opc1, crm, opc2); 738868SMatt.Horsnell@arm.com return NUM_MISCREGS; 748868SMatt.Horsnell@arm.com } 758868SMatt.Horsnell@arm.com 768868SMatt.Horsnell@arm.com} 778868SMatt.Horsnell@arm.com 788868SMatt.Horsnell@arm.comMiscRegIndex 797259Sgblack@eecs.umich.edudecodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2) 807259Sgblack@eecs.umich.edu{ 817259Sgblack@eecs.umich.edu switch (crn) { 827259Sgblack@eecs.umich.edu case 0: 837259Sgblack@eecs.umich.edu switch (opc1) { 847259Sgblack@eecs.umich.edu case 0: 857259Sgblack@eecs.umich.edu switch (crm) { 867259Sgblack@eecs.umich.edu case 0: 877259Sgblack@eecs.umich.edu switch (opc2) { 887259Sgblack@eecs.umich.edu case 1: 897259Sgblack@eecs.umich.edu return MISCREG_CTR; 907259Sgblack@eecs.umich.edu case 2: 917259Sgblack@eecs.umich.edu return MISCREG_TCMTR; 927351Sgblack@eecs.umich.edu case 3: 937351Sgblack@eecs.umich.edu return MISCREG_TLBTR; 947259Sgblack@eecs.umich.edu case 5: 957259Sgblack@eecs.umich.edu return MISCREG_MPIDR; 967259Sgblack@eecs.umich.edu default: 977259Sgblack@eecs.umich.edu return MISCREG_MIDR; 987259Sgblack@eecs.umich.edu } 997259Sgblack@eecs.umich.edu break; 1007259Sgblack@eecs.umich.edu case 1: 1017259Sgblack@eecs.umich.edu switch (opc2) { 1027259Sgblack@eecs.umich.edu case 0: 1037259Sgblack@eecs.umich.edu return MISCREG_ID_PFR0; 1047259Sgblack@eecs.umich.edu case 1: 1057259Sgblack@eecs.umich.edu return MISCREG_ID_PFR1; 1067259Sgblack@eecs.umich.edu case 2: 1077259Sgblack@eecs.umich.edu return MISCREG_ID_DFR0; 1087259Sgblack@eecs.umich.edu case 3: 1097259Sgblack@eecs.umich.edu return MISCREG_ID_AFR0; 1107259Sgblack@eecs.umich.edu case 4: 1117259Sgblack@eecs.umich.edu return MISCREG_ID_MMFR0; 1127259Sgblack@eecs.umich.edu case 5: 1137259Sgblack@eecs.umich.edu return MISCREG_ID_MMFR1; 1147259Sgblack@eecs.umich.edu case 6: 1157259Sgblack@eecs.umich.edu return MISCREG_ID_MMFR2; 1167259Sgblack@eecs.umich.edu case 7: 1177259Sgblack@eecs.umich.edu return MISCREG_ID_MMFR3; 1187259Sgblack@eecs.umich.edu } 1197259Sgblack@eecs.umich.edu break; 1207259Sgblack@eecs.umich.edu case 2: 1217259Sgblack@eecs.umich.edu switch (opc2) { 1227259Sgblack@eecs.umich.edu case 0: 1237259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR0; 1247259Sgblack@eecs.umich.edu case 1: 1257259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR1; 1267259Sgblack@eecs.umich.edu case 2: 1277259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR2; 1287259Sgblack@eecs.umich.edu case 3: 1297259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR3; 1307259Sgblack@eecs.umich.edu case 4: 1317259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR4; 1327259Sgblack@eecs.umich.edu case 5: 1337259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR5; 1347259Sgblack@eecs.umich.edu case 6: 1357259Sgblack@eecs.umich.edu case 7: 1367259Sgblack@eecs.umich.edu return MISCREG_RAZ; // read as zero 1377259Sgblack@eecs.umich.edu } 1387259Sgblack@eecs.umich.edu break; 1397259Sgblack@eecs.umich.edu default: 1407259Sgblack@eecs.umich.edu return MISCREG_RAZ; // read as zero 1417259Sgblack@eecs.umich.edu } 1427259Sgblack@eecs.umich.edu break; 1437259Sgblack@eecs.umich.edu case 1: 1447259Sgblack@eecs.umich.edu if (crm == 0) { 1457259Sgblack@eecs.umich.edu switch (opc2) { 1467259Sgblack@eecs.umich.edu case 0: 1477259Sgblack@eecs.umich.edu return MISCREG_CCSIDR; 1487259Sgblack@eecs.umich.edu case 1: 1497259Sgblack@eecs.umich.edu return MISCREG_CLIDR; 1507259Sgblack@eecs.umich.edu case 7: 1517259Sgblack@eecs.umich.edu return MISCREG_AIDR; 1527259Sgblack@eecs.umich.edu } 1537259Sgblack@eecs.umich.edu } 1547259Sgblack@eecs.umich.edu break; 1557259Sgblack@eecs.umich.edu case 2: 1567259Sgblack@eecs.umich.edu if (crm == 0 && opc2 == 0) { 1577259Sgblack@eecs.umich.edu return MISCREG_CSSELR; 1587259Sgblack@eecs.umich.edu } 1597259Sgblack@eecs.umich.edu break; 1607259Sgblack@eecs.umich.edu } 1617259Sgblack@eecs.umich.edu break; 1627259Sgblack@eecs.umich.edu case 1: 1637351Sgblack@eecs.umich.edu if (opc1 == 0) { 1647351Sgblack@eecs.umich.edu if (crm == 0) { 1657351Sgblack@eecs.umich.edu switch (opc2) { 1667351Sgblack@eecs.umich.edu case 0: 1677351Sgblack@eecs.umich.edu return MISCREG_SCTLR; 1687351Sgblack@eecs.umich.edu case 1: 1697351Sgblack@eecs.umich.edu return MISCREG_ACTLR; 1707351Sgblack@eecs.umich.edu case 0x2: 1717351Sgblack@eecs.umich.edu return MISCREG_CPACR; 1727351Sgblack@eecs.umich.edu } 1737351Sgblack@eecs.umich.edu } else if (crm == 1) { 1747351Sgblack@eecs.umich.edu switch (opc2) { 1757351Sgblack@eecs.umich.edu case 0: 1767351Sgblack@eecs.umich.edu return MISCREG_SCR; 1777351Sgblack@eecs.umich.edu case 1: 1787351Sgblack@eecs.umich.edu return MISCREG_SDER; 1797351Sgblack@eecs.umich.edu case 2: 1807351Sgblack@eecs.umich.edu return MISCREG_NSACR; 1817351Sgblack@eecs.umich.edu } 1827351Sgblack@eecs.umich.edu } 1837351Sgblack@eecs.umich.edu } 1847351Sgblack@eecs.umich.edu break; 1857351Sgblack@eecs.umich.edu case 2: 1867406SAli.Saidi@ARM.com if (opc1 == 0 && crm == 0) { 1877259Sgblack@eecs.umich.edu switch (opc2) { 1887259Sgblack@eecs.umich.edu case 0: 1897351Sgblack@eecs.umich.edu return MISCREG_TTBR0; 1907259Sgblack@eecs.umich.edu case 1: 1917351Sgblack@eecs.umich.edu return MISCREG_TTBR1; 1927351Sgblack@eecs.umich.edu case 2: 1937351Sgblack@eecs.umich.edu return MISCREG_TTBCR; 1947259Sgblack@eecs.umich.edu } 1957259Sgblack@eecs.umich.edu } 1967259Sgblack@eecs.umich.edu break; 1977351Sgblack@eecs.umich.edu case 3: 1987351Sgblack@eecs.umich.edu if (opc1 == 0 && crm == 0 && opc2 == 0) { 1997351Sgblack@eecs.umich.edu return MISCREG_DACR; 2007351Sgblack@eecs.umich.edu } 2017351Sgblack@eecs.umich.edu break; 2027259Sgblack@eecs.umich.edu case 5: 2037259Sgblack@eecs.umich.edu if (opc1 == 0) { 2047259Sgblack@eecs.umich.edu if (crm == 0) { 2057259Sgblack@eecs.umich.edu if (opc2 == 0) { 2067259Sgblack@eecs.umich.edu return MISCREG_DFSR; 2077259Sgblack@eecs.umich.edu } else if (opc2 == 1) { 2087259Sgblack@eecs.umich.edu return MISCREG_IFSR; 2097259Sgblack@eecs.umich.edu } 2107259Sgblack@eecs.umich.edu } else if (crm == 1) { 2117259Sgblack@eecs.umich.edu if (opc2 == 0) { 2127259Sgblack@eecs.umich.edu return MISCREG_ADFSR; 2137259Sgblack@eecs.umich.edu } else if (opc2 == 1) { 2147259Sgblack@eecs.umich.edu return MISCREG_AIFSR; 2157259Sgblack@eecs.umich.edu } 2167259Sgblack@eecs.umich.edu } 2177259Sgblack@eecs.umich.edu } 2187259Sgblack@eecs.umich.edu break; 2197259Sgblack@eecs.umich.edu case 6: 2207351Sgblack@eecs.umich.edu if (opc1 == 0 && crm == 0) { 2217351Sgblack@eecs.umich.edu switch (opc2) { 2227259Sgblack@eecs.umich.edu case 0: 2237351Sgblack@eecs.umich.edu return MISCREG_DFAR; 2247259Sgblack@eecs.umich.edu case 2: 2257351Sgblack@eecs.umich.edu return MISCREG_IFAR; 2267259Sgblack@eecs.umich.edu } 2277259Sgblack@eecs.umich.edu } 2287259Sgblack@eecs.umich.edu break; 2297259Sgblack@eecs.umich.edu case 7: 2307259Sgblack@eecs.umich.edu if (opc1 == 0) { 2317259Sgblack@eecs.umich.edu switch (crm) { 2327259Sgblack@eecs.umich.edu case 0: 2337259Sgblack@eecs.umich.edu if (opc2 == 4) { 2347259Sgblack@eecs.umich.edu return MISCREG_NOP; 2357259Sgblack@eecs.umich.edu } 2367259Sgblack@eecs.umich.edu break; 2377259Sgblack@eecs.umich.edu case 1: 2387259Sgblack@eecs.umich.edu switch (opc2) { 2397259Sgblack@eecs.umich.edu case 0: 2407259Sgblack@eecs.umich.edu return MISCREG_ICIALLUIS; 2417259Sgblack@eecs.umich.edu case 6: 2427259Sgblack@eecs.umich.edu return MISCREG_BPIALLIS; 2437259Sgblack@eecs.umich.edu } 2447259Sgblack@eecs.umich.edu break; 2457351Sgblack@eecs.umich.edu case 4: 2467351Sgblack@eecs.umich.edu if (opc2 == 0) { 2477351Sgblack@eecs.umich.edu return MISCREG_PAR; 2487351Sgblack@eecs.umich.edu } 2497351Sgblack@eecs.umich.edu break; 2507259Sgblack@eecs.umich.edu case 5: 2517259Sgblack@eecs.umich.edu switch (opc2) { 2527259Sgblack@eecs.umich.edu case 0: 2537259Sgblack@eecs.umich.edu return MISCREG_ICIALLU; 2547259Sgblack@eecs.umich.edu case 1: 2557259Sgblack@eecs.umich.edu return MISCREG_ICIMVAU; 2567259Sgblack@eecs.umich.edu case 4: 2577259Sgblack@eecs.umich.edu return MISCREG_CP15ISB; 2587259Sgblack@eecs.umich.edu case 6: 2597259Sgblack@eecs.umich.edu return MISCREG_BPIALL; 2607259Sgblack@eecs.umich.edu case 7: 2617259Sgblack@eecs.umich.edu return MISCREG_BPIMVA; 2627259Sgblack@eecs.umich.edu } 2637259Sgblack@eecs.umich.edu break; 2647259Sgblack@eecs.umich.edu case 6: 2657259Sgblack@eecs.umich.edu if (opc2 == 1) { 2667259Sgblack@eecs.umich.edu return MISCREG_DCIMVAC; 2677259Sgblack@eecs.umich.edu } else if (opc2 == 2) { 2687259Sgblack@eecs.umich.edu return MISCREG_DCISW; 2697259Sgblack@eecs.umich.edu } 2707259Sgblack@eecs.umich.edu break; 2717351Sgblack@eecs.umich.edu case 8: 2727351Sgblack@eecs.umich.edu switch (opc2) { 2737351Sgblack@eecs.umich.edu case 0: 2747351Sgblack@eecs.umich.edu return MISCREG_V2PCWPR; 2757351Sgblack@eecs.umich.edu case 1: 2767351Sgblack@eecs.umich.edu return MISCREG_V2PCWPW; 2777351Sgblack@eecs.umich.edu case 2: 2787351Sgblack@eecs.umich.edu return MISCREG_V2PCWUR; 2797351Sgblack@eecs.umich.edu case 3: 2807351Sgblack@eecs.umich.edu return MISCREG_V2PCWUW; 2817351Sgblack@eecs.umich.edu case 4: 2827351Sgblack@eecs.umich.edu return MISCREG_V2POWPR; 2837351Sgblack@eecs.umich.edu case 5: 2847351Sgblack@eecs.umich.edu return MISCREG_V2POWPW; 2857351Sgblack@eecs.umich.edu case 6: 2867351Sgblack@eecs.umich.edu return MISCREG_V2POWUR; 2877351Sgblack@eecs.umich.edu case 7: 2887351Sgblack@eecs.umich.edu return MISCREG_V2POWUW; 2897351Sgblack@eecs.umich.edu } 2907351Sgblack@eecs.umich.edu break; 2917259Sgblack@eecs.umich.edu case 10: 2927259Sgblack@eecs.umich.edu switch (opc2) { 2937259Sgblack@eecs.umich.edu case 1: 2947259Sgblack@eecs.umich.edu return MISCREG_DCCMVAC; 2957259Sgblack@eecs.umich.edu case 2: 2967259Sgblack@eecs.umich.edu return MISCREG_MCCSW; 2977259Sgblack@eecs.umich.edu case 4: 2987259Sgblack@eecs.umich.edu return MISCREG_CP15DSB; 2997259Sgblack@eecs.umich.edu case 5: 3007259Sgblack@eecs.umich.edu return MISCREG_CP15DMB; 3017259Sgblack@eecs.umich.edu } 3027259Sgblack@eecs.umich.edu break; 3037259Sgblack@eecs.umich.edu case 11: 3047259Sgblack@eecs.umich.edu if (opc2 == 1) { 3057259Sgblack@eecs.umich.edu return MISCREG_DCCMVAU; 3067259Sgblack@eecs.umich.edu } 3077259Sgblack@eecs.umich.edu break; 3087259Sgblack@eecs.umich.edu case 13: 3097259Sgblack@eecs.umich.edu if (opc2 == 1) { 3107259Sgblack@eecs.umich.edu return MISCREG_NOP; 3117259Sgblack@eecs.umich.edu } 3127259Sgblack@eecs.umich.edu break; 3137259Sgblack@eecs.umich.edu case 14: 3147259Sgblack@eecs.umich.edu if (opc2 == 1) { 3157259Sgblack@eecs.umich.edu return MISCREG_DCCIMVAC; 3167259Sgblack@eecs.umich.edu } else if (opc2 == 2) { 3177259Sgblack@eecs.umich.edu return MISCREG_DCCISW; 3187259Sgblack@eecs.umich.edu } 3197259Sgblack@eecs.umich.edu break; 3207259Sgblack@eecs.umich.edu } 3217259Sgblack@eecs.umich.edu } 3227259Sgblack@eecs.umich.edu break; 3237351Sgblack@eecs.umich.edu case 8: 3247351Sgblack@eecs.umich.edu if (opc1 == 0) { 3257351Sgblack@eecs.umich.edu switch (crm) { 3267351Sgblack@eecs.umich.edu case 3: 3277351Sgblack@eecs.umich.edu switch (opc2) { 3287351Sgblack@eecs.umich.edu case 0: 3297351Sgblack@eecs.umich.edu return MISCREG_TLBIALLIS; 3307351Sgblack@eecs.umich.edu case 1: 3317351Sgblack@eecs.umich.edu return MISCREG_TLBIMVAIS; 3327351Sgblack@eecs.umich.edu case 2: 3337351Sgblack@eecs.umich.edu return MISCREG_TLBIASIDIS; 3347351Sgblack@eecs.umich.edu case 3: 3357351Sgblack@eecs.umich.edu return MISCREG_TLBIMVAAIS; 3367351Sgblack@eecs.umich.edu } 3377351Sgblack@eecs.umich.edu break; 3387351Sgblack@eecs.umich.edu case 5: 3397351Sgblack@eecs.umich.edu switch (opc2) { 3407351Sgblack@eecs.umich.edu case 0: 3417351Sgblack@eecs.umich.edu return MISCREG_ITLBIALL; 3427351Sgblack@eecs.umich.edu case 1: 3437351Sgblack@eecs.umich.edu return MISCREG_ITLBIMVA; 3447351Sgblack@eecs.umich.edu case 2: 3457351Sgblack@eecs.umich.edu return MISCREG_ITLBIASID; 3467351Sgblack@eecs.umich.edu } 3477351Sgblack@eecs.umich.edu break; 3487351Sgblack@eecs.umich.edu case 6: 3497351Sgblack@eecs.umich.edu switch (opc2) { 3507351Sgblack@eecs.umich.edu case 0: 3517351Sgblack@eecs.umich.edu return MISCREG_DTLBIALL; 3527351Sgblack@eecs.umich.edu case 1: 3537351Sgblack@eecs.umich.edu return MISCREG_DTLBIMVA; 3547351Sgblack@eecs.umich.edu case 2: 3557351Sgblack@eecs.umich.edu return MISCREG_DTLBIASID; 3567351Sgblack@eecs.umich.edu } 3577351Sgblack@eecs.umich.edu break; 3587351Sgblack@eecs.umich.edu case 7: 3597351Sgblack@eecs.umich.edu switch (opc2) { 3607351Sgblack@eecs.umich.edu case 0: 3617351Sgblack@eecs.umich.edu return MISCREG_TLBIALL; 3627351Sgblack@eecs.umich.edu case 1: 3637351Sgblack@eecs.umich.edu return MISCREG_TLBIMVA; 3647351Sgblack@eecs.umich.edu case 2: 3657351Sgblack@eecs.umich.edu return MISCREG_TLBIASID; 3667351Sgblack@eecs.umich.edu case 3: 3677351Sgblack@eecs.umich.edu return MISCREG_TLBIMVAA; 3687351Sgblack@eecs.umich.edu } 3697351Sgblack@eecs.umich.edu break; 3707351Sgblack@eecs.umich.edu } 3717351Sgblack@eecs.umich.edu } 3727351Sgblack@eecs.umich.edu break; 3737259Sgblack@eecs.umich.edu case 9: 3747583SAli.Saidi@arm.com if (opc1 == 0) { 3757259Sgblack@eecs.umich.edu switch (crm) { 3767259Sgblack@eecs.umich.edu case 12: 3777583SAli.Saidi@arm.com switch (opc2) { 3787583SAli.Saidi@arm.com case 0: 3797583SAli.Saidi@arm.com return MISCREG_PMCR; 3807583SAli.Saidi@arm.com case 1: 3817583SAli.Saidi@arm.com return MISCREG_PMCNTENSET; 3827583SAli.Saidi@arm.com case 2: 3837583SAli.Saidi@arm.com return MISCREG_PMCNTENCLR; 3847583SAli.Saidi@arm.com case 3: 3857583SAli.Saidi@arm.com return MISCREG_PMOVSR; 3867583SAli.Saidi@arm.com case 4: 3877583SAli.Saidi@arm.com return MISCREG_PMSWINC; 3887583SAli.Saidi@arm.com case 5: 3897583SAli.Saidi@arm.com return MISCREG_PMSELR; 3907583SAli.Saidi@arm.com case 6: 3917583SAli.Saidi@arm.com return MISCREG_PMCEID0; 3927583SAli.Saidi@arm.com case 7: 3937583SAli.Saidi@arm.com return MISCREG_PMCEID1; 3947583SAli.Saidi@arm.com } 3957259Sgblack@eecs.umich.edu case 13: 3967583SAli.Saidi@arm.com switch (opc2) { 3977583SAli.Saidi@arm.com case 0: 3987583SAli.Saidi@arm.com return MISCREG_PMCCNTR; 3997583SAli.Saidi@arm.com case 1: 4007583SAli.Saidi@arm.com return MISCREG_PMC_OTHER; 4017583SAli.Saidi@arm.com case 2: 4027583SAli.Saidi@arm.com return MISCREG_PMXEVCNTR; 4037583SAli.Saidi@arm.com } 4047259Sgblack@eecs.umich.edu case 14: 4057583SAli.Saidi@arm.com switch (opc2) { 4067583SAli.Saidi@arm.com case 0: 4077583SAli.Saidi@arm.com return MISCREG_PMUSERENR; 4087583SAli.Saidi@arm.com case 1: 4097583SAli.Saidi@arm.com return MISCREG_PMINTENSET; 4107583SAli.Saidi@arm.com case 2: 4117583SAli.Saidi@arm.com return MISCREG_PMINTENCLR; 4127583SAli.Saidi@arm.com } 4137259Sgblack@eecs.umich.edu } 4148058SAli.Saidi@ARM.com } else if (opc1 == 1) { 4158549Sdaniel.johnson@arm.com switch (crm) { 4168549Sdaniel.johnson@arm.com case 0: 4178549Sdaniel.johnson@arm.com switch (opc2) { 4188549Sdaniel.johnson@arm.com case 2: // L2CTLR, L2 Control Register 4198549Sdaniel.johnson@arm.com return MISCREG_L2CTLR; 4208549Sdaniel.johnson@arm.com default: 4218549Sdaniel.johnson@arm.com warn("Uknown miscregs: crn:%d crm:%d opc1:%d opc2:%d\n", 4228549Sdaniel.johnson@arm.com crn,crm, opc1,opc2); 4238549Sdaniel.johnson@arm.com break; 4248549Sdaniel.johnson@arm.com } 4258549Sdaniel.johnson@arm.com default: 4268549Sdaniel.johnson@arm.com return MISCREG_L2LATENCY; 4278549Sdaniel.johnson@arm.com } 4287259Sgblack@eecs.umich.edu } 4297583SAli.Saidi@arm.com //Reserved for Branch Predictor, Cache and TCM operations 4307259Sgblack@eecs.umich.edu break; 4317351Sgblack@eecs.umich.edu case 10: 4327351Sgblack@eecs.umich.edu if (opc1 == 0) { 4337351Sgblack@eecs.umich.edu // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown 4347351Sgblack@eecs.umich.edu if (crm == 2) { // TEX Remap Registers 4357351Sgblack@eecs.umich.edu if (opc2 == 0) { 4367351Sgblack@eecs.umich.edu return MISCREG_PRRR; 4377351Sgblack@eecs.umich.edu } else if (opc2 == 1) { 4387351Sgblack@eecs.umich.edu return MISCREG_NMRR; 4397351Sgblack@eecs.umich.edu } 4407351Sgblack@eecs.umich.edu } 4417351Sgblack@eecs.umich.edu } 4427351Sgblack@eecs.umich.edu break; 4437259Sgblack@eecs.umich.edu case 11: 4448737Skoansin.tan@gmail.com if (opc1 <=7) { 4457259Sgblack@eecs.umich.edu switch (crm) { 4467259Sgblack@eecs.umich.edu case 0: 4477259Sgblack@eecs.umich.edu case 1: 4487259Sgblack@eecs.umich.edu case 2: 4497259Sgblack@eecs.umich.edu case 3: 4507259Sgblack@eecs.umich.edu case 4: 4517259Sgblack@eecs.umich.edu case 5: 4527259Sgblack@eecs.umich.edu case 6: 4537259Sgblack@eecs.umich.edu case 7: 4547259Sgblack@eecs.umich.edu case 8: 4557259Sgblack@eecs.umich.edu case 15: 4567259Sgblack@eecs.umich.edu // Reserved for DMA operations for TCM access 4577259Sgblack@eecs.umich.edu break; 4587259Sgblack@eecs.umich.edu } 4597259Sgblack@eecs.umich.edu } 4607259Sgblack@eecs.umich.edu break; 4617351Sgblack@eecs.umich.edu case 12: 4627351Sgblack@eecs.umich.edu if (opc1 == 0) { 4637351Sgblack@eecs.umich.edu if (crm == 0) { 4647351Sgblack@eecs.umich.edu if (opc2 == 0) { 4657351Sgblack@eecs.umich.edu return MISCREG_VBAR; 4667351Sgblack@eecs.umich.edu } else if (opc2 == 1) { 4677351Sgblack@eecs.umich.edu return MISCREG_MVBAR; 4687351Sgblack@eecs.umich.edu } 4697351Sgblack@eecs.umich.edu } else if (crm == 1) { 4707351Sgblack@eecs.umich.edu if (opc2 == 0) { 4717351Sgblack@eecs.umich.edu return MISCREG_ISR; 4727351Sgblack@eecs.umich.edu } 4737351Sgblack@eecs.umich.edu } 4747351Sgblack@eecs.umich.edu } 4757351Sgblack@eecs.umich.edu break; 4767259Sgblack@eecs.umich.edu case 13: 4777259Sgblack@eecs.umich.edu if (opc1 == 0) { 4787259Sgblack@eecs.umich.edu if (crm == 0) { 4797406SAli.Saidi@ARM.com switch (opc2) { 4807351Sgblack@eecs.umich.edu case 0: 4817351Sgblack@eecs.umich.edu return MISCREG_FCEIDR; 4827259Sgblack@eecs.umich.edu case 1: 4837259Sgblack@eecs.umich.edu return MISCREG_CONTEXTIDR; 4847259Sgblack@eecs.umich.edu case 2: 4857259Sgblack@eecs.umich.edu return MISCREG_TPIDRURW; 4867259Sgblack@eecs.umich.edu case 3: 4877259Sgblack@eecs.umich.edu return MISCREG_TPIDRURO; 4887259Sgblack@eecs.umich.edu case 4: 4897259Sgblack@eecs.umich.edu return MISCREG_TPIDRPRW; 4907259Sgblack@eecs.umich.edu } 4917259Sgblack@eecs.umich.edu } 4927259Sgblack@eecs.umich.edu } 4937259Sgblack@eecs.umich.edu break; 4947259Sgblack@eecs.umich.edu case 15: 4957259Sgblack@eecs.umich.edu // Implementation defined 4968550SChander.Sudanthi@ARM.com return MISCREG_CRN15; 4977259Sgblack@eecs.umich.edu } 4987259Sgblack@eecs.umich.edu // Unrecognized register 4997259Sgblack@eecs.umich.edu return NUM_MISCREGS; 5007259Sgblack@eecs.umich.edu} 5017259Sgblack@eecs.umich.edu 5028902Sandreas.hansson@arm.com} 503