Merge changes I5d8e169d,I832b705d,Ic8af83b8,Ib3c9acb8,I2e357326, ... into main

* changes:
  vmbase: Support 16KiB MMIO_GUARD granule
  vmbase: Detect dynamic resharing of UART
  vmbase: Move MMIO_GUARD granule check out of ::hyp
  vmbase: Harden MMIO_GUARD with RAII
  vmbase: Clean up MMIO_GUARD in MemoryTracker
  vmbase: Introduce compat_android_13 feature
  vmbase: Remove now duplicate hyp::util
  vmbase: Integrate libhyp as module
  libs: Prepare libhyp for move
diff --git a/pvmfw/platform.dts b/pvmfw/platform.dts
index 92ab19c..68acf13 100644
--- a/pvmfw/platform.dts
+++ b/pvmfw/platform.dts
@@ -8,6 +8,42 @@
 #define PLACEHOLDER2	PLACEHOLDER PLACEHOLDER
 #define PLACEHOLDER4	PLACEHOLDER2 PLACEHOLDER2
 
+#define PLACEHOLDER_CPU_MAP_CORE(n) core##n { cpu = <PLACEHOLDER>; };
+#define PLACEHOLDER_CPU_MAP_CLUSTER \
+	PLACEHOLDER_CPU_MAP_CORE(0) \
+	PLACEHOLDER_CPU_MAP_CORE(1) \
+	PLACEHOLDER_CPU_MAP_CORE(2) \
+	PLACEHOLDER_CPU_MAP_CORE(3) \
+	PLACEHOLDER_CPU_MAP_CORE(4) \
+	PLACEHOLDER_CPU_MAP_CORE(5) \
+	PLACEHOLDER_CPU_MAP_CORE(6) \
+	PLACEHOLDER_CPU_MAP_CORE(7) \
+	PLACEHOLDER_CPU_MAP_CORE(8) \
+	PLACEHOLDER_CPU_MAP_CORE(9)
+
+#define PLACEHOLDER_OPP_TABLE_ENTRY(n) opp##n { opp-hz = <PLACEHOLDER2>; };
+#define PLACEHOLDER_OPP_TABLE \
+	PLACEHOLDER_OPP_TABLE_ENTRY(1) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(2) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(3) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(4) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(5) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(6) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(7) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(8) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(9) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(10) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(11) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(12) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(13) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(14) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(15) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(16) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(17) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(18) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(19) \
+	PLACEHOLDER_OPP_TABLE_ENTRY(20)
+
 #define IRQ_BASE 4
 
 /dts-v1/;
