Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.17-rc7 70 lines 1.7 kB view raw
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#define RSI_PDEV_NAME "arm-cca-dev" 14 15DECLARE_STATIC_KEY_FALSE(rsi_present); 16 17void __init arm64_rsi_init(void); 18 19bool __arm64_is_protected_mmio(phys_addr_t base, size_t size); 20 21static inline bool is_realm_world(void) 22{ 23 return static_branch_unlikely(&rsi_present); 24} 25 26static inline int rsi_set_memory_range(phys_addr_t start, phys_addr_t end, 27 enum ripas state, unsigned long flags) 28{ 29 unsigned long ret; 30 phys_addr_t top; 31 32 while (start != end) { 33 ret = rsi_set_addr_range_state(start, end, state, flags, &top); 34 if (ret || top < start || top > end) 35 return -EINVAL; 36 start = top; 37 } 38 39 return 0; 40} 41 42/* 43 * Convert the specified range to RAM. Do not use this if you rely on the 44 * contents of a page that may already be in RAM state. 45 */ 46static inline int rsi_set_memory_range_protected(phys_addr_t start, 47 phys_addr_t end) 48{ 49 return rsi_set_memory_range(start, end, RSI_RIPAS_RAM, 50 RSI_CHANGE_DESTROYED); 51} 52 53/* 54 * Convert the specified range to RAM. Do not convert any pages that may have 55 * been DESTROYED, without our permission. 56 */ 57static inline int rsi_set_memory_range_protected_safe(phys_addr_t start, 58 phys_addr_t end) 59{ 60 return rsi_set_memory_range(start, end, RSI_RIPAS_RAM, 61 RSI_NO_CHANGE_DESTROYED); 62} 63 64static inline int rsi_set_memory_range_shared(phys_addr_t start, 65 phys_addr_t end) 66{ 67 return rsi_set_memory_range(start, end, RSI_RIPAS_EMPTY, 68 RSI_CHANGE_DESTROYED); 69} 70#endif /* __ASM_RSI_H_ */