Hi Atish, >-----Original Message----- >From: U-Boot <u-boot-boun...@lists.denx.de> On Behalf Of Pragnesh Patel >Sent: 04 August 2020 19:55 >To: Atish Patra <ati...@atishpatra.org>; Bin Meng <bmeng...@gmail.com>; >Rick Chen <r...@andestech.com> >Cc: Anup Patel <a...@brainfault.org>; Lukas Auer ><lukas.a...@aisec.fraunhofer.de>; U-Boot Mailing List <u-boot@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@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 <ati...@atishpatra.org> >>Sent: 30 July 2020 03:13 >>To: U-Boot Mailing List <u-boot@lists.denx.de>; Bin Meng >><bmeng...@gmail.com>; Rick Chen <r...@andestech.com> >>Cc: Anup Patel <a...@brainfault.org>; Lukas Auer >><lukas.a...@aisec.fraunhofer.de>; Pragnesh Patel >><pragnesh.pa...@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