xref: /rk3399_ARM-atf/lib/xlat_tables_v2/xlat_tables_private.h (revision e7b9886c7cbfac488b766b24379249853f78a040)
1 /*
2  * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef XLAT_TABLES_PRIVATE_H
8 #define XLAT_TABLES_PRIVATE_H
9 
10 #include <platform_def.h>
11 #include <xlat_tables_defs.h>
12 
13 #if PLAT_XLAT_TABLES_DYNAMIC
14 /*
15  * Private shifts and masks to access fields of an mmap attribute
16  */
17 /* Dynamic or static */
18 #define MT_DYN_SHIFT		U(31)
19 
20 /*
21  * Memory mapping private attributes
22  *
23  * Private attributes not exposed in the public header.
24  */
25 
26 /*
27  * Regions mapped before the MMU can't be unmapped dynamically (they are
28  * static) and regions mapped with MMU enabled can be unmapped. This
29  * behaviour can't be overridden.
30  *
31  * Static regions can overlap each other, dynamic regions can't.
32  */
33 #define MT_STATIC	(U(0) << MT_DYN_SHIFT)
34 #define MT_DYNAMIC	(U(1) << MT_DYN_SHIFT)
35 
36 #endif /* PLAT_XLAT_TABLES_DYNAMIC */
37 
38 extern uint64_t mmu_cfg_params[MMU_CFG_PARAM_MAX];
39 
40 /*
41  * Return the execute-never mask that will prevent instruction fetch at the
42  * given translation regime.
43  */
44 uint64_t xlat_arch_regime_get_xn_desc(int xlat_regime);
45 
46 /*
47  * Invalidate all TLB entries that match the given virtual address. This
48  * operation applies to all PEs in the same Inner Shareable domain as the PE
49  * that executes this function. This functions must be called for every
50  * translation table entry that is modified. It only affects the specified
51  * translation regime.
52  *
53  * Note, however, that it is architecturally UNDEFINED to invalidate TLB entries
54  * pertaining to a higher exception level, e.g. invalidating EL3 entries from
55  * S-EL1.
56  */
57 void xlat_arch_tlbi_va(uintptr_t va, int xlat_regime);
58 
59 /*
60  * This function has to be called at the end of any code that uses the function
61  * xlat_arch_tlbi_va().
62  */
63 void xlat_arch_tlbi_va_sync(void);
64 
65 /* Print VA, PA, size and attributes of all regions in the mmap array. */
66 void xlat_mmap_print(const mmap_region_t *mmap);
67 
68 /*
69  * Print the current state of the translation tables by reading them from
70  * memory.
71  */
72 void xlat_tables_print(xlat_ctx_t *ctx);
73 
74 /*
75  * Returns a block/page table descriptor for the given level and attributes.
76  */
77 uint64_t xlat_desc(const xlat_ctx_t *ctx, uint32_t attr,
78 		   unsigned long long addr_pa, unsigned int level);
79 
80 /*
81  * Architecture-specific initialization code.
82  */
83 
84 /* Returns the current Exception Level. The returned EL must be 1 or higher. */
85 unsigned int xlat_arch_current_el(void);
86 
87 /*
88  * Return the maximum physical address supported by the hardware.
89  * This value depends on the execution state (AArch32/AArch64).
90  */
91 unsigned long long xlat_arch_get_max_supported_pa(void);
92 
93 /*
94  * Return 1 if the MMU of the translation regime managed by the given xlat_ctx_t
95  * is enabled, 0 otherwise.
96  */
97 int is_mmu_enabled_ctx(const xlat_ctx_t *ctx);
98 
99 #endif /* XLAT_TABLES_PRIVATE_H */
100