Correctly check for support of Address Authentication
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Fri, 1 Mar 2019 09:35:26 +0000 (09:35 +0000)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Fri, 1 Mar 2019 10:13:39 +0000 (10:13 +0000)
Check for both IMPLEMENTATION_DEFINED and Architected algorithms of
Address Authentication.

Change-Id: I209dcc6087172cfef7baf8d09e0454628f02cbd0
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
common/bl_common.c
include/arch/aarch64/arch_features.h

index 4e76dd3e6d1af1f32a6b4217814d9e6102ab20ff..61f031bfd10143c39dfd3972dbb291ea3cddf730 100644 (file)
@@ -265,7 +265,7 @@ void bl_handle_pauth(void)
         * system registers. Pointer authentication can't be enabled here or the
         * authentication will fail when returning from this function.
         */
-       assert(is_armv8_3_pauth_api_present());
+       assert(is_armv8_3_pauth_apa_api_present());
 
        uint64_t *apiakey = plat_init_apiakey();
 
index 495ecb3a2f0a426102a052abfa7276ddc7f4f46f..6af1d039797691a68c6f9858c9d7428646dbf6c8 100644 (file)
@@ -34,10 +34,12 @@ static inline bool is_armv8_3_pauth_present(void)
        return (read_id_aa64isar1_el1() & mask) != 0U;
 }
 
-static inline bool is_armv8_3_pauth_api_present(void)
+static inline bool is_armv8_3_pauth_apa_api_present(void)
 {
-       return ((read_id_aa64isar1_el1() >> ID_AA64ISAR1_API_SHIFT) &
-               ID_AA64ISAR1_API_MASK) != 0U;
+       uint64_t mask = (ID_AA64ISAR1_API_MASK << ID_AA64ISAR1_API_SHIFT) |
+                       (ID_AA64ISAR1_APA_MASK << ID_AA64ISAR1_APA_SHIFT);
+
+       return (read_id_aa64isar1_el1() & mask) != 0U;
 }
 
 static inline bool is_armv8_4_ttst_present(void)