]> Git Repo - J-linux.git/blob - arch/arm64/include/asm/rsi.h
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / arch / arm64 / include / asm / rsi.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2024 ARM Ltd.
4  */
5
6 #ifndef __ASM_RSI_H_
7 #define __ASM_RSI_H_
8
9 #include <linux/errno.h>
10 #include <linux/jump_label.h>
11 #include <asm/rsi_cmds.h>
12
13 DECLARE_STATIC_KEY_FALSE(rsi_present);
14
15 void __init arm64_rsi_init(void);
16
17 bool __arm64_is_protected_mmio(phys_addr_t base, size_t size);
18
19 static inline bool is_realm_world(void)
20 {
21         return static_branch_unlikely(&rsi_present);
22 }
23
24 static inline int rsi_set_memory_range(phys_addr_t start, phys_addr_t end,
25                                        enum ripas state, unsigned long flags)
26 {
27         unsigned long ret;
28         phys_addr_t top;
29
30         while (start != end) {
31                 ret = rsi_set_addr_range_state(start, end, state, flags, &top);
32                 if (ret || top < start || top > end)
33                         return -EINVAL;
34                 start = top;
35         }
36
37         return 0;
38 }
39
40 /*
41  * Convert the specified range to RAM. Do not use this if you rely on the
42  * contents of a page that may already be in RAM state.
43  */
44 static inline int rsi_set_memory_range_protected(phys_addr_t start,
45                                                  phys_addr_t end)
46 {
47         return rsi_set_memory_range(start, end, RSI_RIPAS_RAM,
48                                     RSI_CHANGE_DESTROYED);
49 }
50
51 /*
52  * Convert the specified range to RAM. Do not convert any pages that may have
53  * been DESTROYED, without our permission.
54  */
55 static inline int rsi_set_memory_range_protected_safe(phys_addr_t start,
56                                                       phys_addr_t end)
57 {
58         return rsi_set_memory_range(start, end, RSI_RIPAS_RAM,
59                                     RSI_NO_CHANGE_DESTROYED);
60 }
61
62 static inline int rsi_set_memory_range_shared(phys_addr_t start,
63                                               phys_addr_t end)
64 {
65         return rsi_set_memory_range(start, end, RSI_RIPAS_EMPTY,
66                                     RSI_CHANGE_DESTROYED);
67 }
68 #endif /* __ASM_RSI_H_ */
This page took 0.026509 seconds and 4 git commands to generate.