miscregs.cc revision 9959
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: 669959Schander.sudanthi@arm.com warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]", 679959Schander.sudanthi@arm.com crn, opc1, crm, opc2); 689959Schander.sudanthi@arm.com return NUM_MISCREGS; 699959Schander.sudanthi@arm.com } 709959Schander.sudanthi@arm.com case 1: 719959Schander.sudanthi@arm.com switch (opc1) { 729959Schander.sudanthi@arm.com case 6: 739959Schander.sudanthi@arm.com switch (crm) { 749959Schander.sudanthi@arm.com case 0: 759959Schander.sudanthi@arm.com switch (opc2) { 769959Schander.sudanthi@arm.com case 0: 779959Schander.sudanthi@arm.com return MISCREG_TEEHBR; 789959Schander.sudanthi@arm.com default: 799959Schander.sudanthi@arm.com warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]", 809959Schander.sudanthi@arm.com crn, opc1, crm, opc2); 819959Schander.sudanthi@arm.com return NUM_MISCREGS; 829959Schander.sudanthi@arm.com } 839959Schander.sudanthi@arm.com default: 848868SMatt.Horsnell@arm.com warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]", 858868SMatt.Horsnell@arm.com crn, opc1, crm, opc2); 868868SMatt.Horsnell@arm.com return NUM_MISCREGS; 879959Schander.sudanthi@arm.com } 889959Schander.sudanthi@arm.com default: 899959Schander.sudanthi@arm.com warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]", 909959Schander.sudanthi@arm.com crn, opc1, crm, opc2); 919959Schander.sudanthi@arm.com return NUM_MISCREGS; 928868SMatt.Horsnell@arm.com } 938868SMatt.Horsnell@arm.com default: 948868SMatt.Horsnell@arm.com warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]", 958868SMatt.Horsnell@arm.com crn, opc1, crm, opc2); 968868SMatt.Horsnell@arm.com return NUM_MISCREGS; 978868SMatt.Horsnell@arm.com } 988868SMatt.Horsnell@arm.com 998868SMatt.Horsnell@arm.com} 1008868SMatt.Horsnell@arm.com 1018868SMatt.Horsnell@arm.comMiscRegIndex 1027259Sgblack@eecs.umich.edudecodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2) 1037259Sgblack@eecs.umich.edu{ 1047259Sgblack@eecs.umich.edu switch (crn) { 1057259Sgblack@eecs.umich.edu case 0: 1067259Sgblack@eecs.umich.edu switch (opc1) { 1077259Sgblack@eecs.umich.edu case 0: 1087259Sgblack@eecs.umich.edu switch (crm) { 1097259Sgblack@eecs.umich.edu case 0: 1107259Sgblack@eecs.umich.edu switch (opc2) { 1117259Sgblack@eecs.umich.edu case 1: 1127259Sgblack@eecs.umich.edu return MISCREG_CTR; 1137259Sgblack@eecs.umich.edu case 2: 1147259Sgblack@eecs.umich.edu return MISCREG_TCMTR; 1157351Sgblack@eecs.umich.edu case 3: 1167351Sgblack@eecs.umich.edu return MISCREG_TLBTR; 1177259Sgblack@eecs.umich.edu case 5: 1187259Sgblack@eecs.umich.edu return MISCREG_MPIDR; 1197259Sgblack@eecs.umich.edu default: 1207259Sgblack@eecs.umich.edu return MISCREG_MIDR; 1217259Sgblack@eecs.umich.edu } 1227259Sgblack@eecs.umich.edu break; 1237259Sgblack@eecs.umich.edu case 1: 1247259Sgblack@eecs.umich.edu switch (opc2) { 1257259Sgblack@eecs.umich.edu case 0: 1267259Sgblack@eecs.umich.edu return MISCREG_ID_PFR0; 1277259Sgblack@eecs.umich.edu case 1: 1287259Sgblack@eecs.umich.edu return MISCREG_ID_PFR1; 1297259Sgblack@eecs.umich.edu case 2: 1307259Sgblack@eecs.umich.edu return MISCREG_ID_DFR0; 1317259Sgblack@eecs.umich.edu case 3: 1327259Sgblack@eecs.umich.edu return MISCREG_ID_AFR0; 1337259Sgblack@eecs.umich.edu case 4: 1347259Sgblack@eecs.umich.edu return MISCREG_ID_MMFR0; 1357259Sgblack@eecs.umich.edu case 5: 1367259Sgblack@eecs.umich.edu return MISCREG_ID_MMFR1; 1377259Sgblack@eecs.umich.edu case 6: 1387259Sgblack@eecs.umich.edu return MISCREG_ID_MMFR2; 1397259Sgblack@eecs.umich.edu case 7: 1407259Sgblack@eecs.umich.edu return MISCREG_ID_MMFR3; 1417259Sgblack@eecs.umich.edu } 1427259Sgblack@eecs.umich.edu break; 1437259Sgblack@eecs.umich.edu case 2: 1447259Sgblack@eecs.umich.edu switch (opc2) { 1457259Sgblack@eecs.umich.edu case 0: 1467259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR0; 1477259Sgblack@eecs.umich.edu case 1: 1487259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR1; 1497259Sgblack@eecs.umich.edu case 2: 1507259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR2; 1517259Sgblack@eecs.umich.edu case 3: 1527259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR3; 1537259Sgblack@eecs.umich.edu case 4: 1547259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR4; 1557259Sgblack@eecs.umich.edu case 5: 1567259Sgblack@eecs.umich.edu return MISCREG_ID_ISAR5; 1577259Sgblack@eecs.umich.edu case 6: 1587259Sgblack@eecs.umich.edu case 7: 1597259Sgblack@eecs.umich.edu return MISCREG_RAZ; // read as zero 1607259Sgblack@eecs.umich.edu } 1617259Sgblack@eecs.umich.edu break; 1627259Sgblack@eecs.umich.edu default: 1637259Sgblack@eecs.umich.edu return MISCREG_RAZ; // read as zero 1647259Sgblack@eecs.umich.edu } 1657259Sgblack@eecs.umich.edu break; 1667259Sgblack@eecs.umich.edu case 1: 1677259Sgblack@eecs.umich.edu if (crm == 0) { 1687259Sgblack@eecs.umich.edu switch (opc2) { 1697259Sgblack@eecs.umich.edu case 0: 1707259Sgblack@eecs.umich.edu return MISCREG_CCSIDR; 1717259Sgblack@eecs.umich.edu case 1: 1727259Sgblack@eecs.umich.edu return MISCREG_CLIDR; 1737259Sgblack@eecs.umich.edu case 7: 1747259Sgblack@eecs.umich.edu return MISCREG_AIDR; 1757259Sgblack@eecs.umich.edu } 1767259Sgblack@eecs.umich.edu } 1777259Sgblack@eecs.umich.edu break; 1787259Sgblack@eecs.umich.edu case 2: 1797259Sgblack@eecs.umich.edu if (crm == 0 && opc2 == 0) { 1807259Sgblack@eecs.umich.edu return MISCREG_CSSELR; 1817259Sgblack@eecs.umich.edu } 1827259Sgblack@eecs.umich.edu break; 1837259Sgblack@eecs.umich.edu } 1847259Sgblack@eecs.umich.edu break; 1857259Sgblack@eecs.umich.edu case 1: 1867351Sgblack@eecs.umich.edu if (opc1 == 0) { 1877351Sgblack@eecs.umich.edu if (crm == 0) { 1887351Sgblack@eecs.umich.edu switch (opc2) { 1897351Sgblack@eecs.umich.edu case 0: 1907351Sgblack@eecs.umich.edu return MISCREG_SCTLR; 1917351Sgblack@eecs.umich.edu case 1: 1927351Sgblack@eecs.umich.edu return MISCREG_ACTLR; 1937351Sgblack@eecs.umich.edu case 0x2: 1947351Sgblack@eecs.umich.edu return MISCREG_CPACR; 1957351Sgblack@eecs.umich.edu } 1967351Sgblack@eecs.umich.edu } else if (crm == 1) { 1977351Sgblack@eecs.umich.edu switch (opc2) { 1987351Sgblack@eecs.umich.edu case 0: 1997351Sgblack@eecs.umich.edu return MISCREG_SCR; 2007351Sgblack@eecs.umich.edu case 1: 2017351Sgblack@eecs.umich.edu return MISCREG_SDER; 2027351Sgblack@eecs.umich.edu case 2: 2037351Sgblack@eecs.umich.edu return MISCREG_NSACR; 2047351Sgblack@eecs.umich.edu } 2057351Sgblack@eecs.umich.edu } 2067351Sgblack@eecs.umich.edu } 2077351Sgblack@eecs.umich.edu break; 2087351Sgblack@eecs.umich.edu case 2: 2097406SAli.Saidi@ARM.com if (opc1 == 0 && crm == 0) { 2107259Sgblack@eecs.umich.edu switch (opc2) { 2117259Sgblack@eecs.umich.edu case 0: 2127351Sgblack@eecs.umich.edu return MISCREG_TTBR0; 2137259Sgblack@eecs.umich.edu case 1: 2147351Sgblack@eecs.umich.edu return MISCREG_TTBR1; 2157351Sgblack@eecs.umich.edu case 2: 2167351Sgblack@eecs.umich.edu return MISCREG_TTBCR; 2177259Sgblack@eecs.umich.edu } 2187259Sgblack@eecs.umich.edu } 2197259Sgblack@eecs.umich.edu break; 2207351Sgblack@eecs.umich.edu case 3: 2217351Sgblack@eecs.umich.edu if (opc1 == 0 && crm == 0 && opc2 == 0) { 2227351Sgblack@eecs.umich.edu return MISCREG_DACR; 2237351Sgblack@eecs.umich.edu } 2247351Sgblack@eecs.umich.edu break; 2257259Sgblack@eecs.umich.edu case 5: 2267259Sgblack@eecs.umich.edu if (opc1 == 0) { 2277259Sgblack@eecs.umich.edu if (crm == 0) { 2287259Sgblack@eecs.umich.edu if (opc2 == 0) { 2297259Sgblack@eecs.umich.edu return MISCREG_DFSR; 2307259Sgblack@eecs.umich.edu } else if (opc2 == 1) { 2317259Sgblack@eecs.umich.edu return MISCREG_IFSR; 2327259Sgblack@eecs.umich.edu } 2337259Sgblack@eecs.umich.edu } else if (crm == 1) { 2347259Sgblack@eecs.umich.edu if (opc2 == 0) { 2357259Sgblack@eecs.umich.edu return MISCREG_ADFSR; 2367259Sgblack@eecs.umich.edu } else if (opc2 == 1) { 2377259Sgblack@eecs.umich.edu return MISCREG_AIFSR; 2387259Sgblack@eecs.umich.edu } 2397259Sgblack@eecs.umich.edu } 2407259Sgblack@eecs.umich.edu } 2417259Sgblack@eecs.umich.edu break; 2427259Sgblack@eecs.umich.edu case 6: 2437351Sgblack@eecs.umich.edu if (opc1 == 0 && crm == 0) { 2447351Sgblack@eecs.umich.edu switch (opc2) { 2457259Sgblack@eecs.umich.edu case 0: 2467351Sgblack@eecs.umich.edu return MISCREG_DFAR; 2477259Sgblack@eecs.umich.edu case 2: 2487351Sgblack@eecs.umich.edu return MISCREG_IFAR; 2497259Sgblack@eecs.umich.edu } 2507259Sgblack@eecs.umich.edu } 2517259Sgblack@eecs.umich.edu break; 2527259Sgblack@eecs.umich.edu case 7: 2537259Sgblack@eecs.umich.edu if (opc1 == 0) { 2547259Sgblack@eecs.umich.edu switch (crm) { 2557259Sgblack@eecs.umich.edu case 0: 2567259Sgblack@eecs.umich.edu if (opc2 == 4) { 2577259Sgblack@eecs.umich.edu return MISCREG_NOP; 2587259Sgblack@eecs.umich.edu } 2597259Sgblack@eecs.umich.edu break; 2607259Sgblack@eecs.umich.edu case 1: 2617259Sgblack@eecs.umich.edu switch (opc2) { 2627259Sgblack@eecs.umich.edu case 0: 2637259Sgblack@eecs.umich.edu return MISCREG_ICIALLUIS; 2647259Sgblack@eecs.umich.edu case 6: 2657259Sgblack@eecs.umich.edu return MISCREG_BPIALLIS; 2667259Sgblack@eecs.umich.edu } 2677259Sgblack@eecs.umich.edu break; 2687351Sgblack@eecs.umich.edu case 4: 2697351Sgblack@eecs.umich.edu if (opc2 == 0) { 2707351Sgblack@eecs.umich.edu return MISCREG_PAR; 2717351Sgblack@eecs.umich.edu } 2727351Sgblack@eecs.umich.edu break; 2737259Sgblack@eecs.umich.edu case 5: 2747259Sgblack@eecs.umich.edu switch (opc2) { 2757259Sgblack@eecs.umich.edu case 0: 2767259Sgblack@eecs.umich.edu return MISCREG_ICIALLU; 2777259Sgblack@eecs.umich.edu case 1: 2787259Sgblack@eecs.umich.edu return MISCREG_ICIMVAU; 2797259Sgblack@eecs.umich.edu case 4: 2807259Sgblack@eecs.umich.edu return MISCREG_CP15ISB; 2817259Sgblack@eecs.umich.edu case 6: 2827259Sgblack@eecs.umich.edu return MISCREG_BPIALL; 2837259Sgblack@eecs.umich.edu case 7: 2847259Sgblack@eecs.umich.edu return MISCREG_BPIMVA; 2857259Sgblack@eecs.umich.edu } 2867259Sgblack@eecs.umich.edu break; 2877259Sgblack@eecs.umich.edu case 6: 2887259Sgblack@eecs.umich.edu if (opc2 == 1) { 2897259Sgblack@eecs.umich.edu return MISCREG_DCIMVAC; 2907259Sgblack@eecs.umich.edu } else if (opc2 == 2) { 2917259Sgblack@eecs.umich.edu return MISCREG_DCISW; 2927259Sgblack@eecs.umich.edu } 2937259Sgblack@eecs.umich.edu break; 2947351Sgblack@eecs.umich.edu case 8: 2957351Sgblack@eecs.umich.edu switch (opc2) { 2967351Sgblack@eecs.umich.edu case 0: 2977351Sgblack@eecs.umich.edu return MISCREG_V2PCWPR; 2987351Sgblack@eecs.umich.edu case 1: 2997351Sgblack@eecs.umich.edu return MISCREG_V2PCWPW; 3007351Sgblack@eecs.umich.edu case 2: 3017351Sgblack@eecs.umich.edu return MISCREG_V2PCWUR; 3027351Sgblack@eecs.umich.edu case 3: 3037351Sgblack@eecs.umich.edu return MISCREG_V2PCWUW; 3047351Sgblack@eecs.umich.edu case 4: 3057351Sgblack@eecs.umich.edu return MISCREG_V2POWPR; 3067351Sgblack@eecs.umich.edu case 5: 3077351Sgblack@eecs.umich.edu return MISCREG_V2POWPW; 3087351Sgblack@eecs.umich.edu case 6: 3097351Sgblack@eecs.umich.edu return MISCREG_V2POWUR; 3107351Sgblack@eecs.umich.edu case 7: 3117351Sgblack@eecs.umich.edu return MISCREG_V2POWUW; 3127351Sgblack@eecs.umich.edu } 3137351Sgblack@eecs.umich.edu break; 3147259Sgblack@eecs.umich.edu case 10: 3157259Sgblack@eecs.umich.edu switch (opc2) { 3167259Sgblack@eecs.umich.edu case 1: 3177259Sgblack@eecs.umich.edu return MISCREG_DCCMVAC; 3187259Sgblack@eecs.umich.edu case 2: 3197259Sgblack@eecs.umich.edu return MISCREG_MCCSW; 3207259Sgblack@eecs.umich.edu case 4: 3217259Sgblack@eecs.umich.edu return MISCREG_CP15DSB; 3227259Sgblack@eecs.umich.edu case 5: 3237259Sgblack@eecs.umich.edu return MISCREG_CP15DMB; 3247259Sgblack@eecs.umich.edu } 3257259Sgblack@eecs.umich.edu break; 3267259Sgblack@eecs.umich.edu case 11: 3277259Sgblack@eecs.umich.edu if (opc2 == 1) { 3287259Sgblack@eecs.umich.edu return MISCREG_DCCMVAU; 3297259Sgblack@eecs.umich.edu } 3307259Sgblack@eecs.umich.edu break; 3317259Sgblack@eecs.umich.edu case 13: 3327259Sgblack@eecs.umich.edu if (opc2 == 1) { 3337259Sgblack@eecs.umich.edu return MISCREG_NOP; 3347259Sgblack@eecs.umich.edu } 3357259Sgblack@eecs.umich.edu break; 3367259Sgblack@eecs.umich.edu case 14: 3377259Sgblack@eecs.umich.edu if (opc2 == 1) { 3387259Sgblack@eecs.umich.edu return MISCREG_DCCIMVAC; 3397259Sgblack@eecs.umich.edu } else if (opc2 == 2) { 3407259Sgblack@eecs.umich.edu return MISCREG_DCCISW; 3417259Sgblack@eecs.umich.edu } 3427259Sgblack@eecs.umich.edu break; 3437259Sgblack@eecs.umich.edu } 3447259Sgblack@eecs.umich.edu } 3457259Sgblack@eecs.umich.edu break; 3467351Sgblack@eecs.umich.edu case 8: 3477351Sgblack@eecs.umich.edu if (opc1 == 0) { 3487351Sgblack@eecs.umich.edu switch (crm) { 3497351Sgblack@eecs.umich.edu case 3: 3507351Sgblack@eecs.umich.edu switch (opc2) { 3517351Sgblack@eecs.umich.edu case 0: 3527351Sgblack@eecs.umich.edu return MISCREG_TLBIALLIS; 3537351Sgblack@eecs.umich.edu case 1: 3547351Sgblack@eecs.umich.edu return MISCREG_TLBIMVAIS; 3557351Sgblack@eecs.umich.edu case 2: 3567351Sgblack@eecs.umich.edu return MISCREG_TLBIASIDIS; 3577351Sgblack@eecs.umich.edu case 3: 3587351Sgblack@eecs.umich.edu return MISCREG_TLBIMVAAIS; 3597351Sgblack@eecs.umich.edu } 3607351Sgblack@eecs.umich.edu break; 3617351Sgblack@eecs.umich.edu case 5: 3627351Sgblack@eecs.umich.edu switch (opc2) { 3637351Sgblack@eecs.umich.edu case 0: 3647351Sgblack@eecs.umich.edu return MISCREG_ITLBIALL; 3657351Sgblack@eecs.umich.edu case 1: 3667351Sgblack@eecs.umich.edu return MISCREG_ITLBIMVA; 3677351Sgblack@eecs.umich.edu case 2: 3687351Sgblack@eecs.umich.edu return MISCREG_ITLBIASID; 3697351Sgblack@eecs.umich.edu } 3707351Sgblack@eecs.umich.edu break; 3717351Sgblack@eecs.umich.edu case 6: 3727351Sgblack@eecs.umich.edu switch (opc2) { 3737351Sgblack@eecs.umich.edu case 0: 3747351Sgblack@eecs.umich.edu return MISCREG_DTLBIALL; 3757351Sgblack@eecs.umich.edu case 1: 3767351Sgblack@eecs.umich.edu return MISCREG_DTLBIMVA; 3777351Sgblack@eecs.umich.edu case 2: 3787351Sgblack@eecs.umich.edu return MISCREG_DTLBIASID; 3797351Sgblack@eecs.umich.edu } 3807351Sgblack@eecs.umich.edu break; 3817351Sgblack@eecs.umich.edu case 7: 3827351Sgblack@eecs.umich.edu switch (opc2) { 3837351Sgblack@eecs.umich.edu case 0: 3847351Sgblack@eecs.umich.edu return MISCREG_TLBIALL; 3857351Sgblack@eecs.umich.edu case 1: 3867351Sgblack@eecs.umich.edu return MISCREG_TLBIMVA; 3877351Sgblack@eecs.umich.edu case 2: 3887351Sgblack@eecs.umich.edu return MISCREG_TLBIASID; 3897351Sgblack@eecs.umich.edu case 3: 3907351Sgblack@eecs.umich.edu return MISCREG_TLBIMVAA; 3917351Sgblack@eecs.umich.edu } 3927351Sgblack@eecs.umich.edu break; 3937351Sgblack@eecs.umich.edu } 3947351Sgblack@eecs.umich.edu } 3957351Sgblack@eecs.umich.edu break; 3967259Sgblack@eecs.umich.edu case 9: 3977583SAli.Saidi@arm.com if (opc1 == 0) { 3987259Sgblack@eecs.umich.edu switch (crm) { 3997259Sgblack@eecs.umich.edu case 12: 4007583SAli.Saidi@arm.com switch (opc2) { 4017583SAli.Saidi@arm.com case 0: 4027583SAli.Saidi@arm.com return MISCREG_PMCR; 4037583SAli.Saidi@arm.com case 1: 4047583SAli.Saidi@arm.com return MISCREG_PMCNTENSET; 4057583SAli.Saidi@arm.com case 2: 4067583SAli.Saidi@arm.com return MISCREG_PMCNTENCLR; 4077583SAli.Saidi@arm.com case 3: 4087583SAli.Saidi@arm.com return MISCREG_PMOVSR; 4097583SAli.Saidi@arm.com case 4: 4107583SAli.Saidi@arm.com return MISCREG_PMSWINC; 4117583SAli.Saidi@arm.com case 5: 4127583SAli.Saidi@arm.com return MISCREG_PMSELR; 4137583SAli.Saidi@arm.com case 6: 4147583SAli.Saidi@arm.com return MISCREG_PMCEID0; 4157583SAli.Saidi@arm.com case 7: 4167583SAli.Saidi@arm.com return MISCREG_PMCEID1; 4177583SAli.Saidi@arm.com } 4188988SAli.Saidi@ARM.com break; 4197259Sgblack@eecs.umich.edu case 13: 4207583SAli.Saidi@arm.com switch (opc2) { 4217583SAli.Saidi@arm.com case 0: 4227583SAli.Saidi@arm.com return MISCREG_PMCCNTR; 4237583SAli.Saidi@arm.com case 1: 4247583SAli.Saidi@arm.com return MISCREG_PMC_OTHER; 4257583SAli.Saidi@arm.com case 2: 4267583SAli.Saidi@arm.com return MISCREG_PMXEVCNTR; 4277583SAli.Saidi@arm.com } 4288988SAli.Saidi@ARM.com break; 4297259Sgblack@eecs.umich.edu case 14: 4307583SAli.Saidi@arm.com switch (opc2) { 4317583SAli.Saidi@arm.com case 0: 4327583SAli.Saidi@arm.com return MISCREG_PMUSERENR; 4337583SAli.Saidi@arm.com case 1: 4347583SAli.Saidi@arm.com return MISCREG_PMINTENSET; 4357583SAli.Saidi@arm.com case 2: 4367583SAli.Saidi@arm.com return MISCREG_PMINTENCLR; 4377583SAli.Saidi@arm.com } 4388988SAli.Saidi@ARM.com break; 4397259Sgblack@eecs.umich.edu } 4408058SAli.Saidi@ARM.com } else if (opc1 == 1) { 4418549Sdaniel.johnson@arm.com switch (crm) { 4428549Sdaniel.johnson@arm.com case 0: 4438549Sdaniel.johnson@arm.com switch (opc2) { 4448549Sdaniel.johnson@arm.com case 2: // L2CTLR, L2 Control Register 4458549Sdaniel.johnson@arm.com return MISCREG_L2CTLR; 4468549Sdaniel.johnson@arm.com default: 4478549Sdaniel.johnson@arm.com warn("Uknown miscregs: crn:%d crm:%d opc1:%d opc2:%d\n", 4488549Sdaniel.johnson@arm.com crn,crm, opc1,opc2); 4498549Sdaniel.johnson@arm.com break; 4508549Sdaniel.johnson@arm.com } 4518988SAli.Saidi@ARM.com break; 4528549Sdaniel.johnson@arm.com default: 4538549Sdaniel.johnson@arm.com return MISCREG_L2LATENCY; 4548549Sdaniel.johnson@arm.com } 4557259Sgblack@eecs.umich.edu } 4567583SAli.Saidi@arm.com //Reserved for Branch Predictor, Cache and TCM operations 4577259Sgblack@eecs.umich.edu break; 4587351Sgblack@eecs.umich.edu case 10: 4597351Sgblack@eecs.umich.edu if (opc1 == 0) { 4607351Sgblack@eecs.umich.edu // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown 4617351Sgblack@eecs.umich.edu if (crm == 2) { // TEX Remap Registers 4627351Sgblack@eecs.umich.edu if (opc2 == 0) { 4637351Sgblack@eecs.umich.edu return MISCREG_PRRR; 4647351Sgblack@eecs.umich.edu } else if (opc2 == 1) { 4657351Sgblack@eecs.umich.edu return MISCREG_NMRR; 4667351Sgblack@eecs.umich.edu } 4677351Sgblack@eecs.umich.edu } 4687351Sgblack@eecs.umich.edu } 4697351Sgblack@eecs.umich.edu break; 4707259Sgblack@eecs.umich.edu case 11: 4718737Skoansin.tan@gmail.com if (opc1 <=7) { 4727259Sgblack@eecs.umich.edu switch (crm) { 4737259Sgblack@eecs.umich.edu case 0: 4747259Sgblack@eecs.umich.edu case 1: 4757259Sgblack@eecs.umich.edu case 2: 4767259Sgblack@eecs.umich.edu case 3: 4777259Sgblack@eecs.umich.edu case 4: 4787259Sgblack@eecs.umich.edu case 5: 4797259Sgblack@eecs.umich.edu case 6: 4807259Sgblack@eecs.umich.edu case 7: 4817259Sgblack@eecs.umich.edu case 8: 4827259Sgblack@eecs.umich.edu case 15: 4837259Sgblack@eecs.umich.edu // Reserved for DMA operations for TCM access 4847259Sgblack@eecs.umich.edu break; 4857259Sgblack@eecs.umich.edu } 4867259Sgblack@eecs.umich.edu } 4877259Sgblack@eecs.umich.edu break; 4887351Sgblack@eecs.umich.edu case 12: 4897351Sgblack@eecs.umich.edu if (opc1 == 0) { 4907351Sgblack@eecs.umich.edu if (crm == 0) { 4917351Sgblack@eecs.umich.edu if (opc2 == 0) { 4927351Sgblack@eecs.umich.edu return MISCREG_VBAR; 4937351Sgblack@eecs.umich.edu } else if (opc2 == 1) { 4947351Sgblack@eecs.umich.edu return MISCREG_MVBAR; 4957351Sgblack@eecs.umich.edu } 4967351Sgblack@eecs.umich.edu } else if (crm == 1) { 4977351Sgblack@eecs.umich.edu if (opc2 == 0) { 4987351Sgblack@eecs.umich.edu return MISCREG_ISR; 4997351Sgblack@eecs.umich.edu } 5007351Sgblack@eecs.umich.edu } 5017351Sgblack@eecs.umich.edu } 5027351Sgblack@eecs.umich.edu break; 5037259Sgblack@eecs.umich.edu case 13: 5047259Sgblack@eecs.umich.edu if (opc1 == 0) { 5057259Sgblack@eecs.umich.edu if (crm == 0) { 5067406SAli.Saidi@ARM.com switch (opc2) { 5077351Sgblack@eecs.umich.edu case 0: 5087351Sgblack@eecs.umich.edu return MISCREG_FCEIDR; 5097259Sgblack@eecs.umich.edu case 1: 5107259Sgblack@eecs.umich.edu return MISCREG_CONTEXTIDR; 5117259Sgblack@eecs.umich.edu case 2: 5127259Sgblack@eecs.umich.edu return MISCREG_TPIDRURW; 5137259Sgblack@eecs.umich.edu case 3: 5147259Sgblack@eecs.umich.edu return MISCREG_TPIDRURO; 5157259Sgblack@eecs.umich.edu case 4: 5167259Sgblack@eecs.umich.edu return MISCREG_TPIDRPRW; 5177259Sgblack@eecs.umich.edu } 5187259Sgblack@eecs.umich.edu } 5197259Sgblack@eecs.umich.edu } 5207259Sgblack@eecs.umich.edu break; 5217259Sgblack@eecs.umich.edu case 15: 5227259Sgblack@eecs.umich.edu // Implementation defined 5238550SChander.Sudanthi@ARM.com return MISCREG_CRN15; 5247259Sgblack@eecs.umich.edu } 5257259Sgblack@eecs.umich.edu // Unrecognized register 5267259Sgblack@eecs.umich.edu return NUM_MISCREGS; 5277259Sgblack@eecs.umich.edu} 5287259Sgblack@eecs.umich.edu 5298902Sandreas.hansson@arm.com} 530