
On Fri, Oct 15, 2021 at 6:02 PM Sören Tempel soeren@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