WRITE_SYSREG(n->arch.ttbcr, TCR_EL1);
WRITE_SYSREG64(n->arch.ttbr0, TTBR0_EL1);
WRITE_SYSREG64(n->arch.ttbr1, TTBR1_EL1);
+
+ /*
+ * Erratum #852523: DACR32_EL2 must be restored before one of the
+ * following sysregs: SCTLR_EL1, TCR_EL1, TTBR0_EL1, TTBR1_EL1 or
+ * CONTEXTIDR_EL1.
+ */
if ( is_32bit_domain(n->domain) )
WRITE_SYSREG(n->arch.dacr, DACR32_EL2);
WRITE_SYSREG64(n->arch.par, PAR_EL1);
/* Control Registers */
WRITE_SYSREG(n->arch.cpacr, CPACR_EL1);
+ /*
+ * This write to sysreg CONTEXTIDR_EL1 ensures we don't hit erratum
+ * #852523. I.e DACR32_EL2 is not correctly synchronized.
+ */
WRITE_SYSREG(n->arch.contextidr, CONTEXTIDR_EL1);
WRITE_SYSREG(n->arch.tpidr_el0, TPIDR_EL0);
WRITE_SYSREG(n->arch.tpidrro_el0, TPIDRRO_EL0);