p->arch.tpidruro = READ_CP32(TPIDRURO);
p->arch.tpidrprw = READ_CP32(TPIDRPRW);
+ /* Arch timer */
+ p->arch.cntvoff = READ_CP64(CNTVOFF);
+ p->arch.cntv_cval = READ_CP64(CNTV_CVAL);
+ p->arch.cntv_ctl = READ_CP32(CNTV_CTL);
+
/* XXX only save these if ThumbEE e.g. ID_PFR0.THUMB_EE_SUPPORT */
p->arch.teecr = READ_CP32(TEECR);
p->arch.teehbr = READ_CP32(TEEHBR);
WRITE_CP32(n->arch.mair1, MAIR1);
isb();
+ /* Arch timer */
+ WRITE_CP64(n->arch.cntvoff, CNTVOFF);
+ WRITE_CP64(n->arch.cntv_cval, CNTV_CVAL);
+ WRITE_CP32(n->arch.cntv_ctl, CNTV_CTL);
+
/* Control Registers */
WRITE_CP32(n->arch.actlr, ACTLR);
WRITE_CP32(n->arch.sctlr, SCTLR);
#define CNTP_CTL p15,0,c14,c2,1 /* Physical Timer control register */
#define CNTVCT p15,1,c14 /* Time counter value + offset */
#define CNTP_CVAL p15,2,c14 /* Physical Timer comparator */
+#define CNTV_CVAL p15,3,c14 /* Virt. Timer comparator */
#define CNTVOFF p15,4,c14 /* Time counter offset */
#define CNTHCTL p15,4,c14,c1,0 /* Time counter hyp. control */
#define CNTHP_TVAL p15,4,c14,c2,0 /* Hyp. Timer value */
#define CNTHP_CTL p15,4,c14,c2,1 /* Hyp. Timer control register */
+#define CNTV_TVAL p15,0,c14,c3,0 /* Virt. Timer value */
+#define CNTV_CTL p15,0,c14,c3,1 /* Virt. TImer control register */
#define CNTHP_CVAL p15,6,c14 /* Hyp. Timer comparator */
/* CP15 CR15: Implementation Defined Registers */