arm64: head.S: Fix CNTHCTL_EL2 access on VHE system
authorJintack <jintack@cs.columbia.edu>
Tue, 29 Nov 2016 02:13:02 +0000 (21:13 -0500)
committerCatalin Marinas <catalin.marinas@arm.com>
Tue, 29 Nov 2016 11:37:05 +0000 (11:37 +0000)
commit1650ac49c2a0fb8188a2c8eac36537640ed57892
tree4bf0a2d43410483fc34581b34b70d62e75805db5
parentee6a7fce8e5ecd90794ad7c9f62518c753fb3cb6
arm64: head.S: Fix CNTHCTL_EL2 access on VHE system

Bit positions of CNTHCTL_EL2 are changing depending on HCR_EL2.E2H bit.
EL1PCEN and EL1PCTEN are 1st and 0th bits when E2H is not set, but they
are 11th and 10th bits respectively when E2H is set.  Current code is
unintentionally setting wrong bits to CNTHCTL_EL2 with E2H set.

In fact, we don't need to set those two bits, which allow EL1 and EL0 to
access physical timer and counter respectively, if E2H and TGE are set
for the host kernel. They will be configured later as necessary. First,
we don't need to configure those bits for EL1, since the host kernel
runs in EL2.  It is a hypervisor's responsibility to configure them
before entering a VM, which runs in EL0 and EL1. Second, EL0 accesses
are configured in the later stage of boot process.

Signed-off-by: Jintack Lim <jintack@cs.columbia.edu>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/head.S