[PATCH v2 2/2] ramips: use partition parser on Netgear CHJ/BZV

Jan Hoffmann jan at 3e8.eu
Thu Feb 25 15:18:00 EST 2021


This patch makes use of the Sercomm partition table parser on some
Netgear routers. This applies to the boards CHJ (R6260, R6350, R6850,
WAC124) and BZV (R6800, R6700-v2, R7200, Nighthawk AC2400).

On these models, each device has an individual partition table that
takes into account bad blocks that existed during manufacturing. Thus
the partition table needs to be parsed for the device to work correctly.
A typical issue that occurs otherwise is degraded wireless performance,
when the calibration data cannot be found at the expected offset.

Signed-off-by: Jan Hoffmann <jan at 3e8.eu>
---
 .../dts/mt7621_netgear_sercomm_bzv.dtsi       | 169 +++++++++++++++++-
 .../dts/mt7621_netgear_sercomm_chj.dtsi       | 169 +++++++++++++++++-
 target/linux/ramips/mt7621/config-5.4         |   1 +
 3 files changed, 331 insertions(+), 8 deletions(-)

diff --git a/target/linux/ramips/dts/mt7621_netgear_sercomm_bzv.dtsi b/target/linux/ramips/dts/mt7621_netgear_sercomm_bzv.dtsi
index 71c95e75bd..044f6e9696 100644
--- a/target/linux/ramips/dts/mt7621_netgear_sercomm_bzv.dtsi
+++ b/target/linux/ramips/dts/mt7621_netgear_sercomm_bzv.dtsi
@@ -213,47 +213,208 @@
 	status = "okay";
 
 	partitions {
-		compatible = "fixed-partitions";
+		compatible = "sercomm,sc-partitions", "fixed-partitions";
 		#address-cells = <1>;
 		#size-cells = <1>;
 
 		partition at 0 {
 			label = "u-boot";
 			reg = <0x0 0x100000>;
+			scpart-id = <0>;
 			read-only;
 		};
 
 		partition at 100000 {
 			label = "SC PART_MAP";
 			reg = <0x100000 0x100000>;
+			scpart-id = <1>;
 			read-only;
 		};
 
 		partition at 200000 {
 			label = "kernel";
 			reg = <0x200000 0x400000>;
+			scpart-id = <2>;
 		};
 
 		partition at 600000 {
 			label = "ubi";
 			reg = <0x600000 0x2800000>;
+			scpart-id = <3>;
 		};
 
 		partition at 2e00000 {
-			label = "reserved0";
-			reg = <0x2e00000 0x1800000>;
+			label = "English UI";
+			reg = <0x2e00000 0x200000>;
+			scpart-id = <4>;
+			read-only;
+		};
+
+		partition at 3000000 {
+			label = "ML1";
+			reg = <0x3000000 0x200000>;
+			scpart-id = <5>;
+			read-only;
+		};
+
+		partition at 3200000 {
+			label = "ML2";
+			reg = <0x3200000 0x200000>;
+			scpart-id = <6>;
+			read-only;
+		};
+
+		partition at 3400000 {
+			label = "ML3";
+			reg = <0x3400000 0x200000>;
+			scpart-id = <7>;
+			read-only;
+		};
+
+		partition at 3600000 {
+			label = "ML4";
+			reg = <0x3600000 0x200000>;
+			scpart-id = <8>;
+			read-only;
+		};
+
+		partition at 3800000 {
+			label = "ML5";
+			reg = <0x3800000 0x200000>;
+			scpart-id = <9>;
+			read-only;
+		};
+
+		partition at 3a00000 {
+			label = "ML6";
+			reg = <0x3a00000 0x200000>;
+			scpart-id = <10>;
+			read-only;
+		};
+
+		partition at 3c00000 {
+			label = "ML7";
+			reg = <0x3c00000 0x200000>;
+			scpart-id = <11>;
+			read-only;
+		};
+
+		partition at 3e00000 {
+			label = "ML8";
+			reg = <0x3e00000 0x200000>;
+			scpart-id = <12>;
+			read-only;
+		};
+
+		partition at 4000000 {
+			label = "ML9";
+			reg = <0x4000000 0x200000>;
+			scpart-id = <13>;
+			read-only;
+		};
+
+		partition at 4200000 {
+			label = "ML10";
+			reg = <0x4200000 0x200000>;
+			scpart-id = <14>;
+			read-only;
+		};
+
+		partition at 4400000 {
+			label = "ML11";
+			reg = <0x4400000 0x200000>;
+			scpart-id = <15>;
 			read-only;
 		};
 
 		factory: partition at 4600000 {
 			label = "factory";
 			reg = <0x4600000 0x200000>;
+			scpart-id = <16>;
 			read-only;
 		};
 
 		partition at 4800000 {
+			label = "SC Private Data";
+			reg = <0x4800000 0x200000>;
+			scpart-id = <17>;
+			read-only;
+		};
+
+		partition at 4a00000 {
+			label = "POT";
+			reg = <0x4a00000 0x200000>;
+			scpart-id = <18>;
+			read-only;
+		};
+
+		partition at 4c00000 {
+			label = "Traffic Meter";
+			reg = <0x4c00000 0x200000>;
+			scpart-id = <19>;
+			read-only;
+		};
+
+		partition at 4e00000 {
+			label = "SC PID";
+			reg = <0x4e00000 0x200000>;
+			scpart-id = <20>;
+			read-only;
+		};
+
+		partition at 5000000 {
+			label = "SC Nvram";
+			reg = <0x5000000 0x200000>;
+			scpart-id = <21>;
+			read-only;
+		};
+
+		partition at 5200000 {
+			label = "Ralink Nvram";
+			reg = <0x5200000 0x200000>;
+			scpart-id = <22>;
+			read-only;
+		};
+
+		partition at 5400000 {
+			label = "reserved0";
+			reg = <0x5400000 0x200000>;
+			scpart-id = <23>;
+			read-only;
+		};
+
+		partition at 5600000 {
 			label = "reserved1";
-			reg = <0x4800000 0x3800000>;
+			reg = <0x5600000 0x200000>;
+			scpart-id = <24>;
+			read-only;
+		};
+
+		partition at 5800000 {
+			label = "reserved2";
+			reg = <0x5800000 0x200000>;
+			scpart-id = <25>;
+			read-only;
+		};
+
+		partition at 5a00000 {
+			label = "reserved3";
+			reg = <0x5a00000 0x200000>;
+			scpart-id = <26>;
+			read-only;
+		};
+
+		partition at 5c00000 {
+			label = "reserved4";
+			reg = <0x5c00000 0x200000>;
+			scpart-id = <27>;
+			read-only;
+		};
+
+		partition at 5e00000 {
+			label = "reserved5";
+			reg = <0x5e00000 0x2180000>;
+			scpart-id = <28>;
 			read-only;
 		};
 	};
