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

Mathias Kresin dev at kresin.me
Fri Feb 26 08:11:14 EST 2021


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

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



More information about the openwrt-devel mailing list