diff mbox series

[OpenWrt-Devel,v2,2/4] ramips: fix RBM33G partitioning

Message ID 20180729090724.8436-2-hacks@slashdirt.org
State Changes Requested
Delegated to: John Crispin
Headers show
Series [OpenWrt-Devel,v2,1/4] ramips: fix RBM33G name | expand

Commit Message

Thibaut July 29, 2018, 9:07 a.m. UTC
This patch improves 5684d087418d176cfdef4e045e1950ca7ba3b09f by correcting
the partition scheme for the "RouterBoot" section of the flash.

This section is subdivided in several segments, as they are on ar71xx
RB devices, albeit with different offsets and sizes. The naming convention
from ar71xx has been preserved. The preferred 'fixed-partitions' DTS
node syntax is used, with nesting support as introduced in 2a598bbaa3.

The OEM source code also define a "RouterBootFake" partition at the
beginning of the secondary flash chip: to avoid trouble if OEM ever makes
use of that space, it is also defined here.

The resulting partition scheme looks like this:
[   10.114241] m25p80 spi0.0: w25x40 (512 Kbytes)
[   10.118708] 1 fixed-partitions partitions found on MTD device spi0.0
[   10.125049] Creating 1 MTD partitions on "spi0.0":
[   10.129824] 0x000000000000-0x000000040000 : "RouterBoot"
[   10.136215] 5 fixed-partitions partitions found on MTD device RouterBoot
[   10.142894] Creating 5 MTD partitions on "RouterBoot":
[   10.148032] 0x000000000000-0x00000000f000 : "routerboot"
[   10.154336] 0x00000000f000-0x000000010000 : "hard_config"
[   10.160665] 0x000000010000-0x00000001f000 : "routerboot2"
[   10.167046] 0x000000020000-0x000000021000 : "soft_config"
[   10.173461] 0x000000030000-0x000000031000 : "bios"
[   10.190191] m25p80 spi0.1: w25q128 (16384 Kbytes)
[   10.194950] 2 fixed-partitions partitions found on MTD device spi0.1
[   10.201271] Creating 2 MTD partitions on "spi0.1":
[   10.206071] 0x000000000000-0x000000040000 : "RouterBootFake"
[   10.212746] 0x000000040000-0x000001000000 : "firmware"
[   10.307216] 2 minor-fw partitions found on MTD device firmware
[   10.313044] 0x000000040000-0x000000220000 : "kernel"
[   10.319002] 0x000000220000-0x000001000000 : "rootfs"
[   10.324906] mtd: device 9 (rootfs) set to be root filesystem
[   10.330678] 1 squashfs-split partitions found on MTD device rootfs
[   10.336886] 0x000000b40000-0x000001000000 : "rootfs_data"

Leave a note in DTS to explain how the original author selected the SPI speed.

Tested-by: Tobias Schramm <tobleminer@gmail.com>
Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
---
 target/linux/ramips/dts/RBM33G.dts | 69 +++++++++++++++++++++++++++++---------
 1 file changed, 54 insertions(+), 15 deletions(-)

Comments

John Crispin July 30, 2018, 6:40 a.m. UTC | #1
On 29/07/18 11:07, Thibaut VARÈNE wrote:
> This patch improves 5684d087418d176cfdef4e045e1950ca7ba3b09f by correcting
> the partition scheme for the "RouterBoot" section of the flash.
>
> This section is subdivided in several segments, as they are on ar71xx
> RB devices, albeit with different offsets and sizes. The naming convention
> from ar71xx has been preserved. The preferred 'fixed-partitions' DTS
> node syntax is used, with nesting support as introduced in 2a598bbaa3.
>
> The OEM source code also define a "RouterBootFake" partition at the
> beginning of the secondary flash chip: to avoid trouble if OEM ever makes
> use of that space, it is also defined here.

as discussed on IRC we concluded, that this should be done with a mtd 
splitter.
     John

