| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (C) 2024 ARM Ltd.
- */
- #ifndef __ASM_RSI_H_
- #define __ASM_RSI_H_
- #include <linux/errno.h>
- #include <linux/jump_label.h>
- #include <asm/rsi_cmds.h>
- #define RSI_PDEV_NAME "arm-cca-dev"
- DECLARE_STATIC_KEY_FALSE(rsi_present);
- void __init arm64_rsi_init(void);
- bool arm64_rsi_is_protected(phys_addr_t base, size_t size);
- static inline bool is_realm_world(void)
- {
- return static_branch_unlikely(&rsi_present);
- }
- static inline int rsi_set_memory_range(phys_addr_t start, phys_addr_t end,
- enum ripas state, unsigned long flags)
- {
- unsigned long ret;
- phys_addr_t top;
- while (start != end) {
- ret = rsi_set_addr_range_state(start, end, state, flags, &top);
- if (ret || top < start || top > end)
- return -EINVAL;
- start = top;
- }
- return 0;
- }
- /*
- * Convert the specified range to RAM. Do not use this if you rely on the
- * contents of a page that may already be in RAM state.
- */
- static inline int rsi_set_memory_range_protected(phys_addr_t start,
- phys_addr_t end)
- {
- return rsi_set_memory_range(start, end, RSI_RIPAS_RAM,
- RSI_CHANGE_DESTROYED);
- }
- /*
- * Convert the specified range to RAM. Do not convert any pages that may have
- * been DESTROYED, without our permission.
- */
- static inline int rsi_set_memory_range_protected_safe(phys_addr_t start,
- phys_addr_t end)
- {
- return rsi_set_memory_range(start, end, RSI_RIPAS_RAM,
- RSI_NO_CHANGE_DESTROYED);
- }
- static inline int rsi_set_memory_range_shared(phys_addr_t start,
- phys_addr_t end)
- {
- return rsi_set_memory_range(start, end, RSI_RIPAS_EMPTY,
- RSI_CHANGE_DESTROYED);
- }
- #endif /* __ASM_RSI_H_ */
|