diff --git a/target/linux/ramips/dts/mt7621_netgear_sercomm_chj.dtsi b/target/linux/ramips/dts/mt7621_netgear_sercomm_chj.dtsi
index 7a15cd1f6c..90fed6ba87 100644
--- a/target/linux/ramips/dts/mt7621_netgear_sercomm_chj.dtsi
+++ b/target/linux/ramips/dts/mt7621_netgear_sercomm_chj.dtsi
@@ -141,47 +141,208 @@
 	status = "okay";
 
 	partitions {
-		compatible = "fixed-partitions";
+		compatible = "sercomm,sc-partitions", "fixed-partitions";
 		#address-cells = <1>;
 		#size-cells = <1>;
 
 		partition at 0 {
 			label = "u-boot";
 			reg = <0x0 0x100000>;
+			scpart-id = <0>;
 			read-only;
 		};
 
 		partition at 100000 {
 			label = "SC PART_MAP";
 			reg = <0x100000 0x100000>;
+			scpart-id = <1>;
 			read-only;
 		};
 
 		partition at 200000 {
 			label = "kernel";
 			reg = <0x200000 0x400000>;
+			scpart-id = <2>;
 		};
 
 		partition at 600000 {
 			label = "ubi";
 			reg = <0x600000 0x2800000>;
+			scpart-id = <3>;
 		};
 
 		partition at 2e00000 {
-			label = "reserved0";
-			reg = <0x2e00000 0x1800000>;
+			label = "English UI";
+			reg = <0x2e00000 0x200000>;
+			scpart-id = <4>;
+			read-only;
+		};
+
+		partition at 3000000 {
+			label = "ML1";
+			reg = <0x3000000 0x200000>;
+			scpart-id = <5>;
+			read-only;
+		};
+
+		partition at 3200000 {
+			label = "ML2";
+			reg = <0x3200000 0x200000>;
+			scpart-id = <6>;
+			read-only;
+		};
+
+		partition at 3400000 {
+			label = "ML3";
+			reg = <0x3400000 0x200000>;
+			scpart-id = <7>;
+			read-only;
+		};
+
+		partition at 3600000 {
+			label = "ML4";
+			reg = <0x3600000 0x200000>;
+			scpart-id = <8>;
+			read-only;
+		};
+
+		partition at 3800000 {
+			label = "ML5";
+			reg = <0x3800000 0x200000>;
+			scpart-id = <9>;
+			read-only;
+		};
+
+		partition at 3a00000 {
+			label = "ML6";
+			reg = <0x3a00000 0x200000>;
+			scpart-id = <10>;
+			read-only;
+		};
+
+		partition at 3c00000 {
+			label = "ML7";
+			reg = <0x3c00000 0x200000>;
+			scpart-id = <11>;
+			read-only;
+		};
+
+		partition at 3e00000 {
+			label = "ML8";
+			reg = <0x3e00000 0x200000>;
+			scpart-id = <12>;
+			read-only;
+		};
+
+		partition at 4000000 {
+			label = "ML9";
+			reg = <0x4000000 0x200000>;
+			scpart-id = <13>;
+			read-only;
+		};
+
+		partition at 4200000 {
+			label = "ML10";
+			reg = <0x4200000 0x200000>;
+			scpart-id = <14>;
+			read-only;
+		};
+
+		partition at 4400000 {
+			label = "ML11";
+			reg = <0x4400000 0x200000>;
+			scpart-id = <15>;
 			read-only;
 		};
 
 		factory: partition at 4600000 {
 			label = "factory";
 			reg = <0x4600000 0x200000>;
+			scpart-id = <16>;
 			read-only;
 		};
 
 		partition at 4800000 {
+			label = "SC Private Data";
+			reg = <0x4800000 0x200000>;
+			scpart-id = <17>;
+			read-only;
+		};
+
+		partition at 4a00000 {
+			label = "POT";
+			reg = <0x4a00000 0x200000>;
+			scpart-id = <18>;
+			read-only;
+		};
+
+		partition at 4c00000 {
+			label = "Traffic Meter";
+			reg = <0x4c00000 0x200000>;
+			scpart-id = <19>;
+			read-only;
+		};
+
+		partition at 4e00000 {
+			label = "SC PID";
+			reg = <0x4e00000 0x200000>;
+			scpart-id = <20>;
+			read-only;
+		};
+
+		partition at 5000000 {
+			label = "SC Nvram";
+			reg = <0x5000000 0x200000>;
+			scpart-id = <21>;
+			read-only;
+		};
+
+		partition at 5200000 {
+			label = "Ralink Nvram";
+			reg = <0x5200000 0x200000>;
+			scpart-id = <22>;
+			read-only;
+		};
+
+		partition at 5400000 {
+			label = "reserved0";
+			reg = <0x5400000 0x200000>;
+			scpart-id = <23>;
+			read-only;
+		};
+
+		partition at 5600000 {
 			label = "reserved1";
-			reg = <0x4800000 0x3800000>;
+			reg = <0x5600000 0x200000>;
+			scpart-id = <24>;
+			read-only;
+		};
+
+		partition at 5800000 {
+			label = "reserved2";
+			reg = <0x5800000 0x200000>;
+			scpart-id = <25>;
+			read-only;
+		};
+
+		partition at 5a00000 {
+			label = "reserved3";
+			reg = <0x5a00000 0x200000>;
+			scpart-id = <26>;
+			read-only;
+		};
+
+		partition at 5c00000 {
+			label = "reserved4";
+			reg = <0x5c00000 0x200000>;
+			scpart-id = <27>;
+			read-only;
+		};
+
+		partition at 5e00000 {
+			label = "reserved5";
+			reg = <0x5e00000 0x2180000>;
+			scpart-id = <28>;
 			read-only;
 		};
 	};
diff --git a/target/linux/ramips/mt7621/config-5.4 b/target/linux/ramips/mt7621/config-5.4
index fba22a39cf..19d8fd34a9 100644
--- a/target/linux/ramips/mt7621/config-5.4
+++ b/target/linux/ramips/mt7621/config-5.4
@@ -155,6 +155,7 @@ CONFIG_MODULES_USE_ELF_REL=y
 CONFIG_MT7621_WDT=y
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_SERCOMM_PARTS=y
 CONFIG_MTD_NAND_CORE=y
 CONFIG_MTD_NAND_ECC_SW_HAMMING=y
 CONFIG_MTD_NAND_MT7621=y
-- 
2.29.2




More information about the openwrt-devel mailing list