armv8: Initialize CNTFRQ if at highest exception level
CNTFRQ_EL0 is only writable from the highest supported exception level on the platform. For Armv8-A, this is typically EL3, but technically EL2 and EL3 are optional so it may need to be initialized at EL2 or EL1. For Armv8-R, the highest exception level is always EL2. This patch moves the initialization outside of the switch_el block and uses a new macro branch_if_not_highest_el which dynamically detects whether it is at the highest supported exception level. Linux's docs state that CNTFRQ_EL0 should be initialized by the bootloader. If not set, the the U-Boot prompt countdown hangs. Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
This commit is contained in:
@@ -79,6 +79,12 @@
|
||||
#define HCR_EL2_RW_AARCH32 (0 << 31) /* Lower levels are AArch32 */
|
||||
#define HCR_EL2_HCD_DIS (1 << 29) /* Hypervisor Call disabled */
|
||||
|
||||
/*
|
||||
* ID_AA64PFR0_EL1 bits definitions
|
||||
*/
|
||||
#define ID_AA64PFR0_EL1_EL3 (0xF << 12) /* EL3 implemented */
|
||||
#define ID_AA64PFR0_EL1_EL2 (0xF << 8) /* EL2 implemented */
|
||||
|
||||
/*
|
||||
* CPACR_EL1 bits definitions
|
||||
*/
|
||||
|
Reference in New Issue
Block a user