| /* SPDX-License-Identifier: BSD-2-Clause */ |
| /* |
| * Copyright (c) 2014, STMicroelectronics International N.V. |
| * Copyright (c) 2017, Linaro Limited |
| */ |
| |
| #ifndef TLB_HELPERS_H |
| #define TLB_HELPERS_H |
| |
| #include <arm.h> |
| |
| #ifndef __ASSEMBLER__ |
| #include <types_ext.h> |
| |
| void tlbi_all(void); |
| void tlbi_asid(unsigned long asid); |
| void tlbi_mva_allasid(unsigned long addr); |
| |
| static inline void tlbi_mva_allasid_nosync(vaddr_t va) |
| { |
| #ifdef ARM64 |
| tlbi_vaae1is(va >> TLBI_MVA_SHIFT); |
| #else |
| write_tlbimvaais(va); |
| #endif |
| } |
| |
| static inline void tlbi_mva_asid(vaddr_t va, uint32_t asid) |
| { |
| uint32_t a = asid & TLBI_ASID_MASK; |
| |
| dsb_ishst(); |
| #ifdef ARM64 |
| tlbi_vale1is((va >> TLBI_MVA_SHIFT) | SHIFT_U64(a, TLBI_ASID_SHIFT)); |
| tlbi_vale1is((va >> TLBI_MVA_SHIFT) | |
| SHIFT_U64(a | 1, TLBI_ASID_SHIFT)); |
| #else |
| write_tlbimvais((va & ~(BIT32(TLBI_MVA_SHIFT) - 1)) | a); |
| write_tlbimvais((va & ~(BIT32(TLBI_MVA_SHIFT) - 1)) | a | 1); |
| #endif |
| dsb_ish(); |
| isb(); |
| } |
| #endif /*!__ASSEMBLER__*/ |
| |
| #endif /* TLB_HELPERS_H */ |