arch-arm: Implement DSB Shareable as a DVM op
JIRA: https://gem5.atlassian.net/browse/GEM5-1097 Change-Id: I52c965817dd9d70feca31d1ec2981ad3a090e6a3 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/56607 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -407,7 +407,8 @@ namespace Aarch64
|
||||
case 0x0: // OuterShareable
|
||||
case 0x2: // InnerShareable
|
||||
case 0x3: // FullSystem
|
||||
return new Dsb64Shareable(machInst);
|
||||
return new Dsb64Shareable(
|
||||
machInst, dec.dvmEnabled);
|
||||
default:
|
||||
GEM5_UNREACHABLE;
|
||||
}
|
||||
|
||||
@@ -179,12 +179,29 @@ let {{
|
||||
decoder_output += BasicConstructor64.subst(dsbLocalIop)
|
||||
exec_output += BasicExecute.subst(dsbLocalIop)
|
||||
|
||||
dsbShareableIop = ArmInstObjParams("dsb", "Dsb64Shareable", "ArmStaticInst", "",
|
||||
dvmCode = '''
|
||||
if (dvmEnabled) {
|
||||
Request::Flags memAccessFlags =
|
||||
Request::STRICT_ORDER|Request::TLBI_SYNC;
|
||||
|
||||
if (!PendingDvm) {
|
||||
memAccessFlags = memAccessFlags | Request::NO_ACCESS;
|
||||
}
|
||||
|
||||
fault = xc->initiateSpecialMemCmd(memAccessFlags);
|
||||
|
||||
PendingDvm = false;
|
||||
}
|
||||
'''
|
||||
dsbShareableIop = ArmInstObjParams("dsb", "Dsb64Shareable", "ArmStaticInst",
|
||||
{ "code" : "", "dvm_code" : dvmCode },
|
||||
['IsReadBarrier', 'IsWriteBarrier',
|
||||
'IsSerializeAfter'])
|
||||
header_output += BasicDeclare.subst(dsbShareableIop)
|
||||
decoder_output += BasicConstructor64.subst(dsbShareableIop)
|
||||
'IsSerializeAfter'])
|
||||
header_output += DvmDeclare.subst(dsbShareableIop)
|
||||
decoder_output += DvmConstructor.subst(dsbShareableIop)
|
||||
exec_output += BasicExecute.subst(dsbShareableIop)
|
||||
exec_output += DvmInitiateAcc.subst(dsbShareableIop)
|
||||
exec_output += DvmCompleteAcc.subst(dsbShareableIop)
|
||||
|
||||
dmbIop = ArmInstObjParams("dmb", "Dmb64", "ArmStaticInst", "",
|
||||
['IsReadBarrier', 'IsWriteBarrier'])
|
||||
|
||||
Reference in New Issue
Block a user