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 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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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'])
|
||||||
|
|||||||
Reference in New Issue
Block a user