Date: Sat, 17 Mar 2018 23:36:35 +0000 From: Michael Tuexen <tuexen@freebsd.org> To: Andrew Turner <andrew@fubar.geek.nz> Cc: freebsd-arm <freebsd-arm@freebsd.org> Subject: Re: arm64 panics on boot on a RPi3 Message-ID: <656FA611-2F31-4B5A-85AC-EF1F18756BBB@freebsd.org> In-Reply-To: <AE5CA729-3026-4649-9651-B3A2A64AF9B3@fubar.geek.nz> References: <7D7EAF74-95E3-4B48-BC57-C3CE4D13501B@freebsd.org> <AE5CA729-3026-4649-9651-B3A2A64AF9B3@fubar.geek.nz>
next in thread | previous in thread | raw e-mail | index | archive | help
> On 17. Mar 2018, at 12:02, Andrew Turner <andrew@fubar.geek.nz> wrote: >=20 > You need to update loader.efi. A recent change to the kernel means we = can now enable the EFI runtime services when booting from U-Boot. There = is however an issue where if you try to read the time before calling = SetVirtualAddressMap it will try to call into a function out side of the = runtime map. As this isn=E2=80=99t a valid address we don=E2=80=99t = include it in the memory map so you get the panic below. Hi Andrew, updating loader.efi fixed the problem. Thank you very much! Best regards Michael >=20 > It doesn=E2=80=99t seem to be an issue on UEFI implementations derived = from EDK2. >=20 > Andrew >=20 >> On 17 Mar 2018, at 10:20, Michael Tuexen <tuexen@freebsd.org> wrote: >>=20 >> Dear all, >>=20 >> FreeBSD head of today panics when booting the arm64 code on a RPi3: >>=20 >>>> FreeBSD EFI boot block >> Loader path: /boot/loader.efi >>=20 >> Initializing modules: UFS >> Probing 3 block devices.....* done >> UFS found 1 partition >> Consoles: EFI console =20 >> Command line arguments: loader.efi >> Image base: 0x39ab8008 >> EFI version: 2.05 >> EFI Firmware: Das U-boot (rev 0.00) >>=20 >> FreeBSD/arm64 EFI loader, Revision 1.1 >> (Wed Dec 6 19:13:14 CET 2017 root@bsd18.fh-muenster.de) >> EFI boot environment >> Loading /boot/defaults/loader.conf >> /boot/kernel/kernel text=3D0x8482a0 data=3D0x137018+0x71f83c = syms=3D[0x8+0x1148a0+0x8+0x106675] >> /boot/entropy size=3D0x1000 >> /boot/kernel/geom_label.ko text=3D0x2b40 text=3D0x2610 = data=3D0x10120+0xfee4 syms=3D[0x8+0x15a8+0x8+0xf73] >>=20 >> Hit [Enter] to boot immediately, or any other key for command prompt. >> Booting [/boot/kernel/kernel]... =20 >> Using DTB provided by EFI at 0x8004000. >> KDB: debugger backends: ddb >> KDB: current backend: ddb >> Copyright (c) 1992-2018 The FreeBSD Project. >> Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, = 1994 >> The Regents of the University of California. All rights = reserved. >> FreeBSD is a registered trademark of The FreeBSD Foundation. >> FreeBSD 12.0-CURRENT #65 r331093: Sat Mar 17 11:05:06 CET 2018 >> = tuexen@bsd10.fh-muenster.de:/usr/home/tuexen/head/sys/arm64/compile/TCP = arm64 >> FreeBSD clang version 5.0.1 (branches/release_50 319231) (based on = LLVM 5.0.1) >> VT: init without driver. >> sysctl_warn_reuse: can't re-use a leaf (kern.features.geom_label)! >> module_register: cannot register g_label from kernel; already loaded = from geom_label.ko >> Module g_label failed to register: 17 >> Starting CPU 1 (1) >> Starting CPU 2 (2) >> Starting CPU 3 (3) >> FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs >> random: unblocking device. >> MAP 39b1b000 mode 2 pages 1 >> MAP 3af86000 mode 2 pages 2 >> MAP 3f100000 mode 1 pages 1 >> random: entropy device external interface >> kbd0 at kbdmux0 >> ofwbus0: <Open Firmware Device Tree> >> simplebus0: <Flattened device tree simple bus> on ofwbus0 >> ofw_clkbus0: <OFW clocks bus> on ofwbus0 >> clk_fixed0: <Fixed clock> on ofw_clkbus0 >> clk_fixed1: <Fixed clock> on ofw_clkbus0 >> regfix0: <Fixed Regulator> on ofwbus0 >> regfix1: <Fixed Regulator> on ofwbus0 >> psci0: <ARM Power State Co-ordination Interface Driver> on ofwbus0 >> local_intc0: <BCM2836 Interrupt Controller> mem 0x40000000-0x400000ff = on simplebus0 >> intc0: <BCM2835 Interrupt Controller> mem 0x7e00b200-0x7e00b3ff irq = 16 on simplebus0 >> generic_timer0: <ARMv7 Generic Timer> irq 47,48,49,50 on simplebus0 >> Timecounter "ARM MPCore Timecounter" frequency 19200000 Hz quality = 1000 >> Event timer "ARM MPCore Eventtimer" frequency 19200000 Hz quality = 1000 >> x0: ffff0000000109e0 >> x1: ffff0000000109b0 >> x2: 4 >> x3: ffff00000043e638 >> x4: ffff00000076eb28 >> x5: 110 >> x6: ffff000000010808 >> x7: ffff000000010638 >> x8: 3af61fd0 >> x9: 0 >> x10: ffff000000993f20 >> x11: 0 >> x12: ffff0000003b3ab4 >> x13: ffff00000043e2f0 >> x14: a >> x15: 0 >> x16: 7 >> x17: ffff00000043e2f0 >> x18: ffff0000000109b0 >> x19: ffff0000000109e0 >> x20: ffff000000993000 >> x21: ffff000000b89000 >> x22: fffffd00012d9070 >> x23: 0 >> x24: fffffd00011c1d00 >> x25: fffffd00011c1c80 >> x26: fffffd00011c1cd8 >> x27: 0 >> x28: fffffd00011d0080 >> x29: ffff0000000109d0 >> sp: ffff0000000109b0 >> lr: ffff0000000fee88 >> elr: 3af61fd0 >> spsr: a00001c5 >> far: 3af61fd0 >> esr: 86000007 >> panic: data abort in critical section or under mutex >> cpuid =3D 0 >> time =3D 1 >> KDB: stack backtrace: >> db_trace_self() at db_trace_self_wrapper+0x28 >> pc =3D 0xffff00000066ead0 lr =3D 0xffff0000000ba870 >> sp =3D 0xffff0000000103a0 fp =3D 0xffff0000000105b0 >>=20 >> db_trace_self_wrapper() at vpanic+0x19c >> pc =3D 0xffff0000000ba870 lr =3D 0xffff000000362fb0 >> sp =3D 0xffff0000000105c0 fp =3D 0xffff000000010670 >>=20 >> vpanic() at panic+0x44 >> pc =3D 0xffff000000362fb0 lr =3D 0xffff000000362e10 >> sp =3D 0xffff000000010680 fp =3D 0xffff000000010700 >>=20 >> panic() at data_abort+0x21c >> pc =3D 0xffff000000362e10 lr =3D 0xffff0000006868b8 >> sp =3D 0xffff000000010710 fp =3D 0xffff0000000107c0 >>=20 >> data_abort() at do_el1h_sync+0x11c >> pc =3D 0xffff0000006868b8 lr =3D 0xffff000000686598 >> sp =3D 0xffff0000000107d0 fp =3D 0xffff000000010800 >>=20 >> do_el1h_sync() at handle_el1h_sync+0x74 >> pc =3D 0xffff000000686598 lr =3D 0xffff000000671074 >> sp =3D 0xffff000000010810 fp =3D 0xffff000000010920 >>=20 >> handle_el1h_sync() at efi_get_time+0x38 >> pc =3D 0xffff000000671074 lr =3D 0xffff0000000fee84 >> sp =3D 0xffff000000010930 fp =3D 0xffff0000000109d0 >>=20 >> efi_get_time() at efirtc_probe+0x18 >> pc =3D 0xffff0000000fee84 lr =3D 0xffff0000000ff5b8 >> sp =3D 0xffff0000000109e0 fp =3D 0xffff000000010a00 >>=20 >> efirtc_probe() at device_probe_child+0x150 >> pc =3D 0xffff0000000ff5b8 lr =3D 0xffff000000397c1c >> sp =3D 0xffff000000010a10 fp =3D 0xffff000000010a70 >>=20 >> device_probe_child() at device_probe+0x88 >> pc =3D 0xffff000000397c1c lr =3D 0xffff0000003988ac >> sp =3D 0xffff000000010a80 fp =3D 0xffff000000010aa0 >>=20 >> device_probe() at bus_generic_new_pass+0xec >> pc =3D 0xffff0000003988ac lr =3D 0xffff00000039a78c >> sp =3D 0xffff000000010ab0 fp =3D 0xffff000000010ae0 >>=20 >> bus_generic_new_pass() at bus_generic_new_pass+0xd0 >> pc =3D 0xffff00000039a78c lr =3D 0xffff00000039a770 >> sp =3D 0xffff000000010af0 fp =3D 0xffff000000010b20 >>=20 >> bus_generic_new_pass() at root_bus_configure+0x78 >> pc =3D 0xffff00000039a770 lr =3D 0xffff00000039c700 >> sp =3D 0xffff000000010b30 fp =3D 0xffff000000010b60 >>=20 >> root_bus_configure() at mi_startup+0xc8 >> pc =3D 0xffff00000039c700 lr =3D 0xffff0000002fbbcc >> sp =3D 0xffff000000010b70 fp =3D 0xffff000000010bb0 >>=20 >> mi_startup() at virtdone+0x54 >> pc =3D 0xffff0000002fbbcc lr =3D 0xffff000000001084 >> sp =3D 0xffff000000010bc0 fp =3D 0x0000000000000000 >>=20 >> KDB: enter: panic >> [ thread pid 0 tid 100000 ] >> Stopped at 0x3af61fd0:KDB: reentering >> KDB: stack backtrace: >> db_trace_self() at db_trace_self_wrapper+0x28 >> pc =3D 0xffff00000066ead0 lr =3D 0xffff0000000ba870 >> sp =3D 0xffff00000000f990 fp =3D 0xffff00000000fba0 >>=20 >> db_trace_self_wrapper() at kdb_reenter+0x38 >> pc =3D 0xffff0000000ba870 lr =3D 0xffff0000003a778c >> sp =3D 0xffff00000000fbb0 fp =3D 0xffff00000000fbc0 >>=20 >> kdb_reenter() at do_el1h_sync+0x11c >> pc =3D 0xffff0000003a778c lr =3D 0xffff000000686598 >> sp =3D 0xffff00000000fbd0 fp =3D 0xffff00000000fc00 >>=20 >> do_el1h_sync() at handle_el1h_sync+0x74 >> pc =3D 0xffff000000686598 lr =3D 0xffff000000671074 >> sp =3D 0xffff00000000fc10 fp =3D 0xffff00000000fd20 >>=20 >> handle_el1h_sync() at db_read_bytes+0x34 >> pc =3D 0xffff000000671074 lr =3D 0xffff00000066e878 >> sp =3D 0xffff00000000fd30 fp =3D 0xffff00000000ffe0 >>=20 >> db_read_bytes() at db_get_value+0x38 >> pc =3D 0xffff00000066e878 lr =3D 0xffff0000000b69fc >> sp =3D 0xffff00000000fff0 fp =3D 0xffff000000010020 >>=20 >> db_get_value() at db_disasm_read_word+0x10 >> pc =3D 0xffff0000000b69fc lr =3D 0xffff00000066e7f4 >> sp =3D 0xffff000000010030 fp =3D 0xffff000000010030 >>=20 >> db_disasm_read_word() at disasm+0x40 >> pc =3D 0xffff00000066e7f4 lr =3D 0xffff00000066f6a0 >> sp =3D 0xffff000000010040 fp =3D 0xffff0000000100a0 >>=20 >> disasm() at db_print_loc_and_inst+0x40 >> pc =3D 0xffff00000066f6a0 lr =3D 0xffff0000000b8adc >> sp =3D 0xffff0000000100b0 fp =3D 0xffff0000000100c0 >>=20 >> db_print_loc_and_inst() at db_trap+0xd4 >> pc =3D 0xffff0000000b8adc lr =3D 0xffff0000000ba9b8 >> sp =3D 0xffff0000000100d0 fp =3D 0xffff0000000102f0 >>=20 >> db_trap() at kdb_trap+0x1c8 >> pc =3D 0xffff0000000ba9b8 lr =3D 0xffff0000003a7bdc >> sp =3D 0xffff000000010300 fp =3D 0xffff0000000103b0 >>=20 >> kdb_trap() at do_el1h_sync+0xf0 >> pc =3D 0xffff0000003a7bdc lr =3D 0xffff00000068656c >> sp =3D 0xffff0000000103c0 fp =3D 0xffff0000000103f0 >>=20 >> do_el1h_sync() at handle_el1h_sync+0x74 >> pc =3D 0xffff00000068656c lr =3D 0xffff000000671074 >> sp =3D 0xffff000000010400 fp =3D 0xffff000000010510 >>=20 >> handle_el1h_sync() at kdb_enter+0x34 >> pc =3D 0xffff000000671074 lr =3D 0xffff0000003a7280 >> sp =3D 0xffff000000010520 fp =3D 0xffff0000000105b0 >>=20 >> kdb_enter() at vpanic+0x1b8 >> pc =3D 0xffff0000003a7280 lr =3D 0xffff000000362fcc >> sp =3D 0xffff0000000105c0 fp =3D 0xffff000000010670 >>=20 >> vpanic() at panic+0x44 >> pc =3D 0xffff000000362fcc lr =3D 0xffff000000362e10 >> sp =3D 0xffff000000010680 fp =3D 0xffff000000010700 >>=20 >> panic() at data_abort+0x21c >> pc =3D 0xffff000000362e10 lr =3D 0xffff0000006868b8 >> sp =3D 0xffff000000010710 fp =3D 0xffff0000000107c0 >>=20 >> data_abort() at do_el1h_sync+0x11c >> pc =3D 0xffff0000006868b8 lr =3D 0xffff000000686598 >> sp =3D 0xffff0000000107d0 fp =3D 0xffff000000010800 >>=20 >> do_el1h_sync() at handle_el1h_sync+0x74 >> pc =3D 0xffff000000686598 lr =3D 0xffff000000671074 >> sp =3D 0xffff000000010810 fp =3D 0xffff000000010920 >>=20 >> handle_el1h_sync() at efi_get_time+0x38 >> pc =3D 0xffff000000671074 lr =3D 0xffff0000000fee84 >> sp =3D 0xffff000000010930 fp =3D 0xffff0000000109d0 >>=20 >> efi_get_time() at efirtc_probe+0x18 >> pc =3D 0xffff0000000fee84 lr =3D 0xffff0000000ff5b8 >> sp =3D 0xffff0000000109e0 fp =3D 0xffff000000010a00 >>=20 >> efirtc_probe() at device_probe_child+0x150 >> pc =3D 0xffff0000000ff5b8 lr =3D 0xffff000000397c1c >> sp =3D 0xffff000000010a10 fp =3D 0xffff000000010a70 >>=20 >> device_probe_child() at device_probe+0x88 >> pc =3D 0xffff000000397c1c lr =3D 0xffff0000003988ac >> sp =3D 0xffff000000010a80 fp =3D 0xffff000000010aa0 >>=20 >> device_probe() at bus_generic_new_pass+0xec >> pc =3D 0xffff0000003988ac lr =3D 0xffff00000039a78c >> sp =3D 0xffff000000010ab0 fp =3D 0xffff000000010ae0 >>=20 >> bus_generic_new_pass() at bus_generic_new_pass+0xd0 >> pc =3D 0xffff00000039a78c lr =3D 0xffff00000039a770 >> sp =3D 0xffff000000010af0 fp =3D 0xffff000000010b20 >>=20 >> bus_generic_new_pass() at root_bus_configure+0x78 >> pc =3D 0xffff00000039a770 lr =3D 0xffff00000039c700 >> sp =3D 0xffff000000010b30 fp =3D 0xffff000000010b60 >>=20 >> root_bus_configure() at mi_startup+0xc8 >> pc =3D 0xffff00000039c700 lr =3D 0xffff0000002fbbcc >> sp =3D 0xffff000000010b70 fp =3D 0xffff000000010bb0 >>=20 >> mi_startup() at virtdone+0x54 >> pc =3D 0xffff0000002fbbcc lr =3D 0xffff000000001084 >> sp =3D 0xffff000000010bc0 fp =3D 0x0000000000000000 >>=20 >> *** error reading from address 3af61fd0 *** >> KDB: reentering >> KDB: stack backtrace: >> db_trace_self() at db_trace_self_wrapper+0x28 >> pc =3D 0xffff00000066ead0 lr =3D 0xffff0000000ba870 >> sp =3D 0xffff00000000fdb0 fp =3D 0xffff00000000ffc0 >>=20 >> db_trace_self_wrapper() at kdb_reenter+0x38 >> pc =3D 0xffff0000000ba870 lr =3D 0xffff0000003a778c >> sp =3D 0xffff00000000ffd0 fp =3D 0xffff00000000ffe0 >>=20 >> kdb_reenter() at db_get_value+0x50 >> pc =3D 0xffff0000003a778c lr =3D 0xffff0000000b6a14 >> sp =3D 0xffff00000000fff0 fp =3D 0xffff000000010020 >>=20 >> db_get_value() at db_disasm_read_word+0x10 >> pc =3D 0xffff0000000b6a14 lr =3D 0xffff00000066e7f4 >> sp =3D 0xffff000000010030 fp =3D 0xffff000000010030 >>=20 >> db_disasm_read_word() at disasm+0x40 >> pc =3D 0xffff00000066e7f4 lr =3D 0xffff00000066f6a0 >> sp =3D 0xffff000000010040 fp =3D 0xffff0000000100a0 >>=20 >> disasm() at db_print_loc_and_inst+0x40 >> pc =3D 0xffff00000066f6a0 lr =3D 0xffff0000000b8adc >> sp =3D 0xffff0000000100b0 fp =3D 0xffff0000000100c0 >>=20 >> db_print_loc_and_inst() at db_trap+0xd4 >> pc =3D 0xffff0000000b8adc lr =3D 0xffff0000000ba9b8 >> sp =3D 0xffff0000000100d0 fp =3D 0xffff0000000102f0 >>=20 >> db_trap() at kdb_trap+0x1c8 >> pc =3D 0xffff0000000ba9b8 lr =3D 0xffff0000003a7bdc >> sp =3D 0xffff000000010300 fp =3D 0xffff0000000103b0 >>=20 >> kdb_trap() at do_el1h_sync+0xf0 >> pc =3D 0xffff0000003a7bdc lr =3D 0xffff00000068656c >> sp =3D 0xffff0000000103c0 fp =3D 0xffff0000000103f0 >>=20 >> do_el1h_sync() at handle_el1h_sync+0x74 >> pc =3D 0xffff00000068656c lr =3D 0xffff000000671074 >> sp =3D 0xffff000000010400 fp =3D 0xffff000000010510 >>=20 >> handle_el1h_sync() at kdb_enter+0x34 >> pc =3D 0xffff000000671074 lr =3D 0xffff0000003a7280 >> sp =3D 0xffff000000010520 fp =3D 0xffff0000000105b0 >>=20 >> kdb_enter() at vpanic+0x1b8 >> pc =3D 0xffff0000003a7280 lr =3D 0xffff000000362fcc >> sp =3D 0xffff0000000105c0 fp =3D 0xffff000000010670 >>=20 >> vpanic() at panic+0x44 >> pc =3D 0xffff000000362fcc lr =3D 0xffff000000362e10 >> sp =3D 0xffff000000010680 fp =3D 0xffff000000010700 >>=20 >> panic() at data_abort+0x21c >> pc =3D 0xffff000000362e10 lr =3D 0xffff0000006868b8 >> sp =3D 0xffff000000010710 fp =3D 0xffff0000000107c0 >>=20 >> data_abort() at do_el1h_sync+0x11c >> pc =3D 0xffff0000006868b8 lr =3D 0xffff000000686598 >> sp =3D 0xffff0000000107d0 fp =3D 0xffff000000010800 >>=20 >> do_el1h_sync() at handle_el1h_sync+0x74 >> pc =3D 0xffff000000686598 lr =3D 0xffff000000671074 >> sp =3D 0xffff000000010810 fp =3D 0xffff000000010920 >>=20 >> handle_el1h_sync() at efi_get_time+0x38 >> pc =3D 0xffff000000671074 lr =3D 0xffff0000000fee84 >> sp =3D 0xffff000000010930 fp =3D 0xffff0000000109d0 >>=20 >> efi_get_time() at efirtc_probe+0x18 >> pc =3D 0xffff0000000fee84 lr =3D 0xffff0000000ff5b8 >> sp =3D 0xffff0000000109e0 fp =3D 0xffff000000010a00 >>=20 >> efirtc_probe() at device_probe_child+0x150 >> pc =3D 0xffff0000000ff5b8 lr =3D 0xffff000000397c1c >> sp =3D 0xffff000000010a10 fp =3D 0xffff000000010a70 >>=20 >> device_probe_child() at device_probe+0x88 >> pc =3D 0xffff000000397c1c lr =3D 0xffff0000003988ac >> sp =3D 0xffff000000010a80 fp =3D 0xffff000000010aa0 >>=20 >> device_probe() at bus_generic_new_pass+0xec >> pc =3D 0xffff0000003988ac lr =3D 0xffff00000039a78c >> sp =3D 0xffff000000010ab0 fp =3D 0xffff000000010ae0 >>=20 >> bus_generic_new_pass() at bus_generic_new_pass+0xd0 >> pc =3D 0xffff00000039a78c lr =3D 0xffff00000039a770 >> sp =3D 0xffff000000010af0 fp =3D 0xffff000000010b20 >>=20 >> bus_generic_new_pass() at root_bus_configure+0x78 >> pc =3D 0xffff00000039a770 lr =3D 0xffff00000039c700 >> sp =3D 0xffff000000010b30 fp =3D 0xffff000000010b60 >>=20 >> root_bus_configure() at mi_startup+0xc8 >> pc =3D 0xffff00000039c700 lr =3D 0xffff0000002fbbcc >> sp =3D 0xffff000000010b70 fp =3D 0xffff000000010bb0 >>=20 >> mi_startup() at virtdone+0x54 >> pc =3D 0xffff0000002fbbcc lr =3D 0xffff000000001084 >> sp =3D 0xffff000000010bc0 fp =3D 0x0000000000000000 >>=20 >> db>=20 >>=20 >> Any idea what goes wrong? >>=20 >> Best regards >> Michael >> _______________________________________________ >> freebsd-arm@freebsd.org mailing list >> https://lists.freebsd.org/mailman/listinfo/freebsd-arm >> To unsubscribe, send any mail to = "freebsd-arm-unsubscribe@freebsd.org" >>=20 >=20
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?656FA611-2F31-4B5A-85AC-EF1F18756BBB>