|
@@ -530,6 +530,26 @@ void arm64_set_ssbd_mitigation(bool state);
|
|
|
static inline void arm64_set_ssbd_mitigation(bool state) {}
|
|
|
#endif
|
|
|
|
|
|
+static inline u32 id_aa64mmfr0_parange_to_phys_shift(int parange)
|
|
|
+{
|
|
|
+ switch (parange) {
|
|
|
+ case 0: return 32;
|
|
|
+ case 1: return 36;
|
|
|
+ case 2: return 40;
|
|
|
+ case 3: return 42;
|
|
|
+ case 4: return 44;
|
|
|
+ case 5: return 48;
|
|
|
+ case 6: return 52;
|
|
|
+ /*
|
|
|
+ * A future PE could use a value unknown to the kernel.
|
|
|
+ * However, by the "D10.1.4 Principles of the ID scheme
|
|
|
+ * for fields in ID registers", ARM DDI 0487C.a, any new
|
|
|
+ * value is guaranteed to be higher than what we know already.
|
|
|
+ * As a safe limit, we return the limit supported by the kernel.
|
|
|
+ */
|
|
|
+ default: return CONFIG_ARM64_PA_BITS;
|
|
|
+ }
|
|
|
+}
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
|
|
#endif
|