RPI4: fail too boot with an initrd

From: LABBE Corentin
Date: Fri Feb 14 2020 - 08:27:59 EST


Hello

Since the inclusion of the "enable network support in RPi4 config" serie on uboot, I have started to work on adding the rpi4 in kernelCI.
But I fail to succeed in using a kernel/dtb/ramdisk downloaded via tftp.

Using booti I hit:
[ 0.000000] Linux version 5.6.0-rc1-next-20200212 (clabbe@build2-bionic-1804) (gcc version 7.4.1 20181213 [linaro-7.4-2019.02 revision 56ec6f6b99cc167ff0c2f8e1a2eed33b1edc85d4] (Linaro GCC 7.4-2019.02)) #66 SMP PREEMPT Wed Feb 12 10:14:20 UTC 2020
[ 0.000000] Machine model: Raspberry Pi 4 Model B
[ 0.000000] earlycon: uart0 at MMIO32 0x00000000fe215040 (options '')
[ 0.000000] printk: bootconsole [uart0] enabled
[ 0.000000] efi: Getting EFI parameters from FDT:
[ 0.000000] efi: UEFI not found.
[ 0.000000] OF: reserved mem: failed to allocate memory for node 'linux,cma'
[ 0.000000] cma: Failed to reserve 32 MiB
[ 0.000000] Kernel panic - not syncing: Failed to allocate page table page
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 5.6.0-rc1-next-20200212 #66
[ 0.000000] Hardware name: Raspberry Pi 4 Model B (DT)
[ 0.000000] Call trace:
[ 0.000000] dump_backtrace+0x0/0x1a0
[ 0.000000] show_stack+0x14/0x20
[ 0.000000] dump_stack+0xbc/0x104
[ 0.000000] panic+0x16c/0x37c
[ 0.000000] early_pgtable_alloc+0x30/0xa0
[ 0.000000] __create_pgd_mapping+0x36c/0x588
[ 0.000000] map_kernel_segment+0x70/0xa4
[ 0.000000] paging_init+0xf4/0x528
[ 0.000000] setup_arch+0x250/0x5d8
[ 0.000000] start_kernel+0x90/0x6d8


Since the same kernel boot with bootefi and that bootefi lack ramdisk address, I tried to add the address in the dtb via:
fdt addr 0x02400000; fdt resize; fdt set /chosen linux,initrd-start 0x02700000; fdt set /chosen linux,initrd-end 0x10000000; bootefi 0x00080000 0x02400000
But with that, I get:
initrd not fully accessible via the linear mapping -- please check your bootloader ...

I have tried many different start/end address without any change.


My last resort was to embed the rootfs in the kernel.
But with the correct console=, the boot stop at:
[ 1.373557] fe201000.serial: ttyAMA0 at MMIO 0xfe201000 (irq = 16, base_baud = 0) is a PL011 rev2
[ 1.382565] printk: console [ttyAMA0] enabled
[ 1.391318] printk: bootconsole [uart0] disabled

With the wrong console (ttyS0), the boot go up to start init which panic due to lack of console.

Regards