From mboxrd@z Thu Jan 1 00:00:00 1970 From: Atish Patra Date: Sun, 9 Aug 2020 13:17:24 -0700 Subject: master u-boot broken for HiFive Unleashed In-Reply-To: References: Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Tue, Aug 4, 2020 at 7:33 AM Pragnesh Patel wrote: > > Hi Atish, > > >-----Original Message----- > >From: U-Boot On Behalf Of Pragnesh Patel > >Sent: 04 August 2020 19:55 > >To: Atish Patra ; Bin Meng ; > >Rick Chen > >Cc: Anup Patel ; Lukas Auer > >; U-Boot Mailing List > >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 = > >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 > >>Sent: 30 July 2020 03:13 > >>To: U-Boot Mailing List ; Bin Meng > >>; Rick Chen > >>Cc: Anup Patel ; Lukas Auer > >>; Pragnesh Patel > >> > >>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