__vcpu_sys_reg(vcpu, TTBR1_EL2) = read_sysreg_el1(SYS_TTBR1);
                __vcpu_sys_reg(vcpu, TCR_EL2)   = read_sysreg_el1(SYS_TCR);
 
-               if (ctxt_has_tcrx(&vcpu->arch.ctxt))
+               if (ctxt_has_tcrx(&vcpu->arch.ctxt)) {
                        __vcpu_sys_reg(vcpu, TCR2_EL2) = read_sysreg_el1(SYS_TCR2);
 
+                       if (ctxt_has_s1pie(&vcpu->arch.ctxt)) {
+                               __vcpu_sys_reg(vcpu, PIRE0_EL2) = read_sysreg_el1(SYS_PIRE0);
+                               __vcpu_sys_reg(vcpu, PIR_EL2) = read_sysreg_el1(SYS_PIR);
+                       }
+               }
+
                /*
                 * The EL1 view of CNTKCTL_EL1 has a bunch of RES0 bits where
                 * the interesting CNTHCTL_EL2 bits live. So preserve these
                write_sysreg_el1(val, SYS_TCR);
        }
 
-       if (ctxt_has_tcrx(&vcpu->arch.ctxt))
+       if (ctxt_has_tcrx(&vcpu->arch.ctxt)) {
                write_sysreg_el1(__vcpu_sys_reg(vcpu, TCR2_EL2), SYS_TCR2);
 
+               if (ctxt_has_s1pie(&vcpu->arch.ctxt)) {
+                       write_sysreg_el1(__vcpu_sys_reg(vcpu, PIR_EL2), SYS_PIR);
+                       write_sysreg_el1(__vcpu_sys_reg(vcpu, PIRE0_EL2), SYS_PIRE0);
+               }
+       }
 
        write_sysreg_el1(__vcpu_sys_reg(vcpu, ESR_EL2),         SYS_ESR);
        write_sysreg_el1(__vcpu_sys_reg(vcpu, AFSR0_EL2),       SYS_AFSR0);