]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
arm64: Add MT_S2{,_FWB}_AS_S1 encodings
authorMarc Zyngier <maz@kernel.org>
Fri, 23 Jan 2026 19:16:33 +0000 (19:16 +0000)
committerMarc Zyngier <maz@kernel.org>
Sun, 25 Jan 2026 16:17:21 +0000 (16:17 +0000)
pKVM usage of S2 translation on the host is purely for isolation
purposes, not translation. To that effect, the memory attributes
being used must be that of S1.

With FWB=0, this is easily achieved by using the Normal Cacheable
type (which is the weakest possible memory type) at S2, and let S1
pick something stronger as required.

With FWB=1, the attributes are combined in a different way, and we
cannot arbitrarily use Normal Cacheable. We can, however, use a
memattr encoding that indicates that the final attributes are that
of Stage-1.

Add these encoding and a few pointers to the relevant parts of the
specification. It might come handy some day.

Reviewed-by: Joey Gouly <joey.gouly@arm.com>
Reviewed-by: Fuad Tabba <tabba@google.com>
Tested-by: Fuad Tabba <tabba@google.com>
Link: https://patch.msgid.link/20260123191637.715429-2-maz@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/include/asm/memory.h

index 9d54b2ea49d66b4daf3c151329a9aed0e90fdbba..a2b7a33966ff1dfae2ff8f30d821b7e3142d0341 100644 (file)
 #define MT_DEVICE_nGnRE                4
 
 /*
- * Memory types for Stage-2 translation
+ * Memory types for Stage-2 translation when HCR_EL2.FWB=0. See R_HMNDG,
+ * R_TNHFM, R_GQFSF and I_MCQKW for the details on how these attributes get
+ * combined with Stage-1.
  */
 #define MT_S2_NORMAL           0xf
 #define MT_S2_NORMAL_NC                0x5
 #define MT_S2_DEVICE_nGnRE     0x1
+#define MT_S2_AS_S1            MT_S2_NORMAL
 
 /*
- * Memory types for Stage-2 translation when ID_AA64MMFR2_EL1.FWB is 0001
- * Stage-2 enforces Normal-WB and Device-nGnRE
+ * Memory types for Stage-2 translation when HCR_EL2.FWB=1. Stage-2 enforces
+ * Normal-WB and Device-nGnRE, unless we actively say that S1 wins. See
+ * R_VRJSW and R_RHWZM for details.
  */
 #define MT_S2_FWB_NORMAL       6
 #define MT_S2_FWB_NORMAL_NC    5
 #define MT_S2_FWB_DEVICE_nGnRE 1
+#define MT_S2_FWB_AS_S1                7
 
 #ifdef CONFIG_ARM64_4K_PAGES
 #define IOREMAP_MAX_ORDER      (PUD_SHIFT)