2/25/21 9:18 PM, Jan Hoffmann:
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 <j...@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@0 {
                        label = "u-boot";
                        reg = <0x0 0x100000>;
+                       scpart-id = <0>;
                        read-only;
                };
partition@100000 {
                        label = "SC PART_MAP";
                        reg = <0x100000 0x100000>;
+                       scpart-id = <1>;
                        read-only;
                };
partition@200000 {
                        label = "kernel";
                        reg = <0x200000 0x400000>;
+                       scpart-id = <2>;
                };
partition@600000 {
                        label = "ubi";
                        reg = <0x600000 0x2800000>;
+                       scpart-id = <3>;
                };
partition@2e00000 {
-                       label = "reserved0";
-                       reg = <0x2e00000 0x1800000>;
+                       label = "English UI";
+                       reg = <0x2e00000 0x200000>;
+                       scpart-id = <4>;
+                       read-only;
+               };
+
+               partition@3000000 {
+                       label = "ML1";
+                       reg = <0x3000000 0x200000>;
+                       scpart-id = <5>;
+                       read-only;
+               };
+
+               partition@3200000 {
+                       label = "ML2";
+                       reg = <0x3200000 0x200000>;
+                       scpart-id = <6>;
+                       read-only;
+               };
+
+               partition@3400000 {
+                       label = "ML3";
+                       reg = <0x3400000 0x200000>;
+                       scpart-id = <7>;
+                       read-only;
+               };
+
+               partition@3600000 {
+                       label = "ML4";
+                       reg = <0x3600000 0x200000>;
+                       scpart-id = <8>;
+                       read-only;
+               };
+
+               partition@3800000 {
+                       label = "ML5";
+                       reg = <0x3800000 0x200000>;
+                       scpart-id = <9>;
+                       read-only;
+               };
+
+               partition@3a00000 {
+                       label = "ML6";
+                       reg = <0x3a00000 0x200000>;
+                       scpart-id = <10>;
+                       read-only;
+               };
+
+               partition@3c00000 {
+                       label = "ML7";
+                       reg = <0x3c00000 0x200000>;
+                       scpart-id = <11>;
+                       read-only;
+               };
+
+               partition@3e00000 {
+                       label = "ML8";
+                       reg = <0x3e00000 0x200000>;
+                       scpart-id = <12>;
+                       read-only;
+               };
+
+               partition@4000000 {
+                       label = "ML9";
+                       reg = <0x4000000 0x200000>;
+                       scpart-id = <13>;
+                       read-only;
+               };
+
+               partition@4200000 {
+                       label = "ML10";
+                       reg = <0x4200000 0x200000>;
+                       scpart-id = <14>;
+                       read-only;
+               };
+
+               partition@4400000 {
+                       label = "ML11";
+                       reg = <0x4400000 0x200000>;
+                       scpart-id = <15>;
                        read-only;
                };
factory: partition@4600000 {
                        label = "factory";
                        reg = <0x4600000 0x200000>;
+                       scpart-id = <16>;
                        read-only;
                };
partition@4800000 {
+                       label = "SC Private Data";
+                       reg = <0x4800000 0x200000>;
+                       scpart-id = <17>;
+                       read-only;
+               };
+
+               partition@4a00000 {
+                       label = "POT";
+                       reg = <0x4a00000 0x200000>;
+                       scpart-id = <18>;
+                       read-only;
+               };
+
+               partition@4c00000 {
+                       label = "Traffic Meter";
+                       reg = <0x4c00000 0x200000>;
+                       scpart-id = <19>;
+                       read-only;
+               };
+
+               partition@4e00000 {
+                       label = "SC PID";
+                       reg = <0x4e00000 0x200000>;
+                       scpart-id = <20>;
+                       read-only;
+               };
+
+               partition@5000000 {
+                       label = "SC Nvram";
+                       reg = <0x5000000 0x200000>;
+                       scpart-id = <21>;
+                       read-only;
+               };
+
+               partition@5200000 {
+                       label = "Ralink Nvram";
+                       reg = <0x5200000 0x200000>;
+                       scpart-id = <22>;
+                       read-only;
+               };
+
+               partition@5400000 {
+                       label = "reserved0";
+                       reg = <0x5400000 0x200000>;
+                       scpart-id = <23>;
+                       read-only;
+               };
+
+               partition@5600000 {
                        label = "reserved1";
-                       reg = <0x4800000 0x3800000>;
+                       reg = <0x5600000 0x200000>;
+                       scpart-id = <24>;
+                       read-only;
+               };
+
+               partition@5800000 {
+                       label = "reserved2";
+                       reg = <0x5800000 0x200000>;
+                       scpart-id = <25>;
+                       read-only;
+               };
+
+               partition@5a00000 {
+                       label = "reserved3";
+                       reg = <0x5a00000 0x200000>;
+                       scpart-id = <26>;
+                       read-only;
+               };
+
+               partition@5c00000 {
+                       label = "reserved4";
+                       reg = <0x5c00000 0x200000>;
+                       scpart-id = <27>;
+                       read-only;
+               };
+
+               partition@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@0 {
                        label = "u-boot";
                        reg = <0x0 0x100000>;
+                       scpart-id = <0>;
                        read-only;
                };
