master u-boot broken for HiFive Unleashed

Pragnesh Patel pragnesh.patel at sifive.com
Wed Aug 5 11:03:40 CEST 2020


Hi Atish,

I just sent a patch to solve this issue.
https://patchwork.ozlabs.org/project/uboot/patch/20200805090053.11805-1-pragnesh.patel@sifive.com/


Thanks,
Pragnesh

>-----Original Message-----
>From: U-Boot <u-boot-bounces at lists.denx.de> On Behalf Of Pragnesh Patel
>Sent: 04 August 2020 20:03
>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,
>
>>-----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