>
> The resulting partition scheme looks like this:
> [   10.114241] m25p80 spi0.0: w25x40 (512 Kbytes)
> [   10.118708] 1 fixed-partitions partitions found on MTD device spi0.0
> [   10.125049] Creating 1 MTD partitions on "spi0.0":
> [   10.129824] 0x000000000000-0x000000040000 : "RouterBoot"
> [   10.136215] 5 fixed-partitions partitions found on MTD device RouterBoot
> [   10.142894] Creating 5 MTD partitions on "RouterBoot":
> [   10.148032] 0x000000000000-0x00000000f000 : "routerboot"
> [   10.154336] 0x00000000f000-0x000000010000 : "hard_config"
> [   10.160665] 0x000000010000-0x00000001f000 : "routerboot2"
> [   10.167046] 0x000000020000-0x000000021000 : "soft_config"
> [   10.173461] 0x000000030000-0x000000031000 : "bios"
> [   10.190191] m25p80 spi0.1: w25q128 (16384 Kbytes)
> [   10.194950] 2 fixed-partitions partitions found on MTD device spi0.1
> [   10.201271] Creating 2 MTD partitions on "spi0.1":
> [   10.206071] 0x000000000000-0x000000040000 : "RouterBootFake"
> [   10.212746] 0x000000040000-0x000001000000 : "firmware"
> [   10.307216] 2 minor-fw partitions found on MTD device firmware
> [   10.313044] 0x000000040000-0x000000220000 : "kernel"
> [   10.319002] 0x000000220000-0x000001000000 : "rootfs"
> [   10.324906] mtd: device 9 (rootfs) set to be root filesystem
> [   10.330678] 1 squashfs-split partitions found on MTD device rootfs
> [   10.336886] 0x000000b40000-0x000001000000 : "rootfs_data"
>
> Leave a note in DTS to explain how the original author selected the SPI speed.
>
> Tested-by: Tobias Schramm <tobleminer@gmail.com>
> Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
> ---
>   target/linux/ramips/dts/RBM33G.dts | 69 +++++++++++++++++++++++++++++---------
>   1 file changed, 54 insertions(+), 15 deletions(-)
>
> diff --git a/target/linux/ramips/dts/RBM33G.dts b/target/linux/ramips/dts/RBM33G.dts
> index 612dc106ed..a02d03818f 100644
> --- a/target/linux/ramips/dts/RBM33G.dts
> +++ b/target/linux/ramips/dts/RBM33G.dts
> @@ -104,18 +104,44 @@
>   		reg = <0>;
>   		spi-max-frequency = <3125000>;
>   
> -		partition@0 {
> -			label = "routerboot";
> -			reg = <0x0 0xf000>;
> -			read-only;
> +		partitions {
> +			compatible = "fixed-partitions";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			partition@0 {
> +				label = "RouterBoot";
> +				reg = <0x0 0x40000>;
> +				read-only;
> +				compatible = "fixed-partitions";
> +				#address-cells = <1>;
> +				#size-cells = <1>;
> +
> +				routerboot@0 {
> +					reg = <0x0 0xf000>;
> +					read-only;
> +				};
> +
> +				hard_config: hard_config@f000 {
> +					reg = <0xf000 0x1000>;
> +					read-only;
> +				};
> +
> +				routerboot2@10000 {
> +					reg = <0x10000 0xf000>;
> +					read-only;
> +				};
> +
> +				soft_config@20000 {
> +					reg = <0x20000 0x1000>;
> +				};
> +
> +				bios@30000 {
> +					reg = <0x30000 0x1000>;
> +					read-only;
> +				};
> +			};
>   		};
> -
> -		factory: partition@f000 {
> -			label = "factory";
> -			reg = <0xf000 0x71000>;
> -			read-only;
> -		};
> -
>   	};
>   
>   	w25q128@0 {
> @@ -123,17 +149,30 @@
>   		#size-cells = <1>;
>   		compatible = "jedec,spi-nor";
>   		reg = <1>;
> +		// XXX empiric value to obtain actual 10MHz SCK at the chip
>   		spi-max-frequency = <3125000>;
>   
> -		partition@40000 {
> -			label = "firmware";
> -			reg = <0x040000 0xFC0000>;
> +		partitions {
> +			compatible = "fixed-partitions";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			// this contains no data but is named so in OEM source
> +			partition@0 {
> +				label = "RouterBootFake";
> +				reg = <0x0 0x40000>;
> +				read-only;
> +			};
> +
> +			firmware@40000 {
> +				reg = <0x040000 0xFC0000>;
> +			};
>   		};
>   	};
>   };
>   
>   &ethernet {
> -	mtd-mac-address = <&factory 0x0010>;
> +	mtd-mac-address = <&hard_config 0x0010>;
>   	mtd-mac-address-increment = <1>;
>   };
>
Thibaut July 30, 2018, 8:09 a.m. UTC | #2
> Le 30 juil. 2018 à 08:40, John Crispin <john@phrozen.org> a écrit :
> 
> 
> 
> On 29/07/18 11:07, Thibaut VARÈNE wrote:
>> This patch improves 5684d087418d176cfdef4e045e1950ca7ba3b09f by correcting
>> the partition scheme for the "RouterBoot" section of the flash.
>> 
>> This section is subdivided in several segments, as they are on ar71xx
>> RB devices, albeit with different offsets and sizes. The naming convention
>> from ar71xx has been preserved. The preferred 'fixed-partitions' DTS
>> node syntax is used, with nesting support as introduced in 2a598bbaa3.
>> 
>> The OEM source code also define a "RouterBootFake" partition at the
>> beginning of the secondary flash chip: to avoid trouble if OEM ever makes
>> use of that space, it is also defined here.
> 
> as discussed on IRC we concluded, that this should be done with a mtd splitter.
>     John

