arch-arm: Remove MISCREG_INFO E2H flag
These VHE flags are not needed anymore. They were used to trap EL2 access to VHE only registers (like CPACR_EL12) when VHE was disabled (hcr.e2h = 0) With the new faulting logic, we can just introduce VHE specific callbacks checking for the hcr.e2h bitfield and returning an undefined instruction if VHE is disabled. In this way we don't have to add VHE only bits to every system register Change-Id: I07bf9a9adc7a089bd45e718fb06d88488a2b7ed5 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/61678 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Richard Cooper <richard.cooper@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -1290,69 +1290,28 @@ MiscRegLUTEntry::defaultFault(const MiscRegLUTEntry &entry,
|
||||
}
|
||||
}
|
||||
|
||||
Fault
|
||||
MiscRegLUTEntry::defaultReadFaultEL2(const MiscRegLUTEntry &entry,
|
||||
static Fault
|
||||
defaultFaultE2H_EL2(const MiscRegLUTEntry &entry,
|
||||
ThreadContext *tc, const MiscRegOp64 &inst)
|
||||
{
|
||||
const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
|
||||
const bool el2_host = EL2Enabled(tc) && hcr.e2h;
|
||||
if (el2_host) {
|
||||
return defaultFault<MISCREG_HYP_E2H_S_RD, MISCREG_HYP_E2H_NS_RD>(
|
||||
entry, tc, inst);
|
||||
if (hcr.e2h) {
|
||||
return NoFault;
|
||||
} else {
|
||||
return defaultFault<MISCREG_HYP_S_RD, MISCREG_HYP_NS_RD>(
|
||||
entry, tc, inst);
|
||||
return inst.undefined();
|
||||
}
|
||||
}
|
||||
|
||||
Fault
|
||||
MiscRegLUTEntry::defaultWriteFaultEL2(const MiscRegLUTEntry &entry,
|
||||
static Fault
|
||||
defaultFaultE2H_EL3(const MiscRegLUTEntry &entry,
|
||||
ThreadContext *tc, const MiscRegOp64 &inst)
|
||||
{
|
||||
const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
|
||||
const bool el2_host = EL2Enabled(tc) && hcr.e2h;
|
||||
if (el2_host) {
|
||||
return defaultFault<MISCREG_HYP_E2H_S_WR, MISCREG_HYP_E2H_NS_WR>(
|
||||
entry, tc, inst);
|
||||
return NoFault;
|
||||
} else {
|
||||
return defaultFault<MISCREG_HYP_S_WR, MISCREG_HYP_NS_WR>(
|
||||
entry, tc, inst);
|
||||
}
|
||||
}
|
||||
|
||||
Fault
|
||||
MiscRegLUTEntry::defaultReadFaultEL3(const MiscRegLUTEntry &entry,
|
||||
ThreadContext *tc, const MiscRegOp64 &inst)
|
||||
{
|
||||
const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
|
||||
const bool el2_host = EL2Enabled(tc) && hcr.e2h;
|
||||
if (el2_host) {
|
||||
if (entry.info[MISCREG_MON_E2H_RD]) {
|
||||
return NoFault;
|
||||
} else {
|
||||
return inst.undefined();
|
||||
}
|
||||
} else {
|
||||
return defaultFault<MISCREG_MON_NS0_RD, MISCREG_MON_NS1_RD>(
|
||||
entry, tc, inst);
|
||||
}
|
||||
}
|
||||
|
||||
Fault
|
||||
MiscRegLUTEntry::defaultWriteFaultEL3(const MiscRegLUTEntry &entry,
|
||||
ThreadContext *tc, const MiscRegOp64 &inst)
|
||||
{
|
||||
const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
|
||||
const bool el2_host = EL2Enabled(tc) && hcr.e2h;
|
||||
if (el2_host) {
|
||||
if (entry.info[MISCREG_MON_E2H_WR]) {
|
||||
return NoFault;
|
||||
} else {
|
||||
return inst.undefined();
|
||||
}
|
||||
} else {
|
||||
return defaultFault<MISCREG_MON_NS0_WR, MISCREG_MON_NS1_WR>(
|
||||
entry, tc, inst);
|
||||
return inst.undefined();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2797,8 +2756,8 @@ ISA::initializeMiscRegMetadata()
|
||||
| (LSMAOE ? 0 : 0x10000000))
|
||||
.mapsTo(MISCREG_SCTLR_NS);
|
||||
InitReg(MISCREG_SCTLR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.res0( 0x20440 | (EnDB ? 0 : 0x2000)
|
||||
| (IESB ? 0 : 0x200000)
|
||||
| (EnDA ? 0 : 0x8000000)
|
||||
@@ -2815,8 +2774,8 @@ ISA::initializeMiscRegMetadata()
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_CPACR);
|
||||
InitReg(MISCREG_CPACR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_CPACR_EL1);
|
||||
InitReg(MISCREG_SCTLR_EL2)
|
||||
.hyp().mon()
|
||||
@@ -2870,22 +2829,22 @@ ISA::initializeMiscRegMetadata()
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_TTBR0_NS);
|
||||
InitReg(MISCREG_TTBR0_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_TTBR0_EL1);
|
||||
InitReg(MISCREG_TTBR1_EL1)
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_TTBR1_NS);
|
||||
InitReg(MISCREG_TTBR1_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_TTBR1_EL1);
|
||||
InitReg(MISCREG_TCR_EL1)
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_TTBCR_NS);
|
||||
InitReg(MISCREG_TCR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_TTBCR_NS);
|
||||
InitReg(MISCREG_TTBR0_EL2)
|
||||
.hyp().mon()
|
||||
@@ -2916,14 +2875,14 @@ ISA::initializeMiscRegMetadata()
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_SPSR_SVC); // NAM C5.2.17 SPSR_EL1
|
||||
InitReg(MISCREG_SPSR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_SPSR_SVC);
|
||||
InitReg(MISCREG_ELR_EL1)
|
||||
.allPrivileges().exceptUserMode();
|
||||
InitReg(MISCREG_ELR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_ELR_EL1);
|
||||
InitReg(MISCREG_SP_EL0)
|
||||
.allPrivileges().exceptUserMode();
|
||||
@@ -2974,21 +2933,21 @@ ISA::initializeMiscRegMetadata()
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_ADFSR_NS);
|
||||
InitReg(MISCREG_AFSR0_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_ADFSR_NS);
|
||||
InitReg(MISCREG_AFSR1_EL1)
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_AIFSR_NS);
|
||||
InitReg(MISCREG_AFSR1_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_AIFSR_NS);
|
||||
InitReg(MISCREG_ESR_EL1)
|
||||
.allPrivileges().exceptUserMode();
|
||||
InitReg(MISCREG_ESR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_ESR_EL1);
|
||||
InitReg(MISCREG_IFSR32_EL2)
|
||||
.hyp().mon()
|
||||
@@ -3014,8 +2973,8 @@ ISA::initializeMiscRegMetadata()
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_DFAR_NS, MISCREG_IFAR_NS);
|
||||
InitReg(MISCREG_FAR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_DFAR_NS, MISCREG_IFAR_NS);
|
||||
InitReg(MISCREG_FAR_EL2)
|
||||
.hyp().mon()
|
||||
@@ -3199,15 +3158,15 @@ ISA::initializeMiscRegMetadata()
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_PRRR_NS, MISCREG_NMRR_NS);
|
||||
InitReg(MISCREG_MAIR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_PRRR_NS, MISCREG_NMRR_NS);
|
||||
InitReg(MISCREG_AMAIR_EL1)
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_AMAIR0_NS, MISCREG_AMAIR1_NS);
|
||||
InitReg(MISCREG_AMAIR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_AMAIR0_NS, MISCREG_AMAIR1_NS);
|
||||
InitReg(MISCREG_MAIR_EL2)
|
||||
.hyp().mon()
|
||||
@@ -3227,8 +3186,8 @@ ISA::initializeMiscRegMetadata()
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_VBAR_NS);
|
||||
InitReg(MISCREG_VBAR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_VBAR_NS);
|
||||
InitReg(MISCREG_RVBAR_EL1)
|
||||
.privRead(FullSystem && system->highestEL() == EL1);
|
||||
@@ -3250,8 +3209,8 @@ ISA::initializeMiscRegMetadata()
|
||||
.allPrivileges().exceptUserMode()
|
||||
.mapsTo(MISCREG_CONTEXTIDR_NS);
|
||||
InitReg(MISCREG_CONTEXTIDR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_CONTEXTIDR_NS);
|
||||
InitReg(MISCREG_TPIDR_EL1)
|
||||
.allPrivileges().exceptUserMode()
|
||||
@@ -3304,31 +3263,31 @@ ISA::initializeMiscRegMetadata()
|
||||
.res0(0xffffffff00000000)
|
||||
.mapsTo(MISCREG_CNTV_TVAL);
|
||||
InitReg(MISCREG_CNTP_CTL_EL02)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.res0(0xfffffffffffffff8)
|
||||
.mapsTo(MISCREG_CNTP_CTL_NS);
|
||||
InitReg(MISCREG_CNTP_CVAL_EL02)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_CNTP_CVAL_NS);
|
||||
InitReg(MISCREG_CNTP_TVAL_EL02)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.res0(0xffffffff00000000)
|
||||
.mapsTo(MISCREG_CNTP_TVAL_NS);
|
||||
InitReg(MISCREG_CNTV_CTL_EL02)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.res0(0xfffffffffffffff8)
|
||||
.mapsTo(MISCREG_CNTV_CTL);
|
||||
InitReg(MISCREG_CNTV_CVAL_EL02)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_CNTV_CVAL);
|
||||
InitReg(MISCREG_CNTV_TVAL_EL02)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.res0(0xffffffff00000000)
|
||||
.mapsTo(MISCREG_CNTV_TVAL);
|
||||
InitReg(MISCREG_CNTKCTL_EL1)
|
||||
@@ -3337,8 +3296,8 @@ ISA::initializeMiscRegMetadata()
|
||||
.res0(0xfffffffffffdfc00)
|
||||
.mapsTo(MISCREG_CNTKCTL);
|
||||
InitReg(MISCREG_CNTKCTL_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.res0(0xfffffffffffdfc00)
|
||||
.mapsTo(MISCREG_CNTKCTL);
|
||||
InitReg(MISCREG_CNTPS_CTL_EL1)
|
||||
@@ -3967,8 +3926,8 @@ ISA::initializeMiscRegMetadata()
|
||||
InitReg(MISCREG_ZCR_EL2)
|
||||
.hyp().mon();
|
||||
InitReg(MISCREG_ZCR_EL12)
|
||||
.monE2H()
|
||||
.hypE2H()
|
||||
.fault(EL2, defaultFaultE2H_EL2)
|
||||
.fault(EL3, defaultFaultE2H_EL3)
|
||||
.mapsTo(MISCREG_ZCR_EL1);
|
||||
InitReg(MISCREG_ZCR_EL1)
|
||||
.allPrivileges().exceptUserMode();
|
||||
|
||||
@@ -1136,20 +1136,12 @@ namespace ArmISA
|
||||
MISCREG_HYP_NS_WR,
|
||||
MISCREG_HYP_S_RD,
|
||||
MISCREG_HYP_S_WR,
|
||||
// Hypervisor mode, HCR_EL2.E2H == 1
|
||||
MISCREG_HYP_E2H_NS_RD,
|
||||
MISCREG_HYP_E2H_NS_WR,
|
||||
MISCREG_HYP_E2H_S_RD,
|
||||
MISCREG_HYP_E2H_S_WR,
|
||||
// Monitor mode, SCR.NS == 0
|
||||
MISCREG_MON_NS0_RD,
|
||||
MISCREG_MON_NS0_WR,
|
||||
// Monitor mode, SCR.NS == 1
|
||||
MISCREG_MON_NS1_RD,
|
||||
MISCREG_MON_NS1_WR,
|
||||
// Monitor mode, HCR_EL2.E2H == 1
|
||||
MISCREG_MON_E2H_RD,
|
||||
MISCREG_MON_E2H_WR,
|
||||
|
||||
NUM_MISCREG_INFOS
|
||||
};
|
||||
@@ -1181,27 +1173,19 @@ namespace ArmISA
|
||||
template <MiscRegInfo Sec, MiscRegInfo NonSec>
|
||||
static Fault defaultFault(const MiscRegLUTEntry &entry,
|
||||
ThreadContext *tc, const MiscRegOp64 &inst);
|
||||
static Fault defaultReadFaultEL2(const MiscRegLUTEntry &entry,
|
||||
ThreadContext *tc, const MiscRegOp64 &inst);
|
||||
static Fault defaultWriteFaultEL2(const MiscRegLUTEntry &entry,
|
||||
ThreadContext *tc, const MiscRegOp64 &inst);
|
||||
static Fault defaultReadFaultEL3(const MiscRegLUTEntry &entry,
|
||||
ThreadContext *tc, const MiscRegOp64 &inst);
|
||||
static Fault defaultWriteFaultEL3(const MiscRegLUTEntry &entry,
|
||||
ThreadContext *tc, const MiscRegOp64 &inst);
|
||||
|
||||
public:
|
||||
MiscRegLUTEntry() :
|
||||
lower(0), upper(0),
|
||||
_reset(0), _res0(0), _res1(0), _raz(0), _rao(0), info(0),
|
||||
faultRead({ defaultFault<MISCREG_USR_S_RD, MISCREG_USR_NS_RD>,
|
||||
defaultFault<MISCREG_PRI_S_RD, MISCREG_PRI_NS_RD>,
|
||||
defaultReadFaultEL2,
|
||||
defaultReadFaultEL3 }),
|
||||
faultWrite({ defaultFault<MISCREG_USR_S_WR, MISCREG_USR_NS_WR>,
|
||||
defaultFault<MISCREG_PRI_S_WR, MISCREG_PRI_NS_WR>,
|
||||
defaultWriteFaultEL2,
|
||||
defaultWriteFaultEL3 })
|
||||
faultRead({defaultFault<MISCREG_USR_S_RD, MISCREG_USR_NS_RD>,
|
||||
defaultFault<MISCREG_PRI_S_RD, MISCREG_PRI_NS_RD>,
|
||||
defaultFault<MISCREG_HYP_S_RD, MISCREG_HYP_NS_RD>,
|
||||
defaultFault<MISCREG_MON_NS0_RD, MISCREG_MON_NS1_RD>}),
|
||||
faultWrite({defaultFault<MISCREG_USR_S_WR, MISCREG_USR_NS_WR>,
|
||||
defaultFault<MISCREG_PRI_S_WR, MISCREG_PRI_NS_WR>,
|
||||
defaultFault<MISCREG_HYP_S_WR, MISCREG_HYP_NS_WR>,
|
||||
defaultFault<MISCREG_MON_NS0_WR, MISCREG_MON_NS1_WR>})
|
||||
{}
|
||||
uint64_t reset() const { return _reset; }
|
||||
uint64_t res0() const { return _res0; }
|
||||
@@ -1382,51 +1366,6 @@ namespace ArmISA
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
hypE2HSecureRead(bool v = true) const
|
||||
{
|
||||
entry.info[MISCREG_HYP_E2H_S_RD] = v;
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
hypE2HNonSecureRead(bool v = true) const
|
||||
{
|
||||
entry.info[MISCREG_HYP_E2H_NS_RD] = v;
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
hypE2HRead(bool v = true) const
|
||||
{
|
||||
hypE2HSecureRead(v);
|
||||
hypE2HNonSecureRead(v);
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
hypE2HSecureWrite(bool v = true) const
|
||||
{
|
||||
entry.info[MISCREG_HYP_E2H_S_WR] = v;
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
hypE2HNonSecureWrite(bool v = true) const
|
||||
{
|
||||
entry.info[MISCREG_HYP_E2H_NS_WR] = v;
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
hypE2HWrite(bool v = true) const
|
||||
{
|
||||
hypE2HSecureWrite(v);
|
||||
hypE2HNonSecureWrite(v);
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
hypE2H(bool v = true) const
|
||||
{
|
||||
hypE2HRead(v);
|
||||
hypE2HWrite(v);
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
hypSecureRead(bool v = true) const
|
||||
{
|
||||
entry.info[MISCREG_HYP_S_RD] = v;
|
||||
@@ -1441,7 +1380,6 @@ namespace ArmISA
|
||||
chain
|
||||
hypRead(bool v = true) const
|
||||
{
|
||||
hypE2HRead(v);
|
||||
hypSecureRead(v);
|
||||
hypNonSecureRead(v);
|
||||
return *this;
|
||||
@@ -1461,7 +1399,6 @@ namespace ArmISA
|
||||
chain
|
||||
hypWrite(bool v = true) const
|
||||
{
|
||||
hypE2HWrite(v);
|
||||
hypSecureWrite(v);
|
||||
hypNonSecureWrite(v);
|
||||
return *this;
|
||||
@@ -1469,8 +1406,6 @@ namespace ArmISA
|
||||
chain
|
||||
hypSecure(bool v = true) const
|
||||
{
|
||||
hypE2HSecureRead(v);
|
||||
hypE2HSecureWrite(v);
|
||||
hypSecureRead(v);
|
||||
hypSecureWrite(v);
|
||||
return *this;
|
||||
@@ -1483,49 +1418,26 @@ namespace ArmISA
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
monE2HRead(bool v = true) const
|
||||
{
|
||||
entry.info[MISCREG_MON_E2H_RD] = v;
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
monE2HWrite(bool v = true) const
|
||||
{
|
||||
entry.info[MISCREG_MON_E2H_WR] = v;
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
monE2H(bool v = true) const
|
||||
{
|
||||
monE2HRead(v);
|
||||
monE2HWrite(v);
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
monSecureRead(bool v = true) const
|
||||
{
|
||||
monE2HRead(v);
|
||||
entry.info[MISCREG_MON_NS0_RD] = v;
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
monSecureWrite(bool v = true) const
|
||||
{
|
||||
monE2HWrite(v);
|
||||
entry.info[MISCREG_MON_NS0_WR] = v;
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
monNonSecureRead(bool v = true) const
|
||||
{
|
||||
monE2HRead(v);
|
||||
entry.info[MISCREG_MON_NS1_RD] = v;
|
||||
return *this;
|
||||
}
|
||||
chain
|
||||
monNonSecureWrite(bool v = true) const
|
||||
{
|
||||
monE2HWrite(v);
|
||||
entry.info[MISCREG_MON_NS1_WR] = v;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user