mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 08:33:17 +02:00
arm64: rsi: Map unprotected MMIO as decrypted
Instead of marking every MMIO as shared, check if the given region is "Protected" and apply the permissions accordingly. Reviewed-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Steven Price <steven.price@arm.com> Link: https://lore.kernel.org/r/20241017131434.40935-6-steven.price@arm.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
3715894376
commit
3c6c706139
|
|
@ -6,6 +6,8 @@
|
|||
#include <linux/jump_label.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/psci.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/rsi.h>
|
||||
|
||||
static struct realm_config config;
|
||||
|
|
@ -93,6 +95,16 @@ bool __arm64_is_protected_mmio(phys_addr_t base, size_t size)
|
|||
}
|
||||
EXPORT_SYMBOL(__arm64_is_protected_mmio);
|
||||
|
||||
static int realm_ioremap_hook(phys_addr_t phys, size_t size, pgprot_t *prot)
|
||||
{
|
||||
if (__arm64_is_protected_mmio(phys, size))
|
||||
*prot = pgprot_encrypted(*prot);
|
||||
else
|
||||
*prot = pgprot_decrypted(*prot);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __init arm64_rsi_init(void)
|
||||
{
|
||||
if (arm_smccc_1_1_get_conduit() != SMCCC_CONDUIT_SMC)
|
||||
|
|
@ -103,6 +115,9 @@ void __init arm64_rsi_init(void)
|
|||
return;
|
||||
prot_ns_shared = BIT(config.ipa_bits - 1);
|
||||
|
||||
if (arm64_ioremap_prot_hook_register(realm_ioremap_hook))
|
||||
return;
|
||||
|
||||
arm64_rsi_setup_memory();
|
||||
|
||||
static_branch_enable(&rsi_present);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user