Raspberry Pi Boot 1b / Uboot boot failure with large initramfs

Hi,
I am facing intermittend boot failures resulting in a data abort. Boot log and environment attached below. The uboot is built with rpi_defconfig with OF_BOARD to get uboot to pass through the FDT.
Note:
(1) If I boot this image directly using the RPI bootloader, the kernel (with initramfs embedded) boots fine consistently.
(2) However, I get inconsistent failures with uboot. My gut tells me memory is getting corrupted.
(3) Sometimes just adding one option to the bootargs breaks the next boot.
(4) It seems the FDT address changes slightly (see failed vs OK). Not sure if this is expected from start.elf (I assume the FDT address is supplied to u-boot).
(5) Is the size of the image overwriting anything in u-boot? I am not that familiar with the u-boot memory map.
I boot using the following environment changes: bootargs=bootslot=a console=ttyAMA0,115200 root=/dev/null bootcmd=fatload mmc 0:1 ${kernel_addr_r} kernel.a.img ; bootz ${kernel_addr_r} - ${fdtcontroladdr}
Any ideas?
Regards, Fred
BOOT:
DRAM: 448 MiB RPI Model B rev2 (0xe) MMC: mmc@7e202000: 0 Loading Environment from FAT... OK In: serial Out: vidconsole Err: vidconsole Net: No ethernet found. starting USB... Bus usb@7e980000: usb dr_mode not found USB DWC2 scanning bus usb@7e980000 for devices... 3 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found Hit any key to stop autoboot: 0 70746744 bytes read in 2940 ms (22.9 MiB/s) Kernel image @ 0x080000 [ 0x000000 - 0x4378278 ] ## Flattened Device Tree blob at 1bb500e0 Booting using the fdt blob at 0x1bb500e0 Using Device Tree in place at 1bb500e0, end 1bb59ebe data abort pc : [<1bf5c4ec>] lr : [<1bf5c7c4>] reloc pc : [<000094ec>] lr : [<000097c4>] sp : 1bb4fdb8 ip : 0000000c fp : 00000003 r10: 00000000 r9 : 1bb56ec0 r8 : 1bb6bad4 r7 : 00000000 r6 : 00080000 r5 : 1bfc5874 r4 : 00000400 r3 : 0074616d r2 : 1bb6bad4 r1 : 00000400 r0 : 1bfc5874 Flags: nzcv IRQs off FIQs off Mode SVC_32 Code: e12fff1e e92d4073 e5993000 e5906060 (e5933038) Resetting CPU ...
resetting ...
ENV:
arch=arm baudrate=115200 board=rpi board_name=Model B rev2 board_rev=0xE board_rev_scheme=0 board_revision=0xE boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr} boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi boot_efi_bootmgr=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr;fi boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf} boot_net_usb_start=usb start boot_prefixes=/ /boot/ boot_script_dhcp=boot.scr.uimg boot_scripts=boot.scr.uimg boot.scr boot_syslinux_conf=extlinux/extlinux.conf boot_targets=mmc0 mmc1 usb0 pxe dhcp bootargs=bootslot=a console=ttyAMA0,115200 root=/dev/null bootcmd=fatload mmc 0:1 ${kernel_addr_r} kernel.a.img ; bootz ${kernel_addr_r} - ${fdtcontroladdr} bootcmd_dhcp=devtype=dhcp; run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci PXEClient:Arch:00010:UNDI:003000;setenv bootp_arch 0xa;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_vci; bootcmd_mmc0=devnum=0; run mmc_boot bootcmd_mmc1=devnum=1; run mmc_boot bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi bootcmd_usb0=devnum=0; run usb_boot bootdelay=2 cpu=arm1176 dhcpuboot=usb start; dhcp u-boot.uimg; bootm distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done efi_dtb_prefixes=/ /dtb/ /dtb/current/ ethaddr=b8:27:eb:46:ba:40 fdt_addr=1bfe9200 fdt_addr_r=0x02600000 fdt_high=ffffffff fdtcontroladdr=1bb500e0 fdtfile=bcm2835-rpi-b-rev2.dtb initrd_high=ffffffff kernel_addr_r=0x00080000 load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile} loadaddr=0x00200000 mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi preboot=usb start pxefile_addr_r=0x02500000 ramdisk_addr_r=0x02700000 scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi; scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done; setenv devplist scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;run boot_efi_bootmgr;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootarm.efi; then echo Found EFI removable media binary efi/boot/bootarm.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done scriptaddr=0x02400000 serial#=00000000ec46ba40 soc=bcm283x stderr=serial,vidconsole stdin=serial,usbkbd stdout=serial,vidconsole usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi usbethaddr=b8:27:eb:46:ba:40 vendor=raspberrypi
GOOD UBOOT BOOT:
U-Boot> boot 70746744 bytes read in 2942 ms (22.9 MiB/s) Kernel image @ 0x080000 [ 0x000000 - 0x4378278 ] ## Flattened Device Tree blob at 1bb500c0 Booting using the fdt blob at 0x1bb500c0 Using Device Tree in place at 1bb500c0, end 1bb59eaa
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.10.82-rpiv6-kernos (root@flotter-pc) (armv6-rpi-linux-musleabihf-gcc (crosstool-NG UNKNOWN) 11.2.0, GNU ld (crosstool-NG UNKNOWN) 2.37) #2 Mon Dec 6 00:09:19 SAST 2021 [ 0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache [ 0.000000] OF: fdt: Machine model: Raspberry Pi Model B Rev 2 [ 0.000000] random: fast init done [ 0.000000] Memory policy: Data cache writeback [ 0.000000] Reserved memory: created CMA memory pool at 0x17800000, size 64 MiB [ 0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool [ 0.000000] Zone ranges: [ 0.000000] Normal [mem 0x0000000000000000-0x000000001bffffff] [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000000000000-0x000000001bffffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000001bffffff] [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 113680 [ 0.000000] Kernel command line: bootslot=a console=ttyAMA0,115200 root=/dev/null [ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear) [ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear) [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off [ 0.000000] Memory: 310640K/458752K available (8867K kernel code, 1325K rwdata, 2792K rodata, 64024K init, 836K bss, 82576K reserved, 65536K cma-reserved) [ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] ftrace: allocating 29813 entries in 88 pages [ 0.000000] ftrace: allocated 88 pages with 3 groups [ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 [ 0.000000] random: get_random_bytes called from start_kernel+0x32c/0x57c with crng_init=1 [ 0.000027] sched_clock: 32 bits at 1000kHz, resolution 1000ns, wraps every 2147483647500ns [ 0.000104] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275 ns [ 0.000199] bcm2835: system timer (irq = 27) [ 0.000890] Console: colour dummy device 80x30 [ 0.000997] Calibrating delay loop... 697.95 BogoMIPS (lpj=3489792) [ 0.060356] pid_max: default: 32768 minimum: 301 [ 0.060665] LSM: Security Framework initializing [ 0.061003] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.061050] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.063391] cgroup: Disabling memory control group subsystem [ 0.063847] CPU: Testing write buffer coherency: ok [ 0.066086] Setting up static identity map for 0x8240 - 0x8278 [ 0.067555] devtmpfs: initialized [ 0.079529] VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5 [ 0.079971] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.080032] futex hash table entries: 256 (order: -1, 3072 bytes, linear) [ 0.089374] pinctrl core: initialized pinctrl subsystem [ 0.091692] NET: Registered protocol family 16 [ 0.095545] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 0.102090] audit: initializing netlink subsys (disabled) [ 0.103799] thermal_sys: Registered thermal governor 'step_wise' [ 0.104272] hw-breakpoint: found 6 breakpoint and 1 watchpoint registers. [ 0.104322] hw-breakpoint: maximum watchpoint size is 4 bytes. [ 0.104631] Serial: AMBA PL011 UART driver [ 0.110828] audit: type=2000 audit(0.100:1): state=initialized audit_enabled=0 res=1 [ 0.127927] bcm2835-mbox 2000b880.mailbox: mailbox enabled [ 0.140861] raspberrypi-firmware soc:firmware: Attached to firmware from 2021-12-01T11:48:03, variant start [ 0.150873] raspberrypi-firmware soc:firmware: Firmware hash is be18b6271a0f99f896fc81249da5da6658422558 [ 0.204413] Kprobes globally optimized [ 0.215320] bcm2835-dma 20007000.dma: DMA legacy API manager, dmachans=0x1 [ 0.218694] SCSI subsystem initialized [ 0.219212] usbcore: registered new interface driver usbfs [ 0.219352] usbcore: registered new interface driver hub [ 0.219487] usbcore: registered new device driver usb [ 0.222073] clocksource: Switched to clocksource timer

