blob: d33dd5c01e72bafec904bd39aa251272bf3ff47c [file] [log] [blame]
/* 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 */