pvmfw: Expand the allowed numbers of opp tables

Using 16 was too small for the number of opp tables for some devices,
extend it to 20 for now. Also fix a bug where it was incorrectly using
DeviceTreeInfo::MAX_CPU as size.

Bug: 284369518
Test: m pvmfw, boot protected microdroid and tested vcpufreq end-to-end
Change-Id: I6b03e84af0ae2cac5a1f2253b7b7e07b0c272537
Signed-off-by: David Dai <davidai@google.com>
diff --git a/pvmfw/platform.dts b/pvmfw/platform.dts
index d7486f9..cea1c33 100644
--- a/pvmfw/platform.dts
+++ b/pvmfw/platform.dts
@@ -77,6 +77,10 @@
 				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>; };
 			};
 		};
 		cpu@1 {
@@ -104,6 +108,10 @@
 				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>; };
 			};
 		};
 		cpu@2 {
@@ -131,6 +139,10 @@
 				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>; };
 			};
 		};
 		cpu@3 {
@@ -158,6 +170,10 @@
 				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>; };
 			};
 		};
 		cpu@4 {
@@ -185,6 +201,10 @@
 				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>; };
 			};
 		};
 		cpu@5 {
@@ -212,6 +232,10 @@
 				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>; };
 			};
 		};
 		cpu@6 {
@@ -239,6 +263,10 @@
 				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>; };
 			};
 		};
 		cpu@7 {
@@ -266,6 +294,10 @@
 				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>; };
 			};
 		};
 		cpu@8 {
@@ -273,6 +305,7 @@
 			compatible = "arm,arm-v8";
 			enable-method = "psci";
 			reg = <8>;
+
 			operating-points-v2 = <&opp_table8>;
 			opp_table8: opp-table-8 {
 				compatible = "operating-points-v2";
@@ -293,6 +326,10 @@
 				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>; };
 			};
 		};
 		cpu@9 {
@@ -320,6 +357,10 @@
 				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>; };
 			};
 		};
 		cpu@10 {
@@ -347,6 +388,10 @@
 				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>; };
 			};
 		};
 		cpu@11 {
@@ -374,6 +419,10 @@
 				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>; };
 			};
 		};
 		cpu@12 {
@@ -401,6 +450,10 @@
 				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>; };
 			};
 		};
 		cpu@13 {
@@ -428,6 +481,10 @@
 				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>; };
 			};
 		};
 		cpu@14 {
@@ -455,6 +512,10 @@
 				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>; };
 			};
 		};
 		cpu@15 {
@@ -482,6 +543,10 @@
 				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>; };
 			};
 		};
 	};
@@ -660,6 +725,6 @@
 
 	cpufreq {
 		compatible = "virtual,android-v-only-cpufreq";
-		reg = <0x1040000 PLACEHOLDER2>;
+		reg = <0x0 0x1040000 PLACEHOLDER2>;
 	};
 };
diff --git a/pvmfw/src/fdt.rs b/pvmfw/src/fdt.rs
index 65b46c0..f20451a 100644
--- a/pvmfw/src/fdt.rs
+++ b/pvmfw/src/fdt.rs
@@ -185,7 +185,7 @@
 }
 
 impl CpuInfo {
-    const MAX_OPPTABLES: usize = 16;
+    const MAX_OPPTABLES: usize = 20;
 }
 
 fn read_opp_info_from(
@@ -267,7 +267,7 @@
 
 fn patch_opptable(
     node: FdtNodeMut,
-    opptable: Option<ArrayVec<[u64; DeviceTreeInfo::MAX_CPUS]>>,
+    opptable: Option<ArrayVec<[u64; CpuInfo::MAX_OPPTABLES]>>,
 ) -> libfdt::Result<()> {
     let oppcompat = cstr!("operating-points-v2");
     let next = node.next_compatible(oppcompat)?.ok_or(FdtError::NoSpace)?;