Frederick
-----Original Message----- From: U-Boot u-boot-bounces@lists.denx.de On Behalf Of Frederik Lotter Sent: Monday, December 6, 2021 12:55 AM To: u-boot@lists.denx.de Subject: [External] - Raspberry Pi Boot 1b / Uboot boot failure with large initramfs
Hi,
I am facing intermittend boot failures resulting in a data abort. Boot log and environment attached below. The uboot is built with rpi_defconfig with OF_BOARD to get uboot to pass through the FDT.
Note:
(1) If I boot this image directly using the RPI bootloader, the kernel (with initramfs embedded) boots fine consistently.
(2) However, I get inconsistent failures with uboot. My gut tells me memory is getting corrupted.
(3) Sometimes just adding one option to the bootargs breaks the next boot.
(4) It seems the FDT address changes slightly (see failed vs OK). Not sure if this is expected from start.elf (I assume the FDT address is supplied to u- boot).
(5) Is the size of the image overwriting anything in u-boot? I am not that familiar with the u-boot memory map.
I boot using the following environment changes: bootargs=bootslot=a console=ttyAMA0,115200 root=/dev/null bootcmd=fatload mmc 0:1 ${kernel_addr_r} kernel.a.img ; bootz ${kernel_addr_r} - ${fdtcontroladdr}
Do you have the same problems when using ${fdt_addr}?
Any ideas?
Regards, Fred
BOOT:
DRAM: 448 MiB RPI Model B rev2 (0xe) MMC: mmc@7e202000: 0 Loading Environment from FAT... OK In: serial Out: vidconsole Err: vidconsole Net: No ethernet found. starting USB... Bus usb@7e980000: usb dr_mode not found USB DWC2 scanning bus usb@7e980000 for devices... 3 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found Hit any key to stop autoboot: 0 70746744 bytes read in 2940 ms (22.9 MiB/s) Kernel image @ 0x080000 [ 0x000000 - 0x4378278 ] ## Flattened Device Tree blob at 1bb500e0 Booting using the fdt blob at 0x1bb500e0 Using Device Tree in place at 1bb500e0, end 1bb59ebe data abort pc : [<1bf5c4ec>] lr : [<1bf5c7c4>] reloc pc : [<000094ec>] lr : [<000097c4>] sp : 1bb4fdb8 ip : 0000000c fp : 00000003 r10: 00000000 r9 : 1bb56ec0 r8 : 1bb6bad4 r7 : 00000000 r6 : 00080000 r5 : 1bfc5874 r4 : 00000400 r3 : 0074616d r2 : 1bb6bad4 r1 : 00000400 r0 : 1bfc5874 Flags: nzcv IRQs off FIQs off Mode SVC_32 Code: e12fff1e e92d4073 e5993000 e5906060 (e5933038) Resetting CPU ...
resetting ...
ENV:
arch=arm baudrate=115200 board=rpi board_name=Model B rev2 board_rev=0xE board_rev_scheme=0 board_revision=0xE boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr} boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi boot_efi_bootmgr=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr;fi boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf} boot_net_usb_start=usb start boot_prefixes=/ /boot/ boot_script_dhcp=boot.scr.uimg boot_scripts=boot.scr.uimg boot.scr boot_syslinux_conf=extlinux/extlinux.conf boot_targets=mmc0 mmc1 usb0 pxe dhcp bootargs=bootslot=a console=ttyAMA0,115200 root=/dev/null bootcmd=fatload mmc 0:1 ${kernel_addr_r} kernel.a.img ; bootz ${kernel_addr_r} - ${fdtcontroladdr} bootcmd_dhcp=devtype=dhcp; run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci PXEClient:Arch:00010:UNDI:003000;setenv bootp_arch 0xa;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_vci; bootcmd_mmc0=devnum=0; run mmc_boot bootcmd_mmc1=devnum=1; run mmc_boot bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi bootcmd_usb0=devnum=0; run usb_boot bootdelay=2 cpu=arm1176 dhcpuboot=usb start; dhcp u-boot.uimg; bootm distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done efi_dtb_prefixes=/ /dtb/ /dtb/current/ ethaddr=b8:27:eb:46:ba:40 fdt_addr=1bfe9200 fdt_addr_r=0x02600000 fdt_high=ffffffff fdtcontroladdr=1bb500e0 fdtfile=bcm2835-rpi-b-rev2.dtb initrd_high=ffffffff kernel_addr_r=0x00080000 load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile} loadaddr=0x00200000 mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi preboot=usb start pxefile_addr_r=0x02500000 ramdisk_addr_r=0x02700000 scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi; scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done; setenv devplist scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}- ${board}${boardver}.dtb; fi; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;run boot_efi_bootmgr;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootarm.efi; then echo Found EFI removable media binary efi/boot/bootarm.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done scriptaddr=0x02400000 serial#=00000000ec46ba40 soc=bcm283x stderr=serial,vidconsole stdin=serial,usbkbd stdout=serial,vidconsole usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi usbethaddr=b8:27:eb:46:ba:40 vendor=raspberrypi
GOOD UBOOT BOOT:
U-Boot> boot 70746744 bytes read in 2942 ms (22.9 MiB/s) Kernel image @ 0x080000 [ 0x000000 - 0x4378278 ] ## Flattened Device Tree blob at 1bb500c0 Booting using the fdt blob at 0x1bb500c0 Using Device Tree in place at 1bb500c0, end 1bb59eaa
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.10.82-rpiv6-kernos (root@flotter-pc) (armv6-rpi-linux-musleabihf-gcc (crosstool-NG UNKNOWN) 11.2.0, GNU ld (crosstool-NG UNKNOWN) 2.37) #2 Mon Dec 6 00:09:19 SAST 2021 [ 0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache [ 0.000000] OF: fdt: Machine model: Raspberry Pi Model B Rev 2 [ 0.000000] random: fast init done [ 0.000000] Memory policy: Data cache writeback [ 0.000000] Reserved memory: created CMA memory pool at 0x17800000, size 64 MiB [ 0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool [ 0.000000] Zone ranges: [ 0.000000] Normal [mem 0x0000000000000000-0x000000001bffffff] [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000000000000-0x000000001bffffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000001bffffff] [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 113680 [ 0.000000] Kernel command line: bootslot=a console=ttyAMA0,115200 root=/dev/null [ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear) [ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear) [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off [ 0.000000] Memory: 310640K/458752K available (8867K kernel code, 1325K rwdata, 2792K rodata, 64024K init, 836K bss, 82576K reserved, 65536K cma-reserved) [ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] ftrace: allocating 29813 entries in 88 pages [ 0.000000] ftrace: allocated 88 pages with 3 groups [ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 [ 0.000000] random: get_random_bytes called from start_kernel+0x32c/0x57c with crng_init=1 [ 0.000027] sched_clock: 32 bits at 1000kHz, resolution 1000ns, wraps every 2147483647500ns [ 0.000104] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275 ns [ 0.000199] bcm2835: system timer (irq = 27) [ 0.000890] Console: colour dummy device 80x30 [ 0.000997] Calibrating delay loop... 697.95 BogoMIPS (lpj=3489792) [ 0.060356] pid_max: default: 32768 minimum: 301 [ 0.060665] LSM: Security Framework initializing [ 0.061003] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.061050] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.063391] cgroup: Disabling memory control group subsystem [ 0.063847] CPU: Testing write buffer coherency: ok [ 0.066086] Setting up static identity map for 0x8240 - 0x8278 [ 0.067555] devtmpfs: initialized [ 0.079529] VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5 [ 0.079971] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.080032] futex hash table entries: 256 (order: -1, 3072 bytes, linear) [ 0.089374] pinctrl core: initialized pinctrl subsystem [ 0.091692] NET: Registered protocol family 16 [ 0.095545] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 0.102090] audit: initializing netlink subsys (disabled) [ 0.103799] thermal_sys: Registered thermal governor 'step_wise' [ 0.104272] hw-breakpoint: found 6 breakpoint and 1 watchpoint registers. [ 0.104322] hw-breakpoint: maximum watchpoint size is 4 bytes. [ 0.104631] Serial: AMBA PL011 UART driver [ 0.110828] audit: type=2000 audit(0.100:1): state=initialized audit_enabled=0 res=1 [ 0.127927] bcm2835-mbox 2000b880.mailbox: mailbox enabled [ 0.140861] raspberrypi-firmware soc:firmware: Attached to firmware from 2021-12-01T11:48:03, variant start [ 0.150873] raspberrypi-firmware soc:firmware: Firmware hash is be18b6271a0f99f896fc81249da5da6658422558 [ 0.204413] Kprobes globally optimized [ 0.215320] bcm2835-dma 20007000.dma: DMA legacy API manager, dmachans=0x1 [ 0.218694] SCSI subsystem initialized [ 0.219212] usbcore: registered new interface driver usbfs [ 0.219352] usbcore: registered new interface driver hub [ 0.219487] usbcore: registered new device driver usb [ 0.222073] clocksource: Switched to clocksource timer CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.

