master u-boot broken for HiFive Unleashed
pragnesh.patel at sifive.com
Tue Aug 4 16:33:24 CEST 2020
>From: U-Boot <u-boot-bounces at lists.denx.de> On Behalf Of Pragnesh Patel
>Sent: 04 August 2020 19:55
>To: Atish Patra <atishp at atishpatra.org>; Bin Meng <bmeng.cn at gmail.com>;
>Rick Chen <rick at andestech.com>
>Cc: Anup Patel <anup at brainfault.org>; Lukas Auer
><lukas.auer at aisec.fraunhofer.de>; U-Boot Mailing List <u-boot at lists.denx.de>
>Subject: RE: master u-boot broken for HiFive Unleashed
>I tried to debug this and find something interesting.
>I am able to reproduce the same and found that if I will disable
>CONFIG_OF_BOARD_FIXUP and then print the bdinfo shows expected result.
>boot_params = 0x0000000000000000
>DRAM bank = 0x0000000000000000
>-> start = 0x0000000080000000
>-> size = 0x0000000200000000
>memstart = 0x0000000000000000
>memsize = 0x00000000
>flashstart = 0x0000000000000000
>flashsize = 0x0000000000000000
>flashoffset = 0x0000000000000000
>baudrate = 115200 bps
>relocaddr = 0x00000000fff83000
>reloc off = 0x000000007fd83000
>Build = 64-bit
>current eth = ethernet at 10090000
>ethaddr = (not set)
>IP addr = <NULL>
>fdt_blob = 0x00000000ff75e680
>new_fdt = 0x00000000ff75e680
>fdt_size = 0x00000000000047a0
>With CONFIG_OF_BOARD_FIXUP, following functions gets called
>fix_fdt() ("common/board_f.c") -> board_fix_fdt() ("arch/riscv/lib/fdt_fixup.c")
>and in this we will increase the fdt_blob size for PMP regions
> * Extend the FDT by the following estimated size:
> * Each PMP memory region entry occupies 64 bytes.
> * With 16 PMP memory regions we need 64 * 16 = 1024 bytes.
> err = fdt_open_into(dst, dst, fdt_totalsize(dst) + 1024);
>I suspect this will overwrite the global data (gd) and that creates the problem.
>Surprisingly With U-Boot SPL,
>Latest U-Boot master branch works fine and shows expected results.
With U-Boot SPL it works because in riscv_board_reserved_mem_fixup() ("arch/riscv/lib/fdt_fixup.c")
/* avoid the copy if we are using the same device tree */
if (src_fdt_addr == fdt)
OpenSBI and U-Boot both are using the same device tree (U-Boot SPL sends U-Boot device tree address in a1 register to OpenSBI), so
riscv_fdt_copy_resv_mem_node() never gets called.
With FSBL, OpenSBI and U-Boot uses different device tree so riscv_board_reserved_mem_fixup() ("arch/riscv/lib/fdt_fixup.c"), so
riscv_fdt_copy_resv_mem_node() getting called and tried to increase the fdt_blob size which will overwrite the global data (gd).
>>From: Atish Patra <atishp at atishpatra.org>
>>Sent: 30 July 2020 03:13
>>To: U-Boot Mailing List <u-boot at lists.denx.de>; Bin Meng
>><bmeng.cn at gmail.com>; Rick Chen <rick at andestech.com>
>>Cc: Anup Patel <anup at brainfault.org>; Lukas Auer
>><lukas.auer at aisec.fraunhofer.de>; Pragnesh Patel
>><pragnesh.patel at sifive.com>
>>Subject: master u-boot broken for HiFive Unleashed
>>[External Email] Do not click links or attachments unless you recognize
>>the sender and know the content is safe
>>The latest master (423e08cb7701 (origin/master, origin/HEAD) Merge
>>'2020-07-28-misc-soc-improvements') seems to be broken for HiFive
>>It already has Bin's fix for unleashed.
>>a0018fc8209c riscv: Make SiFive HiFive Unleashed board boot again
>>dram start and size is corrupted for some reason. I have verified that
>>it was initialized properly during DT parsing. However, it shows random
>>values in the U- Boot console.
>>boot_params = 0x0000000000000000
>>memstart = 0x0000000000000000
>>memsize = 0x00000000
>>flashstart = 0x0000000000000000
>>flashsize = 0x0000000000000000
>>flashoffset = 0x0000000000000000
>>baudrate = 115200 bps
>>relocaddr = 0x00000000fff84000
>>reloc off = 0x000000007fd84000
>>Build = 64-bit
>>boot_params = 0x9a26a361c16aa601
>>DRAM bank = 0x0000000000000000
>>-> start = 0x974515c3bda965ef
>>-> size = 0x79b6f0fb37923036
>>memstart = 0x574587c7f00570f9
>>memsize = 0xCFD8C0F4D42668AB
>>flashstart = 0x67f9fbb06586658b
>>flashsize = 0xf91aed913c99b9e1
>>flashoffset = 0x9ddbf00d69e870fa
>>baudrate = 115200 bps
>>v2020.07 seems to work fine. I couldn't bisect between those two as the
>>number of commits didn't compile.
More information about the U-Boot