Re: master u-boot broken for HiFive Unleashed
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 = 0x > >DRAM bank = 0x > >-> start= 0x8000 > >-> size = 0x0002 > >memstart= 0x > >memsize = 0x > >flashstart = 0x > >flashsize = 0x > >flashoffset = 0x > >baudrate= 115200 bps > >relocaddr = 0xfff83000 > >reloc off = 0x7fd83000 > >Build = 64-bit > >current eth = ethernet@1009 > >ethaddr = (not set) > >IP addr = > >fdt_blob= 0xff75e680 > >new_fdt = 0xff75e680 > >fdt_size= 0x47a0 > >=> > > > >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 = 0x > >>memstart= 0x > >>memsize = 0x > >>flashstart = 0x > >>flashsize = 0x > >>flashoffset = 0x > >>baudrate= 115200 bps > >>relocaddr = 0xfff84000 > >>reloc off = 0x7fd84000 > >>Build = 64-bit > >> > >>=> bdinfo > >>boot_params = 0x9a26a361c16aa601 > >>DRAM bank = 0x > >>-> 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
RE: master u-boot broken for HiFive Unleashed
Hi Atish, I just sent a patch to solve this issue. https://patchwork.ozlabs.org/project/uboot/patch/20200805090053.11805-1-pragnesh.pa...@sifive.com/ Thanks, Pragnesh >-Original Message- >From: U-Boot On Behalf Of Pragnesh Patel >Sent: 04 August 2020 20:03 >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, > >>-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 = 0x >>DRAM bank = 0x >>-> start= 0x8000 >>-> size = 0x0002 >>memstart= 0x >>memsize = 0x >>flashstart = 0x >>flashsize = 0x >>flashoffset = 0x >>baudrate= 115200 bps >>relocaddr = 0xfff83000 >>reloc off = 0x7fd83000 >>Build = 64-bit >>current eth = ethernet@1009 >>ethaddr = (not set) >>IP addr = >>fdt_blob= 0xff75e680 >>new_fdt = 0xff75e680 >>fdt_size= 0x47a0 >>=> >> >>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 >>>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 = 0x >>>memstart= 0x >>>memsize = 0x >>>flashstart = 0x >>>flashsize = 0x >>>flashoffset = 0x >>>baudrate= 115200 bps >>>relocaddr = 0xfff84000 >>>reloc off = 0x7fd84000 >>>Build = 64-bit >>> >>>=> bdinfo >>>boot_params = 0x9a26a361c16aa601 >>>DRAM bank = 0x >>>-> 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
RE: master u-boot broken for HiFive Unleashed
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 = 0x >DRAM bank = 0x >-> start= 0x8000 >-> size = 0x0002 >memstart= 0x >memsize = 0x >flashstart = 0x >flashsize = 0x >flashoffset = 0x >baudrate= 115200 bps >relocaddr = 0xfff83000 >reloc off = 0x7fd83000 >Build = 64-bit >current eth = ethernet@1009 >ethaddr = (not set) >IP addr = >fdt_blob= 0xff75e680 >new_fdt = 0xff75e680 >fdt_size= 0x47a0 >=> > >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 >>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 = 0x >>memstart= 0x >>memsize = 0x >>flashstart = 0x >>flashsize = 0x >>flashoffset = 0x >>baudrate= 115200 bps >>relocaddr = 0xfff84000 >>reloc off = 0x7fd84000 >>Build = 64-bit >> >>=> bdinfo >>boot_params = 0x9a26a361c16aa601 >>DRAM bank = 0x >>-> 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
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 = 0x DRAM bank = 0x -> start= 0x8000 -> size = 0x0002 memstart= 0x memsize = 0x flashstart = 0x flashsize = 0x flashoffset = 0x baudrate= 115200 bps relocaddr = 0xfff83000 reloc off = 0x7fd83000 Build = 64-bit current eth = ethernet@1009 ethaddr = (not set) IP addr = fdt_blob= 0xff75e680 new_fdt = 0xff75e680 fdt_size= 0x47a0 => 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. >-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 = 0x >memstart= 0x >memsize = 0x >flashstart = 0x >flashsize = 0x >flashoffset = 0x >baudrate= 115200 bps >relocaddr = 0xfff84000 >reloc off = 0x7fd84000 >Build = 64-bit > >=> bdinfo >boot_params = 0x9a26a361c16aa601 >DRAM bank = 0x >-> 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
Re: master u-boot broken for HiFive Unleashed
On Sun, Aug 2, 2020 at 9:26 PM Bin Meng wrote: > > Hi Atish, > > On Thu, Jul 30, 2020 at 5:43 AM Atish Patra wrote: > > > > 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 = 0x > > memstart= 0x > > memsize = 0x > > flashstart = 0x > > flashsize = 0x > > flashoffset = 0x > > baudrate= 115200 bps > > relocaddr = 0xfff84000 > > reloc off = 0x7fd84000 > > Build = 64-bit > > > > => bdinfo > > boot_params = 0x9a26a361c16aa601 > > DRAM bank = 0x > > -> 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. > > I cannot reproduce this. See below log: > > U-Boot SPL 2020.10-rc1-00172-ga2d051e (Aug 03 2020 - 12:22:07 +0800) > Trying to boot from MMC1 > Thanks for testing. I was using FSBL. Let me try with U-Boot SPL. > > U-Boot 2020.10-rc1-00172-ga2d051e (Aug 03 2020 - 12:22:07 +0800) > > CPU: rv64imafdc > Model: SiFive HiFive Unleashed A00 > DRAM: 8 GiB > MMC: spi@1005:mmc@0: 0 > Loading Environment from SPIFlash... SF: Detected is25wp256 with page > size 256 Bytes, erase size 4 KiB, total 32 MiB > OK > In:serial@1001 > Out: serial@1001 > Err: serial@1001 > Net: eth0: ethernet@1009 > Hit any key to stop autoboot: 0 > => > => bdinfo > boot_params = 0x > DRAM bank = 0x > -> start= 0x8000 > -> size = 0x0002 > memstart= 0x > memsize = 0x > flashstart = 0x > flashsize = 0x > flashoffset = 0x > baudrate= 115200 bps > relocaddr = 0xfff83000 > reloc off = 0x7fd83000 > Build = 64-bit > current eth = ethernet@1009 > ethaddr = 70:b3:d5:92:f2:51 > IP addr = 128.224.159.129 > fdt_blob= 0xff75c4a0 > new_fdt = 0xff75c4a0 > fdt_size= 0x6980 > > => > > I built U-Boot from the latest u-boot/master: > > commit a2d051e7b6a8f87add1067d936bb0c805a47b0df > Merge: 719f421 db82015 > Author: Tom Rini > Date: Fri Jul 31 10:13:07 2020 -0400 > > Merge branch '2020-07-31-more-env-updates' > > - Fix EFI selftest to not force setting serial# environment (and also > get the U-Boot prompt dynamically). > - Support for append only environment and other related features. > - Improved ext4 environment support > - Fix the case of fw_setenv being used on flash devices that were not > already locked. > > Regards, > Bin -- Regards, Atish
Re: master u-boot broken for HiFive Unleashed
Hi Atish, On Thu, Jul 30, 2020 at 5:43 AM Atish Patra wrote: > > 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 = 0x > memstart= 0x > memsize = 0x > flashstart = 0x > flashsize = 0x > flashoffset = 0x > baudrate= 115200 bps > relocaddr = 0xfff84000 > reloc off = 0x7fd84000 > Build = 64-bit > > => bdinfo > boot_params = 0x9a26a361c16aa601 > DRAM bank = 0x > -> 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. I cannot reproduce this. See below log: U-Boot SPL 2020.10-rc1-00172-ga2d051e (Aug 03 2020 - 12:22:07 +0800) Trying to boot from MMC1 U-Boot 2020.10-rc1-00172-ga2d051e (Aug 03 2020 - 12:22:07 +0800) CPU: rv64imafdc Model: SiFive HiFive Unleashed A00 DRAM: 8 GiB MMC: spi@1005:mmc@0: 0 Loading Environment from SPIFlash... SF: Detected is25wp256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB OK In:serial@1001 Out: serial@1001 Err: serial@1001 Net: eth0: ethernet@1009 Hit any key to stop autoboot: 0 => => bdinfo boot_params = 0x DRAM bank = 0x -> start= 0x8000 -> size = 0x0002 memstart= 0x memsize = 0x flashstart = 0x flashsize = 0x flashoffset = 0x baudrate= 115200 bps relocaddr = 0xfff83000 reloc off = 0x7fd83000 Build = 64-bit current eth = ethernet@1009 ethaddr = 70:b3:d5:92:f2:51 IP addr = 128.224.159.129 fdt_blob= 0xff75c4a0 new_fdt = 0xff75c4a0 fdt_size= 0x6980 => I built U-Boot from the latest u-boot/master: commit a2d051e7b6a8f87add1067d936bb0c805a47b0df Merge: 719f421 db82015 Author: Tom Rini Date: Fri Jul 31 10:13:07 2020 -0400 Merge branch '2020-07-31-more-env-updates' - Fix EFI selftest to not force setting serial# environment (and also get the U-Boot prompt dynamically). - Support for append only environment and other related features. - Improved ext4 environment support - Fix the case of fw_setenv being used on flash devices that were not already locked. Regards, Bin