master u-boot broken for HiFive Unleashed

Atish Patra atishp at atishpatra.org
Sun Aug 9 22:17:24 CEST 2020


On Tue, Aug 4, 2020 at 7:33 AM Pragnesh Patel <pragnesh.patel at sifive.com> wrote:
>
> 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).
>

Thanks for root causing the issue. Apologies for not replying earlier.

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



-- 
Regards,
Atish


More information about the U-Boot mailing list