[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