@@ -54,42 +90,9 @@
 		#size-cells = <0>;
 
 		cpu-map {
-			cluster0 {
-				core0 { cpu = <PLACEHOLDER>; };
-				core1 { cpu = <PLACEHOLDER>; };
-				core2 { cpu = <PLACEHOLDER>; };
-				core3 { cpu = <PLACEHOLDER>; };
-				core4 { cpu = <PLACEHOLDER>; };
-				core5 { cpu = <PLACEHOLDER>; };
-				core6 { cpu = <PLACEHOLDER>; };
-				core7 { cpu = <PLACEHOLDER>; };
-				core8 { cpu = <PLACEHOLDER>; };
-				core9 { cpu = <PLACEHOLDER>; };
-			};
-			cluster1 {
-				core0 { cpu = <PLACEHOLDER>; };
-				core1 { cpu = <PLACEHOLDER>; };
-				core2 { cpu = <PLACEHOLDER>; };
-				core3 { cpu = <PLACEHOLDER>; };
-				core4 { cpu = <PLACEHOLDER>; };
-				core5 { cpu = <PLACEHOLDER>; };
-				core6 { cpu = <PLACEHOLDER>; };
-				core7 { cpu = <PLACEHOLDER>; };
-				core8 { cpu = <PLACEHOLDER>; };
-				core9 { cpu = <PLACEHOLDER>; };
-			};
-			cluster2 {
-				core0 { cpu = <PLACEHOLDER>; };
-				core1 { cpu = <PLACEHOLDER>; };
-				core2 { cpu = <PLACEHOLDER>; };
-				core3 { cpu = <PLACEHOLDER>; };
-				core4 { cpu = <PLACEHOLDER>; };
-				core5 { cpu = <PLACEHOLDER>; };
-				core6 { cpu = <PLACEHOLDER>; };
-				core7 { cpu = <PLACEHOLDER>; };
-				core8 { cpu = <PLACEHOLDER>; };
-				core9 { cpu = <PLACEHOLDER>; };
-			};
+			cluster0 { PLACEHOLDER_CPU_MAP_CLUSTER };
+			cluster1 { PLACEHOLDER_CPU_MAP_CLUSTER };
+			cluster2 { PLACEHOLDER_CPU_MAP_CLUSTER };
 		};
 
 		cpu0: cpu@0 {
@@ -101,27 +104,7 @@
 			operating-points-v2 = <&opp_table0>;
 			opp_table0: opp-table-0 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu1: cpu@1 {
@@ -133,27 +116,7 @@
 			operating-points-v2 = <&opp_table1>;
 			opp_table1: opp-table-1 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu2: cpu@2 {
@@ -165,27 +128,7 @@
 			operating-points-v2 = <&opp_table2>;
 			opp_table2: opp-table-2 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu3: cpu@3 {
@@ -197,27 +140,7 @@
 			operating-points-v2 = <&opp_table3>;
 			opp_table3: opp-table-3 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu4: cpu@4 {
@@ -229,27 +152,7 @@
 			operating-points-v2 = <&opp_table4>;
 			opp_table4: opp-table-4 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu5: cpu@5 {
@@ -261,27 +164,7 @@
 			operating-points-v2 = <&opp_table5>;
 			opp_table5: opp-table-5 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu6: cpu@6 {
@@ -293,27 +176,7 @@
 			operating-points-v2 = <&opp_table6>;
 			opp_table6: opp-table-6 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu7: cpu@7 {
@@ -325,27 +188,7 @@
 			operating-points-v2 = <&opp_table7>;
 			opp_table7: opp-table-7 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu8: cpu@8 {
@@ -357,27 +200,7 @@
 			operating-points-v2 = <&opp_table8>;
 			opp_table8: opp-table-8 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu9: cpu@9 {
@@ -389,27 +212,7 @@
 			operating-points-v2 = <&opp_table9>;
 			opp_table9: opp-table-9 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu10: cpu@a {
@@ -421,27 +224,7 @@
 			operating-points-v2 = <&opp_table10>;
 			opp_table10: opp-table-10 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu11: cpu@b {
@@ -453,27 +236,7 @@
 			operating-points-v2 = <&opp_table11>;
 			opp_table11: opp-table-11 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu12: cpu@c {
@@ -485,27 +248,7 @@
 			operating-points-v2 = <&opp_table12>;
 			opp_table12: opp-table-12 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu13: cpu@d {
@@ -517,27 +260,7 @@
 			operating-points-v2 = <&opp_table13>;
 			opp_table13: opp-table-13 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu14: cpu@e {
@@ -549,27 +272,7 @@
 			operating-points-v2 = <&opp_table14>;
 			opp_table14: opp-table-14 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 		cpu15: cpu@f {
@@ -581,27 +284,7 @@
 			operating-points-v2 = <&opp_table15>;
 			opp_table15: opp-table-15 {
 				compatible = "operating-points-v2";
-
-				opp1 { opp-hz = <PLACEHOLDER2>; };
-				opp2 { opp-hz = <PLACEHOLDER2>; };
-				opp3 { opp-hz = <PLACEHOLDER2>; };
-				opp4 { opp-hz = <PLACEHOLDER2>; };
-				opp5 { opp-hz = <PLACEHOLDER2>; };
-				opp6 { opp-hz = <PLACEHOLDER2>; };
-				opp7 { opp-hz = <PLACEHOLDER2>; };
-				opp8 { opp-hz = <PLACEHOLDER2>; };
-				opp9 { opp-hz = <PLACEHOLDER2>; };
-				opp10 { opp-hz = <PLACEHOLDER2>; };
-				opp11 { opp-hz = <PLACEHOLDER2>; };
-				opp12 { opp-hz = <PLACEHOLDER2>; };
-				opp13 { opp-hz = <PLACEHOLDER2>; };
-				opp14 { opp-hz = <PLACEHOLDER2>; };
-				opp15 { opp-hz = <PLACEHOLDER2>; };
-				opp16 { opp-hz = <PLACEHOLDER2>; };
-				opp17 { opp-hz = <PLACEHOLDER2>; };
-				opp18 { opp-hz = <PLACEHOLDER2>; };
-				opp19 { opp-hz = <PLACEHOLDER2>; };
-				opp20 { opp-hz = <PLACEHOLDER2>; };
+				PLACEHOLDER_OPP_TABLE
 			};
 		};
 	};
diff --git a/tests/helper/src/java/com/android/microdroid/test/common/DeviceProperties.java b/tests/helper/src/java/com/android/microdroid/test/common/DeviceProperties.java
index 2ea748b..69527be 100644
--- a/tests/helper/src/java/com/android/microdroid/test/common/DeviceProperties.java
+++ b/tests/helper/src/java/com/android/microdroid/test/common/DeviceProperties.java
@@ -32,6 +32,7 @@
     private static final String KEY_METRICS_TAG = "debug.hypervisor.metrics_tag";
 
     private static final String CUTTLEFISH_DEVICE_PREFIX = "vsoc_";
+    private static final String CUTTLEFISH_ARM64_DEVICE_PREFIX = "vsoc_arm64";
     private static final String USER_BUILD_TYPE = "user";
     private static final String HWASAN_SUFFIX = "_hwasan";
 
@@ -55,6 +56,15 @@
     }
 
     /**
+     * @return whether the device is a cuttlefish device running on 64 bit Arm.
+     */
+    public boolean isCuttlefishArm64() {
+        String vendorDeviceName = getProperty(KEY_VENDOR_DEVICE);
+        return vendorDeviceName != null
+                && vendorDeviceName.startsWith(CUTTLEFISH_ARM64_DEVICE_PREFIX);
+    }
+
+    /**
      * @return whether the build is HWASAN.
      */
     public boolean isHwasan() {
diff --git a/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java b/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java
index d3f6093..6040531 100644
--- a/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java
+++ b/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java
@@ -75,6 +75,10 @@
         return getDeviceProperties().isCuttlefish();
     }
 
+    private static boolean isCuttlefishArm64() {
+        return getDeviceProperties().isCuttlefishArm64();
+    }
+
     public static boolean isHwasan() {
         return getDeviceProperties().isHwasan();
     }
@@ -222,6 +226,12 @@
         assume().withMessage("Skip on 5.4 kernel. b/218303240")
                 .that(KERNEL_VERSION)
                 .isNotEqualTo("5.4");
+
+        // Cuttlefish on Arm 64 doesn't and cannot support any form of virtualization, so there's
+        // no point running any of these tests.
+        assume().withMessage("Virtualization not supported on Arm64 Cuttlefish. b/341889915")
+                .that(isCuttlefishArm64())
+                .isFalse();
     }
 
     protected void assumeNoUpdatableVmSupport() throws VirtualMachineException {