summaryrefslogtreecommitdiff
path: root/core/arch/arm/kernel/tlb_helpers_a64.S
blob: 2381b981522e1ce42dbc318958e5d68364980398 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* SPDX-License-Identifier: BSD-2-Clause */
/*
 * Copyright (c) 2015-2017, Linaro Limited
 */

#include <arm64.h>
#include <asm.S>
#include <util.h>

/* void tlbi_all(void); */
FUNC tlbi_all , :
	dsb	ishst		/* Sync with table update */
	tlbi	vmalle1is	/* All tlb in inner shareable */
	dsb	ish		/* Sync with tlb invalidation completion */
	isb			/* Sync execution on tlb update */
	ret
END_FUNC tlbi_all

/* void tlbi_mva_allasid(vaddr_t mva); */
FUNC tlbi_mva_allasid , :
	lsr	x0, x0, #TLBI_MVA_SHIFT
	dsb	ishst		/* Sync with table update */
	tlbi	vaae1is, x0	/* Invalidate tlb by mva in inner shareable */
	dsb	ish		/* Sync with tlb invalidation completion */
	isb			/* Sync execution on tlb update */
	ret
END_FUNC tlbi_mva_allasid

/* void tlbi_asid(unsigned int asid); */
FUNC tlbi_asid , :
	lsl	x0, x0, #TLBI_ASID_SHIFT
	dsb	ishst		/* Sync with table update */
	tlbi	aside1is, x0	/* Invalidate tlb by asid in inner shareable */
	orr	x0, x0, #BIT(TLBI_ASID_SHIFT) /* Select the kernel ASID */
	tlbi	aside1is, x0	/* Invalidate tlb by asid in inner shareable */
	dsb	ish		/* Sync with tlb invalidation completion */
	isb			/* Sync execution on tlb update */
	ret
END_FUNC tlbi_asid