Phriction Trusted Firmware Trusted Firmware-A (TF-A) Patchdescription Libextensionspauthpauth Helperssvsplatarmboardfvp Rfvp R Pauth Helperss
Libextensionspauthpauth Helperssvsplatarmboardfvp Rfvp R Pauth Helperss
Libextensionspauthpauth Helperssvsplatarmboardfvp Rfvp R Pauth Helperss
/* /* * Copyright (c) 2019, Arm Limited. All rights reserved. | * Copyright (c) 2021, Arm Limited. All rights reserved. * * * SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause */ */ #include <arch.h> #include <arch.h> #include <asm_macros.S> #include <asm_macros.S> #include <lib/el3_runtime/cpu_data.h> #include <lib/el3_runtime/cpu_data.h> .global pauth_init_enable_el1 | .global pauth_init_enable_el2 .global pauth_disable_el1 | .global pauth_disable_el2 .global pauth_init_enable_el3 < .global pauth_disable_el3 < .globl pauth_load_bl31_apiakey < .globl pauth_load_bl1_apiakey_enable < /* ------------------------------------------------------- /* ------------------------------------------------------- * Program APIAKey_EL1 and enable pointer authentication i | * File contains EL2 versions of EL3 funcs in: > * .../lib/extensions/pauth/pauth_helpers.S * ------------------------------------------------------- * ------------------------------------------------------- */ */ func pauth_init_enable_el1 < stp x29, x30, [sp, #-16]! < < /* Initialize platform key */ < bl plat_init_apkey < < /* Program instruction key A used by the Trusted F < msr APIAKeyLo_EL1, x0 < msr APIAKeyHi_EL1, x1 < < /* Enable pointer authentication */ < mrs x0, sctlr_el1 < orr x0, x0, #SCTLR_EnIA_BIT < < #if ENABLE_BTI < /* Enable PAC branch type compatibility */ < bic x0, x0, #(SCTLR_BT0_BIT | SCTLR_BT1_BIT) < #endif < msr sctlr_el1, x0 < isb < < ldp x29, x30, [sp], #16 < ret < endfunc pauth_init_enable_el1 < /* ------------------------------------------------------- /* ------------------------------------------------------- * Disable pointer authentication in EL3 | * Program APIAKey_EL1 and enable pointer authentication i * ------------------------------------------------------- * ------------------------------------------------------- */ */ func pauth_disable_el1 | func pauth_init_enable_el2 mrs x0, sctlr_el1 < bic x0, x0, #SCTLR_EnIA_BIT < msr sctlr_el1, x0 < isb < ret < endfunc pauth_disable_el1 < < /* ------------------------------------------------------- < * Program APIAKey_EL1 and enable pointer authentication i < * ------------------------------------------------------- < */ < func pauth_init_enable_el3 < stp x29, x30, [sp, #-16]! stp x29, x30, [sp, #-16]! /* Initialize platform key */ /* Initialize platform key */ bl plat_init_apkey bl plat_init_apkey /* Program instruction key A used by the Trusted F /* Program instruction key A used by the Trusted F msr APIAKeyLo_EL1, x0 msr APIAKeyLo_EL1, x0 msr APIAKeyHi_EL1, x1 msr APIAKeyHi_EL1, x1 /* Enable pointer authentication */ /* Enable pointer authentication */ mrs x0, sctlr_el3 | mrs x0, sctlr_el2 orr x0, x0, #SCTLR_EnIA_BIT orr x0, x0, #SCTLR_EnIA_BIT #if ENABLE_BTI #if ENABLE_BTI /* Enable PAC branch type compatibility */ /* Enable PAC branch type compatibility */ bic x0, x0, #SCTLR_BT_BIT bic x0, x0, #SCTLR_BT_BIT #endif #endif msr sctlr_el3, x0 | msr sctlr_el2, x0 isb isb ldp x29, x30, [sp], #16 ldp x29, x30, [sp], #16 ret ret endfunc pauth_init_enable_el3 | endfunc pauth_init_enable_el2 /* ------------------------------------------------------- /* ------------------------------------------------------- * Disable pointer authentication in EL3 | * Disable pointer authentication in EL2 * ------------------------------------------------------- * ------------------------------------------------------- */ */ func pauth_disable_el3 | func pauth_disable_el2 mrs x0, sctlr_el3 | mrs x0, sctlr_el2 bic x0, x0, #SCTLR_EnIA_BIT bic x0, x0, #SCTLR_EnIA_BIT msr sctlr_el3, x0 | msr sctlr_el2, x0 isb < ret < endfunc pauth_disable_el3 < < /* ------------------------------------------------------- < * The following functions strictly follow the AArch64 PCS < * to use x9-x17 (temporary caller-saved registers) to loa < * the APIAKey_EL1 and enable pointer authentication. < * ------------------------------------------------------- < */ < func pauth_load_bl31_apiakey < /* tpidr_el3 contains the address of cpu_data stru < mrs x9, tpidr_el3 < < /* Load apiakey from cpu_data */ < ldp x10, x11, [x9, #CPU_DATA_APIAKEY_OFFSET] < < /* Program instruction key A */ < msr APIAKeyLo_EL1, x10 < msr APIAKeyHi_EL1, x11 < isb < ret < endfunc pauth_load_bl31_apiakey < < func pauth_load_bl1_apiakey_enable < /* Load instruction key A used by the Trusted Firm < adrp x9, bl1_apiakey < add x9, x9, :lo12:bl1_apiakey < ldp x10, x11, [x9] < < /* Program instruction key A */ < msr APIAKeyLo_EL1, x10 < msr APIAKeyHi_EL1, x11 < < /* Enable pointer authentication */ < mrs x9, sctlr_el3 < orr x9, x9, #SCTLR_EnIA_BIT < < #if ENABLE_BTI < /* Enable PAC branch type compatibility */ < bic x9, x9, #SCTLR_BT_BIT < #endif < msr sctlr_el3, x9 < isb isb ret ret endfunc pauth_load_bl1_apiakey_enable | endfunc pauth_disable_el2
Tags
None
Subscribers
None
- Last Author
- garymorrison-arm
- Last Edited
- Jul 2 2021, 10:57 PM