HiFive Unmatched: U-Boot stuck when loading Ramdisk

David Abdurachmanov david.abdurachmanov at gmail.com
Fri Oct 15 17:29:09 CEST 2021


On Fri, Oct 15, 2021 at 6:02 PM Sören Tempel <soeren at soeren-tempel.net> wrote:
>
> Hello,
>
> I hope this is the right way to report u-boot issues. I tried to reach
> out to the RISC-V subsystem maintainer beforehand but didn't receive a
> response, hence sending this to the ML.
>
> We are currently working on Alpine Linux support for the Hifive
> Unmatched and at least two of our developers have access to a board
> presently. While working on Alpine support, we noticed that U-Boot with
> sifive_unmatched_defconfig gets stuck while loading the Alpine
> initramfs. The last message received on the SiFive UART is:
>
>         Loading Ramdisk to ffa72000, end fffffc19 ...
>
> Afterwards, U-Boot is stuck. We ran into this problem on two different
> boards independently. Both with u-boot-2021.10 as well as u-boot master
> (78e786decb6c8783568044c98891e64289cbf59c). I noticed that if I set
> initrd_high manually (i.e. change the address region the Ramdisk is
> loaded to) everything works as expected. For example, `setenv
> initrd_high 0x85000000`. Maybe the default address region used for the
> Ramdisk overlaps with the U-Boot stack/text region or something?
>
> I am not familiar with U-Boot internals, but briefly looking at the code
> and how the default Ramdisk address region is calculated, it seems to me
> that many boards set CONFIG_SYS_BOOTMAPSZ but the board configuration
> for the Unmatched and Unleashed doesn't. If I set it manually everything
> works as expected. For example:
>
>         diff --git a/include/configs/sifive-unmatched.h b/include/configs/sifive-unmatched.h
>         index d63a5f62fb..e1d3cb4ec4 100644
>         --- a/include/configs/sifive-unmatched.h
>         +++ b/include/configs/sifive-unmatched.h
>         @@ -25,6 +25,7 @@
>
>          #endif
>
>         +#define CONFIG_SYS_BOOTMAPSZ   (256 << 20)
>          #define CONFIG_SYS_SDRAM_BASE          0x80000000
>          #define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_SDRAM_BASE + SZ_2M)
>
> This causes the Ramdisk to be loaded to 8f9f7000, end 8ffffb3d by
> default which, looking at the Unmatched memory map, seems to be a more
> sensible address region for the Ramdisk:
>
>         Moving Image from 0x84000000 to 0x80200000, end=811a9000
>         ## Flattened Device Tree blob at 88000000
>            Booting using the fdt blob at 0x88000000
>            Loading Ramdisk to 8f9f7000, end 8ffffb3d ... OK
>            Loading Device Tree to 000000008f9f1000, end 000000008f9f660b ... OK
>
> If there is a better place to report this issue let me know. If you need
> more information to reproduce/debug this issue I would be very happy to
> help.

Could you try these two changes together (see below)?

diff --git a/include/configs/sifive-unmatched.h
b/include/configs/sifive-unmatched.h
index 7157295..7254e06 100644
--- a/include/configs/sifive-unmatched.h
+++ b/include/configs/sifive-unmatched.h
@@ -67,7 +67,7 @@
"scriptaddr=0x88100000\0" \
"pxefile_addr_r=0x88200000\0" \
"ramdisk_addr_r=0x88300000\0" \
- "kernel_comp_addr_r=0x90000000\0" \
+ "kernel_comp_addr_r=0x90300000\0" \
"kernel_comp_size=0x4000000\0" \
"type_guid_gpt_loader1=" TYPE_GUID_LOADER1 "\0" \
"type_guid_gpt_loader2=" TYPE_GUID_LOADER2 "\0" \

diff --git a/include/configs/sifive-unmatched.h
b/include/configs/sifive-unmatched.h
index 7254e06..3b72304 100644
--- a/include/configs/sifive-unmatched.h
+++ b/include/configs/sifive-unmatched.h
@@ -62,6 +62,8 @@
"name=system,size=-,bootable,type=${type_guid_gpt_system};"
#define CONFIG_EXTRA_ENV_SETTINGS \
+ "fdt_high=0xffffffffffffffff\0" \
+ "initrd_high=0xffffffffffffffff\0" \
"kernel_addr_r=0x84000000\0" \
"fdt_addr_r=0x88000000\0" \
"scriptaddr=0x88100000\0" \

>
> Greetings,
> Sören


More information about the U-Boot mailing list