]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: realm: Query IPA size from the RMM
authorSteven Price <steven.price@arm.com>
Thu, 17 Oct 2024 13:14:26 +0000 (14:14 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 23 Oct 2024 09:19:32 +0000 (10:19 +0100)
The top bit of the configured IPA size is used as an attribute to
control whether the address is protected or shared. Query the
configuration from the RMM to assertain which bit this is.

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Gavin Shan <gshan@redhat.com>
Co-developed-by: Suzuki K Poulose <suzuki.poulose@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-4-steven.price@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/pgtable-prot.h
arch/arm64/kernel/rsi.c

index 2a11d0c10760b99a9cec358baff8893c0259f6af..820a3b06f08c07735d9351917f5de75ddde54eca 100644 (file)
 
 #include <asm/cpufeature.h>
 #include <asm/pgtable-types.h>
+#include <asm/rsi.h>
 
 extern bool arm64_use_ng_mappings;
+extern unsigned long prot_ns_shared;
+
+#define PROT_NS_SHARED         (is_realm_world() ? prot_ns_shared : 0)
 
 #define PTE_MAYBE_NG           (arm64_use_ng_mappings ? PTE_NG : 0)
 #define PMD_MAYBE_NG           (arm64_use_ng_mappings ? PMD_SECT_NG : 0)
index c5758317dfeda24aac6c1ca011e657a9163c60a4..cea8f0d395912c0e178335587bb4504b7efe786b 100644 (file)
@@ -8,6 +8,11 @@
 #include <linux/psci.h>
 #include <asm/rsi.h>
 
+static struct realm_config config;
+
+unsigned long prot_ns_shared;
+EXPORT_SYMBOL(prot_ns_shared);
+
 DEFINE_STATIC_KEY_FALSE_RO(rsi_present);
 EXPORT_SYMBOL(rsi_present);
 
@@ -68,6 +73,9 @@ void __init arm64_rsi_init(void)
                return;
        if (!rsi_version_matches())
                return;
+       if (WARN_ON(rsi_get_realm_config(&config)))
+               return;
+       prot_ns_shared = BIT(config.ipa_bits - 1);
 
        arm64_rsi_setup_memory();