I’m sorry, we didn’t conclude anything, I believe you demanded it be done so.

Unfortunately, after a more careful investigation, I am now convinced this is not the right course of action. Here’s why, in my very humble opinion and limited understanding:

- this splitter will be quite intrusive in generic code (currently « mtdsplit » only works with « firmware » and « rootfs » named partitions)
- the bootloaders (routerboot and routerboot2) cannot be programmatically splitted: they are raw machine code without a signature
- all ramips routerboard machines share the exact same partition scheme which is different from all the ar71xx routerboard machines (which also all share the same scheme)
- if I read the OEM source code correctly, it’s likely their ARM-based boards have yet another partition scheme

Consequently, a purported splitter will be invasive and full of hardcoded numbers, making its upstream acceptance very unlikely (I anticipate the argument « this should all be done in DTS, especially now that DTS supports nested partitions »).

Now, I would like to hope that a correct partition scheme that uses all the OpenWRT-accepted features and follows guidelines would be more likely to be accepted in the source than the currently broken, incorrect and incomplete existing one.

Best regards,
T.
Daniel Dickinson July 30, 2018, 4:12 p.m. UTC | #3
On 2018-07-30 04:09 AM, Thibaut wrote:
> 
> 
>> Le 30 juil. 2018 à 08:40, John Crispin <john@phrozen.org> a écrit :
>>
>>
>>
>> On 29/07/18 11:07, Thibaut VARÈNE wrote:
>>> This patch improves 5684d087418d176cfdef4e045e1950ca7ba3b09f by correcting
>>> the partition scheme for the "RouterBoot" section of the flash.
>>>
>>> This section is subdivided in several segments, as they are on ar71xx
>>> RB devices, albeit with different offsets and sizes. The naming convention
>>> from ar71xx has been preserved. The preferred 'fixed-partitions' DTS
>>> node syntax is used, with nesting support as introduced in 2a598bbaa3.
>>>
>>> The OEM source code also define a "RouterBootFake" partition at the
>>> beginning of the secondary flash chip: to avoid trouble if OEM ever makes
>>> use of that space, it is also defined here.
>>
>> as discussed on IRC we concluded, that this should be done with a mtd splitter.
>>     John
> 
> I’m sorry, we didn’t conclude anything, I believe you demanded it be done so.
> 
> Unfortunately, after a more careful investigation, I am now convinced this is not the right course of action. Here’s why, in my very humble opinion and limited understanding:
> 
> - this splitter will be quite intrusive in generic code (currently « mtdsplit » only works with « firmware » and « rootfs » named partitions)
> - the bootloaders (routerboot and routerboot2) cannot be programmatically splitted: they are raw machine code without a signature
> - all ramips routerboard machines share the exact same partition scheme which is different from all the ar71xx routerboard machines (which also all share the same scheme)
> - if I read the OEM source code correctly, it’s likely their ARM-based boards have yet another partition scheme
> 
> Consequently, a purported splitter will be invasive and full of hardcoded numbers, making its upstream acceptance very unlikely (I anticipate the argument « this should all be done in DTS, especially now that DTS supports nested partitions »).
> 
> Now, I would like to hope that a correct partition scheme that uses all the OpenWRT-accepted features and follows guidelines would be more likely to be accepted in the source than the currently broken, incorrect and incomplete existing one.
> 

