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 0x0: // OuterShareable
case 0x2: // InnerShareable case 0x2: // InnerShareable
case 0x3: // FullSystem case 0x3: // FullSystem
return new Dsb64Shareable(machInst); return new Dsb64Shareable(
machInst, dec.dvmEnabled);
default: default:
GEM5_UNREACHABLE; GEM5_UNREACHABLE;
} }

View File

@@ -179,12 +179,29 @@ let {{
decoder_output += BasicConstructor64.subst(dsbLocalIop) decoder_output += BasicConstructor64.subst(dsbLocalIop)
exec_output += BasicExecute.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', ['IsReadBarrier', 'IsWriteBarrier',
'IsSerializeAfter']) 'IsSerializeAfter'])
header_output += BasicDeclare.subst(dsbShareableIop) header_output += DvmDeclare.subst(dsbShareableIop)
decoder_output += BasicConstructor64.subst(dsbShareableIop) decoder_output += DvmConstructor.subst(dsbShareableIop)
exec_output += BasicExecute.subst(dsbShareableIop) exec_output += BasicExecute.subst(dsbShareableIop)
exec_output += DvmInitiateAcc.subst(dsbShareableIop)
exec_output += DvmCompleteAcc.subst(dsbShareableIop)
dmbIop = ArmInstObjParams("dmb", "Dmb64", "ArmStaticInst", "", dmbIop = ArmInstObjParams("dmb", "Dmb64", "ArmStaticInst", "",
['IsReadBarrier', 'IsWriteBarrier']) ['IsReadBarrier', 'IsWriteBarrier'])