ARM: Implement numcpus bits in L2CTLR register.

This commit is contained in:
Daniel Johnson 2011-09-13 12:06:13 -05:00
parent 0c29a97ba9
commit 09a6e424ec
3 changed files with 41 additions and 1 deletions

View file

@ -227,6 +227,12 @@ ISA::readMiscReg(int misc_reg, ThreadContext *tc)
return readMiscRegNoEffect(MISCREG_FPSCR) & ~FpscrQcMask; return readMiscRegNoEffect(MISCREG_FPSCR) & ~FpscrQcMask;
case MISCREG_FPSCR_EXC: case MISCREG_FPSCR_EXC:
return readMiscRegNoEffect(MISCREG_FPSCR) & ~FpscrExcMask; return readMiscRegNoEffect(MISCREG_FPSCR) & ~FpscrExcMask;
case MISCREG_L2CTLR:
// mostly unimplemented, just set NumCPUs field from sim and return
L2CTLR l2ctlr = 0;
// b00:1CPU to b11:4CPUs
l2ctlr.numCPUs = tc->getSystemPtr()->numContexts() - 1;
return l2ctlr;
} }
return readMiscRegNoEffect(misc_reg); return readMiscRegNoEffect(misc_reg);
} }
@ -537,6 +543,9 @@ ISA::setMiscReg(int misc_reg, const MiscReg &val, ThreadContext *tc)
// see all of the registers for the copy. // see all of the registers for the copy.
updateRegMap(val); updateRegMap(val);
return; return;
case MISCREG_L2CTLR:
warn("miscreg L2CTLR (%s) written with %#x. ignored...\n",
miscRegName[misc_reg], uint32_t(val));
} }
} }
setMiscRegNoEffect(misc_reg, newVal); setMiscRegNoEffect(misc_reg, newVal);

View file

@ -382,8 +382,20 @@ decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
} }
} }
} else if (opc1 == 1) { } else if (opc1 == 1) {
switch (crm) {
case 0:
switch (opc2) {
case 2: // L2CTLR, L2 Control Register
return MISCREG_L2CTLR;
default:
warn("Uknown miscregs: crn:%d crm:%d opc1:%d opc2:%d\n",
crn,crm, opc1,opc2);
break;
}
default:
return MISCREG_L2LATENCY; return MISCREG_L2LATENCY;
} }
}
//Reserved for Branch Predictor, Cache and TCM operations //Reserved for Branch Predictor, Cache and TCM operations
break; break;
case 10: case 10:

View file

@ -177,6 +177,7 @@ namespace ArmISA
MISCREG_LOCKFLAG, MISCREG_LOCKFLAG,
MISCREG_LOCKADDR, MISCREG_LOCKADDR,
MISCREG_ID_PFR1, MISCREG_ID_PFR1,
MISCREG_L2CTLR,
MISCREG_CP15_UNIMP_START, MISCREG_CP15_UNIMP_START,
MISCREG_TCMTR = MISCREG_CP15_UNIMP_START, MISCREG_TCMTR = MISCREG_CP15_UNIMP_START,
MISCREG_ID_DFR0, MISCREG_ID_DFR0,
@ -238,6 +239,7 @@ namespace ArmISA
"pmuserenr", "pmintenset", "pmintenclr", "pmuserenr", "pmintenset", "pmintenclr",
"id_isar0", "id_isar1", "id_isar2", "id_isar3", "id_isar4", "id_isar5", "id_isar0", "id_isar1", "id_isar2", "id_isar3", "id_isar4", "id_isar5",
"cpsr_mode", "lockflag", "lockaddr", "id_pfr1", "cpsr_mode", "lockflag", "lockaddr", "id_pfr1",
"l2ctlr",
// Unimplemented below // Unimplemented below
"tcmtr", "tcmtr",
"id_dfr0", "id_afr0", "id_dfr0", "id_afr0",
@ -432,6 +434,23 @@ namespace ArmISA
Bitfield<31,30> or7; Bitfield<31,30> or7;
EndBitUnion(NMRR) EndBitUnion(NMRR)
BitUnion32(L2CTLR)
Bitfield<2,0> sataRAMLatency;
Bitfield<4,3> reserved_4_3;
Bitfield<5> dataRAMSetup;
Bitfield<8,6> tagRAMLatency;
Bitfield<9> tagRAMSetup;
Bitfield<11,10> dataRAMSlice;
Bitfield<12> tagRAMSlice;
Bitfield<20,13> reserved_20_13;
Bitfield<21> eccandParityEnable;
Bitfield<22> reserved_22;
Bitfield<23> interptCtrlPresent;
Bitfield<25,24> numCPUs;
Bitfield<30,26> reserved_30_26;
Bitfield<31> l2rstDISABLE_monitor;
EndBitUnion(L2CTLR)
}; };
#endif // __ARCH_ARM_MISCREGS_HH__ #endif // __ARCH_ARM_MISCREGS_HH__