mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-04 10:33:13 +00:00

The TSM module provides guest identification and attestation when a guest runs in CCA realm mode. By creating a dummy platform device, let's ensure the module is automatically loaded. The udev daemon loads the TSM module after it receives a device addition event. Once that happens, it can be used earlier in the boot process to decrypt the rootfs. Signed-off-by: Jeremy Linton <jeremy.linton@arm.com> Reviewed-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Steven Price <steven.price@arm.com> Link: https://lore.kernel.org/r/20241220181236.172060-2-jeremy.linton@arm.com Signed-off-by: Will Deacon <will@kernel.org>
71 lines
1.6 KiB
C
71 lines
1.6 KiB
C
/* 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_is_protected_mmio(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_ */
|