master u-boot broken for HiFive Unleashed

Pragnesh Patel pragnesh.patel at sifive.com
Tue Aug 4 16:33:24 CEST 2020


Hi Atish,

>-----Original Message-----
>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
>
>Hi Atish,
>
>I tried to debug this and find something interesting.
>
>With FSBL,
>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.
>
>=> bdinfo
>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")

riscv_board_reserved_mem_fixup() {
        /* avoid the copy if we are using the same device tree */
        if (src_fdt_addr == fdt)
                return 0;

	riscv_fdt_copy_resv_mem_node();
}

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).



>
>>-----Original Message-----
>>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
>>
>>Hi,
>>The latest master (423e08cb7701 (origin/master, origin/HEAD) Merge
>>branch
>>'2020-07-28-misc-soc-improvements') seems to be broken for HiFive
>Unleashed.
>>
>>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.
>>
>>=> bdinfo
>>boot_params = 0x0000000000000000
>>memstart    = 0x0000000000000000
>>memsize     = 0x00000000
>>flashstart  = 0x0000000000000000
>>flashsize   = 0x0000000000000000
>>flashoffset = 0x0000000000000000
>>baudrate    = 115200 bps
>>relocaddr   = 0x00000000fff84000
>>reloc off   = 0x000000007fd84000
>>Build       = 64-bit
>>
>>=> bdinfo
>>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.
>>
>>--
>>Regards,
>>Atish


More information about the U-Boot mailing list