1 /*
2  * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
3  *
4  * SPDX-License-Identifier: GPL-2.0-only
5  */
6 
7 #pragma once
8 
9 #include <mode/machine.h>
10 #include <arch/smp/ipi_inline.h>
11 #if defined(CONFIG_ARM_HYPERVISOR_SUPPORT) && defined(CONFIG_ARCH_AARCH64)
12 #include <armv/tlb.h>
13 #endif
14 
invalidateTranslationSingleLocal(vptr_t vptr)15 static inline void invalidateTranslationSingleLocal(vptr_t vptr)
16 {
17 #if defined(CONFIG_ARM_HYPERVISOR_SUPPORT) && defined(CONFIG_ARCH_AARCH64)
18     invalidateLocalTLB_IPA_VMID(vptr);
19 #else
20     invalidateLocalTLB_VAASID(vptr);
21 #endif
22 }
23 
invalidateTranslationASIDLocal(hw_asid_t hw_asid)24 static inline void invalidateTranslationASIDLocal(hw_asid_t hw_asid)
25 {
26 #if defined(CONFIG_ARM_HYPERVISOR_SUPPORT) && defined(CONFIG_ARCH_AARCH64)
27     invalidateLocalTLB_VMID(hw_asid);
28 #else
29     invalidateLocalTLB_ASID(hw_asid);
30 #endif
31 }
32 
invalidateTranslationAllLocal(void)33 static inline void invalidateTranslationAllLocal(void)
34 {
35     invalidateLocalTLB();
36 }
37 
invalidateTranslationSingle(vptr_t vptr)38 static inline void invalidateTranslationSingle(vptr_t vptr)
39 {
40     invalidateTranslationSingleLocal(vptr);
41     SMP_COND_STATEMENT(doRemoteInvalidateTranslationSingle(vptr, MASK(CONFIG_MAX_NUM_NODES)));
42 }
43 
invalidateTranslationASID(hw_asid_t hw_asid)44 static inline void invalidateTranslationASID(hw_asid_t hw_asid)
45 {
46     invalidateTranslationASIDLocal(hw_asid);
47     SMP_COND_STATEMENT(doRemoteInvalidateTranslationASID(hw_asid, MASK(CONFIG_MAX_NUM_NODES)));
48 }
49 
invalidateTranslationAll(void)50 static inline void invalidateTranslationAll(void)
51 {
52     invalidateTranslationAllLocal();
53     SMP_COND_STATEMENT(doRemoteInvalidateTranslationAll(MASK(CONFIG_MAX_NUM_NODES)));
54 }
55 
56