Hi Vincent!
On Mon, 6 Dec 2021 at 16:36, Vincent Fazio vfazio@xes-inc.com wrote:
Frederick
-----Original Message----- From: U-Boot u-boot-bounces@lists.denx.de On Behalf Of Frederik Lotter Sent: Monday, December 6, 2021 12:55 AM To: u-boot@lists.denx.de Subject: [External] - Raspberry Pi Boot 1b / Uboot boot failure with
large
initramfs
Hi,
I am facing intermittend boot failures resulting in a data abort. Boot
log and
environment attached below. The uboot is built with rpi_defconfig with OF_BOARD to get uboot to pass through the FDT.
Note:
(1) If I boot this image directly using the RPI bootloader, the kernel
(with
initramfs embedded) boots fine consistently.
(2) However, I get inconsistent failures with uboot. My gut tells me
memory
is getting corrupted.
(3) Sometimes just adding one option to the bootargs breaks the next
boot.
(4) It seems the FDT address changes slightly (see failed vs OK). Not
sure if
this is expected from start.elf (I assume the FDT address is supplied to
u-
boot).
(5) Is the size of the image overwriting anything in u-boot? I am not
that
familiar with the u-boot memory map.
I boot using the following environment changes: bootargs=bootslot=a console=ttyAMA0,115200 root=/dev/null bootcmd=fatload mmc 0:1 ${kernel_addr_r} kernel.a.img ; bootz ${kernel_addr_r} - ${fdtcontroladdr}
Do you have the same problems when using ${fdt_addr}?
I found a patch proposal where someone suggested that ${fdtcontroladdr} and ${fdt_addr} could end up being saved in the environment (saveenv), and causing a old value getting loaded.
This resulted me in doing two things, which fixed the issue:
(1) Remove both these environment variables (env delete) before saving
(2) Using ${fdt_addr} for bootz
Everything now works perfectly.
Would you mind clarifying the difference between ${fdtcontroladdr} and ${fdt_addr}? I got the impression I had to use ${fdtcontroladdr} with CONFIG_OF_BOARD, but that could have been a faulty source of information.
Any ideas?
Regards, Fred
BOOT:
DRAM: 448 MiB RPI Model B rev2 (0xe) MMC: mmc@7e202000: 0 Loading Environment from FAT... OK In: serial Out: vidconsole Err: vidconsole Net: No ethernet found. starting USB... Bus usb@7e980000: usb dr_mode not found USB DWC2 scanning bus usb@7e980000 for devices... 3 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found Hit
any key
to stop autoboot: 0 70746744 bytes read in 2940 ms (22.9 MiB/s) Kernel image @ 0x080000 [ 0x000000 - 0x4378278 ] ## Flattened Device Tree blob at 1bb500e0 Booting using the fdt blob at 0x1bb500e0 Using Device Tree in place at 1bb500e0, end 1bb59ebe data abort pc : [<1bf5c4ec>] lr : [<1bf5c7c4>] reloc pc : [<000094ec>] lr : [<000097c4>] sp : 1bb4fdb8 ip : 0000000c fp : 00000003 r10: 00000000 r9 : 1bb56ec0 r8 : 1bb6bad4 r7 : 00000000 r6 : 00080000 r5 : 1bfc5874 r4 : 00000400 r3 : 0074616d r2 : 1bb6bad4 r1 : 00000400 r0 : 1bfc5874 Flags: nzcv IRQs off FIQs off Mode SVC_32 Code: e12fff1e e92d4073 e5993000 e5906060 (e5933038) Resetting CPU ...
resetting ...
ENV:
arch=arm baudrate=115200 board=rpi board_name=Model B rev2 board_rev=0xE board_rev_scheme=0 board_revision=0xE boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr} boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if
fdt
addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi boot_efi_bootmgr=if fdt
addr
${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr;fi boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf} boot_net_usb_start=usb start boot_prefixes=/ /boot/ boot_script_dhcp=boot.scr.uimg boot_scripts=boot.scr.uimg boot.scr boot_syslinux_conf=extlinux/extlinux.conf boot_targets=mmc0 mmc1 usb0 pxe dhcp bootargs=bootslot=a console=ttyAMA0,115200 root=/dev/null bootcmd=fatload mmc 0:1 ${kernel_addr_r} kernel.a.img ; bootz ${kernel_addr_r} - ${fdtcontroladdr} bootcmd_dhcp=devtype=dhcp; run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then
source
${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}"
-a -n
"${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi;
setenv
efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci PXEClient:Arch:00010:UNDI:003000;setenv bootp_arch 0xa;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt
addr
${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv
efi_fdtfile;setenv
efi_old_arch;setenv efi_old_vci; bootcmd_mmc0=devnum=0; run mmc_boot bootcmd_mmc1=devnum=1; run mmc_boot bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi bootcmd_usb0=devnum=0; run usb_boot bootdelay=2 cpu=arm1176 dhcpuboot=usb start; dhcp u-boot.uimg; bootm distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done efi_dtb_prefixes=/ /dtb/ /dtb/current/ ethaddr=b8:27:eb:46:ba:40 fdt_addr=1bfe9200 fdt_addr_r=0x02600000 fdt_high=ffffffff fdtcontroladdr=1bb500e0 fdtfile=bcm2835-rpi-b-rev2.dtb initrd_high=ffffffff kernel_addr_r=0x00080000 load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile} loadaddr=0x00200000 mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi preboot=usb start pxefile_addr_r=0x02500000 ramdisk_addr_r=0x02700000 scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi; scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done; setenv devplist scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if
test -z
"${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}- ${board}${boardver}.dtb; fi; for prefix in ${efi_dtb_prefixes}; do if
test -e
${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;run boot_efi_bootmgr;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootarm.efi; then echo Found EFI removable media binary efi/boot/bootarm.efi; run boot_efi_binary; echo
EFI
LOAD FAILED: continuing...; fi; setenv efi_fdtfile
scan_dev_for_extlinux=if
test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e
${devtype}
${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done scriptaddr=0x02400000 serial#=00000000ec46ba40 soc=bcm283x stderr=serial,vidconsole stdin=serial,usbkbd stdout=serial,vidconsole usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi usbethaddr=b8:27:eb:46:ba:40 vendor=raspberrypi
GOOD UBOOT BOOT:
U-Boot> boot 70746744 bytes read in 2942 ms (22.9 MiB/s) Kernel image @ 0x080000 [ 0x000000 - 0x4378278 ] ## Flattened Device Tree blob at 1bb500c0 Booting using the fdt blob at 0x1bb500c0 Using Device Tree in place at 1bb500c0, end 1bb59eaa
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.10.82-rpiv6-kernos (root@flotter-pc) (armv6-rpi-linux-musleabihf-gcc (crosstool-NG UNKNOWN) 11.2.0, GNU ld (crosstool-NG UNKNOWN) 2.37) #2 Mon Dec 6 00:09:19 SAST 2021 [ 0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache [ 0.000000] OF: fdt: Machine model: Raspberry Pi Model B Rev 2 [ 0.000000] random: fast init done [ 0.000000] Memory policy: Data cache writeback [ 0.000000] Reserved memory: created CMA memory pool at 0x17800000, size 64 MiB [ 0.000000] OF: reserved mem: initialized node linux,cma, compatible
id
shared-dma-pool [ 0.000000] Zone ranges: [ 0.000000] Normal [mem 0x0000000000000000-0x000000001bffffff] [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000000000000-0x000000001bffffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000001bffffff] [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages:
113680
[ 0.000000] Kernel command line: bootslot=a console=ttyAMA0,115200 root=/dev/null [ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear) [ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear) [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off [ 0.000000] Memory: 310640K/458752K available (8867K kernel code,
1325K
rwdata, 2792K rodata, 64024K init, 836K bss, 82576K reserved, 65536K cma-reserved) [ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] ftrace: allocating 29813 entries in 88 pages [ 0.000000] ftrace: allocated 88 pages with 3 groups [ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 [ 0.000000] random: get_random_bytes called from start_kernel+0x32c/0x57c with crng_init=1 [ 0.000027] sched_clock: 32 bits at 1000kHz, resolution 1000ns, wraps every 2147483647500ns [ 0.000104] clocksource: timer: mask: 0xffffffff max_cycles:
0xffffffff,
max_idle_ns: 1911260446275 ns [ 0.000199] bcm2835: system timer (irq = 27) [ 0.000890] Console: colour dummy device 80x30 [ 0.000997] Calibrating delay loop... 697.95 BogoMIPS (lpj=3489792) [ 0.060356] pid_max: default: 32768 minimum: 301 [ 0.060665] LSM: Security Framework initializing [ 0.061003] Mount-cache hash table entries: 1024 (order: 0, 4096
bytes,
linear) [ 0.061050] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.063391] cgroup: Disabling memory control group subsystem [ 0.063847] CPU: Testing write buffer coherency: ok [ 0.066086] Setting up static identity map for 0x8240 - 0x8278 [ 0.067555] devtmpfs: initialized [ 0.079529] VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5 [ 0.079971] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.080032] futex hash table entries: 256 (order: -1, 3072 bytes,
linear)
[ 0.089374] pinctrl core: initialized pinctrl subsystem [ 0.091692] NET: Registered protocol family 16 [ 0.095545] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 0.102090] audit: initializing netlink subsys (disabled) [ 0.103799] thermal_sys: Registered thermal governor 'step_wise' [ 0.104272] hw-breakpoint: found 6 breakpoint and 1 watchpoint
registers.
[ 0.104322] hw-breakpoint: maximum watchpoint size is 4 bytes. [ 0.104631] Serial: AMBA PL011 UART driver [ 0.110828] audit: type=2000 audit(0.100:1): state=initialized audit_enabled=0 res=1 [ 0.127927] bcm2835-mbox 2000b880.mailbox: mailbox enabled [ 0.140861] raspberrypi-firmware soc:firmware: Attached to firmware
from
2021-12-01T11:48:03, variant start [ 0.150873] raspberrypi-firmware soc:firmware: Firmware hash is be18b6271a0f99f896fc81249da5da6658422558 [ 0.204413] Kprobes globally optimized [ 0.215320] bcm2835-dma 20007000.dma: DMA legacy API manager, dmachans=0x1 [ 0.218694] SCSI subsystem initialized [ 0.219212] usbcore: registered new interface driver usbfs [ 0.219352] usbcore: registered new interface driver hub [ 0.219487] usbcore: registered new device driver usb [ 0.222073] clocksource: Switched to clocksource timer CAUTION: This email originated from outside of the organization. Do not
click
links or open attachments unless you recognize the sender and know the content is safe.
participants (2)
-
Frederik Lotter
-
Vincent Fazio