I'm not sure but I think
https://github.com/openwrt/openwrt/commit/2a598bbaa3f75b7051c2453a6ccf706191cf2153
(kernel: backport mtd support for subpartitions in DT) might be of use
here...
diff mbox series

Patch

diff --git a/target/linux/ramips/dts/RBM33G.dts b/target/linux/ramips/dts/RBM33G.dts
index 612dc106ed..a02d03818f 100644
--- a/target/linux/ramips/dts/RBM33G.dts
+++ b/target/linux/ramips/dts/RBM33G.dts
@@ -104,18 +104,44 @@ 
 		reg = <0>;
 		spi-max-frequency = <3125000>;
 
-		partition@0 {
-			label = "routerboot";
-			reg = <0x0 0xf000>;
-			read-only;
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "RouterBoot";
+				reg = <0x0 0x40000>;
+				read-only;
+				compatible = "fixed-partitions";
+				#address-cells = <1>;
+				#size-cells = <1>;
+
+				routerboot@0 {
+					reg = <0x0 0xf000>;
+					read-only;
+				};
+
+				hard_config: hard_config@f000 {
+					reg = <0xf000 0x1000>;
+					read-only;
+				};
+
+				routerboot2@10000 {
+					reg = <0x10000 0xf000>;
+					read-only;
+				};
+
+				soft_config@20000 {
+					reg = <0x20000 0x1000>;
+				};
+
+				bios@30000 {
+					reg = <0x30000 0x1000>;
+					read-only;
+				};
+			};
 		};
-
-		factory: partition@f000 {
-			label = "factory";
-			reg = <0xf000 0x71000>;
-			read-only;
-		};
-
 	};
 
 	w25q128@0 {
@@ -123,17 +149,30 @@ 
 		#size-cells = <1>;
 		compatible = "jedec,spi-nor";
 		reg = <1>;
+		// XXX empiric value to obtain actual 10MHz SCK at the chip 
 		spi-max-frequency = <3125000>;
 
-		partition@40000 {
-			label = "firmware";
-			reg = <0x040000 0xFC0000>;
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			// this contains no data but is named so in OEM source
+			partition@0 {
+				label = "RouterBootFake";
+				reg = <0x0 0x40000>;
+				read-only;
+			};
+
+			firmware@40000 {
+				reg = <0x040000 0xFC0000>;
+			};
 		};
 	};
 };
 
 &ethernet {
-	mtd-mac-address = <&factory 0x0010>;
+	mtd-mac-address = <&hard_config 0x0010>;
 	mtd-mac-address-increment = <1>;
 };