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:
Giacomo Travaglini
2021-10-28 09:39:19 +01:00
parent d2910d68c1
commit d7854cce3b
2 changed files with 23 additions and 5 deletions

View File

@@ -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;
}

View File

@@ -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'])