sunxi: Fix boot of Cubietruk and al.
Subsystems (2)
v2 cover sunxi: Fix boot of Cubietruk and al.
Hi
Most featureful boards, such as the Cubietruck, have been broken since the release 2017.09 (the two variants of the Olinuxino-Lime2 and the cubietruck at least, possibly more since then).
This is due to a size increase of the binary that will trip us across the size we've been using in our default configuration since forever, and widely distributed through the u-boot-sunxi-with-spl.bin file.
We would have several ways to work around it. The first one would be to just increase the offset of the environment. However, since it would break all the environments of our users and possibly the custom partition scheme that they would have created, it doesn't really seem like a smart move.
The second one would be to move the environment to a filesystem file, which would also break all the existing users. This can be envisionned as a long term fix though.
Another one would be to start trimming down a bit our enabled options in order to reduce the size and to gain some extra space for users customisations. However, this will always result in pointless and endless discussions, so let's move away from that.
The final one that has been implemented would be to just build U-Boot using thumb2 to push back the issue until hopefully I'm no longer maintainer or the switch to the env filesystem would have been done.
I've also added a patch to make sure that the compilation breaks and that we can notice.
Maxime
Maxime Ripard (2):
sunxi: binman: Add U-Boot binary size check
sunxi: Enable THUMB build for the U-Boot binary
arch/arm/Kconfig | 1 + arch/arm/dts/sunxi-u-boot.dtsi | 11 +++++++++++ 2 files changed, 12 insertions(+)
Signature · 1 line
2.14.2
PATCH v2 1/2 sunxi: binman: Add U-Boot binary size check
The U-boot binary may trip over its actual allocated size in the storage. In such a case, the environment will not be readable anymore (because corrupted when the new image was flashed), and any attempt at using saveenv to reconstruct the environment will result in a corrupted U-boot binary.
--- arch/arm/dts/sunxi-u-boot.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+)
arch/arm/dts/sunxi-u-boot.dtsi +11 -0
@@ -1,5 +1,13 @@ #include <config.h> +/* + * This is the maximum size the U-boot binary can be, which is + * basically the start of the environment, minus the (padded) size of + * the SPL), minus the offset at which the generated file is supposed + * to be flashed in the MMC. + */ +#define UBOOT_MAX_SIZE (CONFIG_ENV_OFFSET - CONFIG_SPL_PAD_TO - (8 << 10)) + / { binman { filename = "u-boot-sunxi-with-spl.bin";
@@ -8,6 +16,9 @@ filename = "spl/sunxi-spl.bin"; }; u-boot-img { +#ifdef CONFIG_MMC + size = <UBOOT_MAX_SIZE>; +#endif pos = <CONFIG_SPL_PAD_TO>; }; };
Signature · 1 line
2.14.2
PATCH 1/2 sunxi: binman: Add U-Boot binary size check
Quoted 5 lines · Maxime Ripard
The U-boot binary may trip over its actual allocated size in the storage. In such a case, the environment will not be readable anymore (because corrupted when the new image was flashed), and any attempt at using saveenv to reconstruct the environment will result in a corrupted U-boot binary.
nits: U-boot -> U-Boot
Please fix this globally in this commit.
Quoted 24 lines
Signed-off-by Maxime Ripard <[email protected]>--- arch/arm/dts/sunxi-u-boot.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+)arch/arm/dts/sunxi-u-boot.dtsi +8
-0@@ -1,5 +1,13 @@ #include <config.h> +/* + * This is the maximum size the U-boot binary can be, which is + * basically the start of the environment, minus the (padded) size of + * the SPL), minus the offset at which the generated file is supposed + * to be flashed in the MMC. + */ +#define UBOOT_MAX_SIZE (CONFIG_ENV_OFFSET - CONFIG_SPL_PAD_TO - (8 << 10)) + / { binman { filename = "u-boot-sunxi-with-spl.bin";
arch/arm/dts/sunxi-u-boot.dtsi
Quoted 10 lines
arch/arm/dts/sunxi-u-boot.dtsi +3
-1@@ -8,6 +16,9 @@ filename = "spl/sunxi-spl.bin"; }; u-boot-img { +#ifdef CONFIG_MMC + size = <UBOOT_MAX_SIZE>; +#endif pos = <CONFIG_SPL_PAD_TO>; }; }; --
Regards,
Bin
PATCH v2 1/2 sunxi: binman: Add U-Boot binary size check
In reply to Maxime RipardHi,
Quoted 4 lines · Maxime Ripard
The U-boot binary may trip over its actual allocated size in the storage. In such a case, the environment will not be readable anymore (because corrupted when the new image was flashed), and any attempt at using saveenv to reconstruct the environment will result in a corrupted U-boot binary.
Merci beaucoup for that v2 series!
Quoted 10 lines
Signed-off-by Maxime Ripard <[email protected]>--- arch/arm/dts/sunxi-u-boot.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+)arch/arm/dts/sunxi-u-boot.dtsi +0
-0
arch/arm/dts/sunxi-u-boot.dtsi line 9
Quoted 9 lines
arch/arm/dts/sunxi-u-boot.dtsi +7
-0@@ -1,5 +1,13 @@ #include <config.h> +/* + * This is the maximum size the U-boot binary can be, which is + * basically the start of the environment, minus the (padded) size of + * the SPL), minus the offset at which the generated file is supposed + * to be flashed in the MMC. + */ +#define UBOOT_MAX_SIZE (CONFIG_ENV_OFFSET - CONFIG_SPL_PAD_TO - (8 << 10))
Just bikeshedding: Can't we use:
(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR << 9)
for the last two expressions?
But that's just a nit, so:
Cheers,
Andre.
Quoted 15 lines
arch/arm/dts/sunxi-u-boot.dtsi +4
-0+ / { binman { filename = "u-boot-sunxi-with-spl.bin";@@ -8,6 +16,9 @@ filename = "spl/sunxi-spl.bin"; }; u-boot-img { +#ifdef CONFIG_MMC + size = <UBOOT_MAX_SIZE>; +#endif pos = <CONFIG_SPL_PAD_TO>; }; };
PATCH 1/2 sunxi: binman: Add U-Boot binary size check
In reply to Maxime RipardAm Donnerstag, 19. Oktober 2017, 16:04:18 CET schrieb Maxime Ripard:
Quoted 9 lines
The U-boot binary may trip over its actual allocated size in the storage. In such a case, the environment will not be readable anymore (because corrupted when the new image was flashed), and any attempt at using saveenv to reconstruct the environment will result in a corrupted U-boot binary.
Signed-off-by Maxime Ripard <[email protected]>--- arch/arm/dts/sunxi-u-boot.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+)
Hello,
I found that this patch causes the sunxi-fel tool to fail with:
sunxi-fel uboot u-boot-sunxi-with-spl.bin
U-Boot image data size mismatch: expected 516032, got 389212
Is there a patch for the sunxi tools missing?
Br,
Frank
PATCH v2 1/2 sunxi: binman: Add U-Boot binary size check
Hi Frank,
Quoted 11 lines · Frank Kunz
Am Donnerstag, 19. Oktober 2017, 16:04:18 CET schrieb Maxime Ripard:
Quoted 9 lines
The U-boot binary may trip over its actual allocated size in the storage. In such a case, the environment will not be readable anymore (because corrupted when the new image was flashed), and any attempt at using saveenv to reconstruct the environment will result in a corrupted U-boot binary.
Signed-off-by Maxime Ripard <[email protected]>--- arch/arm/dts/sunxi-u-boot.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+)
Quoted 6 lines
I found that this patch causes the sunxi-fel tool to fail with:
sunxi-fel uboot u-boot-sunxi-with-spl.bin
U-Boot image data size mismatch: expected 516032, got 389212Is there a patch for the sunxi tools missing?
No, because no one reported it so far.
Can you test with:
http://code.bulix.org/mb0ic7-221765?raw
You'll need the zlib development files installed.
Maxime
Signature · 10 lines
Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 801 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171103/ecdda46c/attachment.sig>
PATCH 1/2 sunxi: binman: Add U-Boot binary size check
Am Freitag, 3. November 2017, 09:42:44 CET schrieb Maxime Ripard:
Quoted 22 lines
Hi Frank,
Quoted 19 lines · Frank Kunz
Am Donnerstag, 19. Oktober 2017, 16:04:18 CET schrieb Maxime Ripard:
Quoted 7 lines
The U-boot binary may trip over its actual allocated size in the storage.
In such a case, the environment will not be readable anymore (because corrupted when the new image was flashed), and any attempt at using saveenv
to reconstruct the environment will result in a corrupted U-boot binary.Quoted 5 lines
Signed-off-by Maxime Ripard <[email protected]>---
arch/arm/dts/sunxi-u-boot.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+)I found that this patch causes the sunxi-fel tool to fail with:
sunxi-fel uboot u-boot-sunxi-with-spl.bin
U-Boot image data size mismatch: expected 516032, got 389212
Quoted 7 lines
Quoted 1 line
Is there a patch for the sunxi tools missing?
No, because no one reported it so far.
Can you test with:
http://code.bulix.org/mb0ic7-221765?raw
That works.
PATCH v2 1/2 sunxi: binman: Add U-Boot binary size check
Quoted 27 lines · Frank Kunz
Am Freitag, 3. November 2017, 09:42:44 CET schrieb Maxime Ripard:
Quoted 26 lines
Hi Frank,
Quoted 14 lines · Frank Kunz
Am Donnerstag, 19. Oktober 2017, 16:04:18 CET schrieb Maxime Ripard:
Quoted 7 lines
The U-boot binary may trip over its actual allocated size in the storage.
In such a case, the environment will not be readable anymore (because corrupted when the new image was flashed), and any attempt at using saveenv
to reconstruct the environment will result in a corrupted U-boot binary.Quoted 5 lines
Signed-off-by Maxime Ripard <[email protected]>---
arch/arm/dts/sunxi-u-boot.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+)Quoted 6 lines
I found that this patch causes the sunxi-fel tool to fail with:
sunxi-fel uboot u-boot-sunxi-with-spl.bin
U-Boot image data size mismatch: expected 516032, got 389212Is there a patch for the sunxi tools missing?
No, because no one reported it so far.
Quoted 7 lines
Quoted 3 lines
Can you test with:
http://code.bulix.org/mb0ic7-221765?rawThat works.
Tested-by Frank Kunz <[email protected]>
I created a pull request for sunxi-tools to fix the issue. Thanks for the test, and sorry for the bug.
Maxime
Signature · 10 lines
Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 801 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171106/c7466c1b/attachment.sig>
PATCH v2 2/2 sunxi: Enable THUMB build for the U-Boot binary
In reply to Maxime RipardWe start to get to the limit of our main U-Boot binary size (with some boards even crossing it). Enable its build using thumb2 to get some extra room.
--- arch/arm/Kconfig | 1 + 1 file changed, 1 insertion(+)
arch/arm/Kconfig +1 -0
@@ -698,6 +698,7 @@ config ARCH_SUNXI select SPL_SYS_MALLOC_SIMPLE if SPL select SYS_NS16550 select SPL_SYS_THUMB_BUILD if !ARM64 + select SYS_THUMB_BUILD if !ARM64 select USB if DISTRO_DEFAULTS select USB_STORAGE if DISTRO_DEFAULTS select USB_KEYBOARD if DISTRO_DEFAULTS
Signature · 1 line
2.14.2
v2 cover sunxi: Fix boot of Cubietruk and al.
In reply to Maxime RipardHi Maxime,
On 19/10/17 15:04, Maxime Ripard wrote:
....
Quoted 6 lines
The final one that has been implemented would be to just build U-Boot using thumb2 to push back the issue until hopefully I'm no longer maintainer or the switch to the env filesystem would have been done.
I've also added a patch to make sure that the compilation breaks and that we can notice.
Can you please swap the patches? So that we get the fix before we break the build? This looks better in bisecting and buildman.
Cheers,
Andre.
Quoted 12 lines
Maxime
Maxime Ripard (2):
sunxi: binman: Add U-Boot binary size check
sunxi: Enable THUMB build for the U-Boot binaryarch/arm/Kconfig | 1 + arch/arm/dts/sunxi-u-boot.dtsi | 11 +++++++++++ 2 files changed, 12 insertions(+)