Giacomo Travaglini has submitted this change and it was merged. ( https://gem5-review.googlesource.com/c/public/gem5/+/13776 )

Change subject: arch-arm: Fix HVC trapping beahviour
......................................................................

arch-arm: Fix HVC trapping beahviour

This patch is fixing HVC trapping behaviour, reusing the pseudocode
implementation provided in the arm arm.

Change-Id: I0bc81478400b99d84534c1c8871f894722f547c5
Signed-off-by: Giacomo Travaglini <giacomo.travagl...@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandb...@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/13776
Maintainer: Andreas Sandberg <andreas.sandb...@arm.com>
---
M src/arch/arm/isa/insts/misc64.isa
1 file changed, 13 insertions(+), 3 deletions(-)

Approvals:
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved



diff --git a/src/arch/arm/isa/insts/misc64.isa b/src/arch/arm/isa/insts/misc64.isa
index 2621905..6d40dd9 100644
--- a/src/arch/arm/isa/insts/misc64.isa
+++ b/src/arch/arm/isa/insts/misc64.isa
@@ -51,10 +51,20 @@

     hvcCode = '''
     SCR scr = Scr64;
+    HCR hcr = Hcr64;
+    CPSR cpsr = Cpsr;

-    if (!ArmSystem::haveVirtualization(xc->tcBase()) ||
-        (ArmSystem::haveSecurity(xc->tcBase()) && (!scr.ns || !scr.hce))) {
-        fault = disabledFault();
+    auto tc = xc->tcBase();
+    ExceptionLevel pstate_EL = (ExceptionLevel)(uint8_t)(cpsr.el);
+
+    bool unalloc_encod = !ArmSystem::haveEL(tc, EL2) || pstate_EL == EL0 ||
+                         (pstate_EL == EL1 && inSecureState(tc));
+
+    bool hvc_enable = ArmSystem::haveEL(tc, EL3) ?
+        scr.hce : !hcr.hcd;
+
+    if (unalloc_encod || !hvc_enable) {
+        fault = undefinedFault64(tc, pstate_EL);
     } else {
fault = std::make_shared<HypervisorCall>(machInst, bits(machInst, 20, 5));
     }

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13776
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I0bc81478400b99d84534c1c8871f894722f547c5
Gerrit-Change-Number: 13776
Gerrit-PatchSet: 2
Gerrit-Owner: Giacomo Travaglini <giacomo.travagl...@arm.com>
Gerrit-Reviewer: Andreas Sandberg <andreas.sandb...@arm.com>
Gerrit-Reviewer: Giacomo Travaglini <giacomo.travagl...@arm.com>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to