
Hi Stefan,
On Thu, Jun 27, 2013 at 6:40 AM, Stefan Roese sr@denx.de wrote:
Hi Simon,
On 06/11/2013 08:14 PM, Simon Glass wrote:
At present the bootm code is mostly duplicated for the plain 'bootm' command and its sub-command variant. This makes the code harder to maintain and means that changes must be made to several places.
Introduce do_bootm_states() which performs selected portions of the bootm work, so that both plain 'bootm' and 'bootm <sub_command>' can use the same code.
Additional duplication exists in bootz, so tidy that up as well. This is not intended to change behaviour, apart from minor fixes where the previously-duplicated code missed some chunks of code.
Signed-off-by: Simon Glass sjg@chromium.org
Simon, this patch breaks bootm (at least on powerpc), while booting an compressed uImage (with DT). It just hangs while decompressing the kernel image:
## Booting kernel from Legacy Image at 01000000 ... Image Name: Linux-3.5.7 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 2203312 Bytes = 2.1 MiB Load Address: 00000000 Entry Point: 00000000 ## Flattened Device Tree blob at 01800000 Booting using the fdt blob at 0x1800000 Uncompressing Kernel Image ...
I bisected mainline and this patch is the one that breaks booting:
[stefan@ubuntu-2012 u-boot ((983c72f...)|BISECTING)]$ git bisect good 35fc84fa1ff51e15ecd3e464dac87eb105ffed30 is the first bad commit commit 35fc84fa1ff51e15ecd3e464dac87eb105ffed30 Author: Simon Glass sjg@chromium.org Date: Tue Jun 11 11:14:47 2013 -0700
Refactor the bootm command to reduce code duplication
I already looked what might be wrong but I couldn't find any problem upon a quick glance. You know this code may better. Perhaps you could take look at it and give it a try as well.
I thought I had a repro, but it turned out to be that I was using kernel_noload so it was decompressing onto itself:
Uncompressing Kernel Image (no loading done) ... LZO: uncompress or overwrite error -6 - must RESET board to recover
When I give a load address, it seems to work:
Bytes transferred = 3953092 (3c51c4 hex) ## Loading kernel from FIT Image at 40008000 ... Using 'conf@8' configuration Trying 'kernel@1' kernel subimage Description: unavailable Type: Kernel Image Compression: gzip compressed Data Start: 0x400080c8 Data Size: 3633253 Bytes = 3.5 MiB Architecture: ARM OS: Linux Load Address: 0x20008000 Entry Point: 0x20008000 Verifying Hash Integrity ... OK ## Loading fdt from FIT Image at 40008000 ... Using 'conf@8' configuration Trying 'fdt@8' fdt subimage Description: exynos5420-peach-pit-rev3.dtb Type: Flat Device Tree Compression: uncompressed Data Start: 0x403b19e0 Data Size: 43298 Bytes = 42.3 KiB Architecture: ARM Hash algo: sha1 Hash value: 097dda51183eed6948ab942c57b14581c77ea22f Verifying Hash Integrity ... sha1+ OK Booting using the fdt blob at 0x403b19e0 Uncompressing Kernel Image ... OK Loading Device Tree to 3ffed000, end 3ffff921 ... OK
So I think it might be something to do with the load address. I'm going to fall back to code inspection...
Regards, Simon