partition@100000 {
                        label = "SC PART_MAP";
                        reg = <0x100000 0x100000>;
+                       scpart-id = <1>;
                        read-only;
                };
partition@200000 {
                        label = "kernel";
                        reg = <0x200000 0x400000>;
+                       scpart-id = <2>;
                };
partition@600000 {
                        label = "ubi";
                        reg = <0x600000 0x2800000>;
+                       scpart-id = <3>;
                };
partition@2e00000 {
-                       label = "reserved0";
-                       reg = <0x2e00000 0x1800000>;
+                       label = "English UI";
+                       reg = <0x2e00000 0x200000>;
+                       scpart-id = <4>;
+                       read-only;
+               };
+
+               partition@3000000 {
+                       label = "ML1";
+                       reg = <0x3000000 0x200000>;
+                       scpart-id = <5>;
+                       read-only;
+               };
+
+               partition@3200000 {
+                       label = "ML2";
+                       reg = <0x3200000 0x200000>;
+                       scpart-id = <6>;
+                       read-only;
+               };
+
+               partition@3400000 {
+                       label = "ML3";
+                       reg = <0x3400000 0x200000>;
+                       scpart-id = <7>;
+                       read-only;
+               };
+
+               partition@3600000 {
+                       label = "ML4";
+                       reg = <0x3600000 0x200000>;
+                       scpart-id = <8>;
+                       read-only;
+               };
+
+               partition@3800000 {
+                       label = "ML5";
+                       reg = <0x3800000 0x200000>;
+                       scpart-id = <9>;
+                       read-only;
+               };
+
+               partition@3a00000 {
+                       label = "ML6";
+                       reg = <0x3a00000 0x200000>;
+                       scpart-id = <10>;
+                       read-only;
+               };
+
+               partition@3c00000 {
+                       label = "ML7";
+                       reg = <0x3c00000 0x200000>;
+                       scpart-id = <11>;
+                       read-only;
+               };
+
+               partition@3e00000 {
+                       label = "ML8";
+                       reg = <0x3e00000 0x200000>;
+                       scpart-id = <12>;
+                       read-only;
+               };
+
+               partition@4000000 {
+                       label = "ML9";
+                       reg = <0x4000000 0x200000>;
+                       scpart-id = <13>;
+                       read-only;
+               };
+
+               partition@4200000 {
+                       label = "ML10";
+                       reg = <0x4200000 0x200000>;
+                       scpart-id = <14>;
+                       read-only;
+               };
+
+               partition@4400000 {
+                       label = "ML11";
+                       reg = <0x4400000 0x200000>;
+                       scpart-id = <15>;
                        read-only;
                };
factory: partition@4600000 {
                        label = "factory";
                        reg = <0x4600000 0x200000>;
+                       scpart-id = <16>;
                        read-only;
                };
partition@4800000 {
+                       label = "SC Private Data";
+                       reg = <0x4800000 0x200000>;
+                       scpart-id = <17>;
+                       read-only;
+               };
+
+               partition@4a00000 {
+                       label = "POT";
+                       reg = <0x4a00000 0x200000>;
+                       scpart-id = <18>;
+                       read-only;
+               };
+
+               partition@4c00000 {
+                       label = "Traffic Meter";
+                       reg = <0x4c00000 0x200000>;
+                       scpart-id = <19>;
+                       read-only;
+               };
+
+               partition@4e00000 {
+                       label = "SC PID";
+                       reg = <0x4e00000 0x200000>;
+                       scpart-id = <20>;
+                       read-only;
+               };
+
+               partition@5000000 {
+                       label = "SC Nvram";
+                       reg = <0x5000000 0x200000>;
+                       scpart-id = <21>;
+                       read-only;
+               };
+
+               partition@5200000 {
+                       label = "Ralink Nvram";
+                       reg = <0x5200000 0x200000>;
+                       scpart-id = <22>;
+                       read-only;
+               };
+
+               partition@5400000 {
+                       label = "reserved0";
+                       reg = <0x5400000 0x200000>;
+                       scpart-id = <23>;
+                       read-only;
+               };
+
+               partition@5600000 {
                        label = "reserved1";
-                       reg = <0x4800000 0x3800000>;
+                       reg = <0x5600000 0x200000>;
+                       scpart-id = <24>;
+                       read-only;
+               };
+
+               partition@5800000 {
+                       label = "reserved2";
+                       reg = <0x5800000 0x200000>;
+                       scpart-id = <25>;
+                       read-only;
+               };
+
+               partition@5a00000 {
+                       label = "reserved3";
+                       reg = <0x5a00000 0x200000>;
+                       scpart-id = <26>;
+                       read-only;
+               };
+
+               partition@5c00000 {
+                       label = "reserved4";
+                       reg = <0x5c00000 0x200000>;
+                       scpart-id = <27>;
+                       read-only;
+               };
+
+               partition@5e00000 {
+                       label = "reserved5";
+                       reg = <0x5e00000 0x2180000>;
+                       scpart-id = <28>;
                        read-only;
                };
        };

Hey Jan,

looking at the parser code, I somehow suspect the hardcoded definition of the partition start and length isn't required any longer. Isn't it the job of "part_offs" and "part_bytes" to carry these informations.

Furthermore, please upstream the partition parser. It doesn't look like something OpenWrt specific.

regards
Mathias

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to