diff mbox series

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

Message ID 20210225201800.2478284-3-jan@3e8.eu
State New
Headers show
Series [RFT] ramips: use partition table on Netgear NAND devices | expand

Commit Message

Jan Hoffmann Feb. 25, 2021, 8:18 p.m. UTC
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@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(-)

Comments

Mrkiko Rs Feb. 26, 2021, 3:02 a.m. UTC | #1
Thank you for your work!!

What about R6220 ?
Thanks again!



> Il giorno 25 feb 2021, alle ore 21:24, Jan Hoffmann <jan@3e8.eu> ha scritto:
> 
> ´╗┐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@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;
>        };
>    };
> 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
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
Mathias Kresin Feb. 26, 2021, 1:11 p.m. UTC | #2
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 <jan@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
Jan Hoffmann Feb. 26, 2021, 8:45 p.m. UTC | #3
> What about R6220 ?

R6220 and WAC104 do not have a partition table stored on flash. They
use fixed partitions also on stock firmware.

Jan
diff mbox series

Patch

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;
 		};
 	};
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