I am experimenting with the ARM Juno board + UEFI/ACPI + Linux + USB but I have found that Linux fails to initialize the USB host.
The UEFI/ACPI firmware is built using version 3.1 of https://github.com/ARM-software/edk2 The Linux image is built using the leg-20150609.0 tag of https://git.linaro.org/leg/acpi/leg-kernel.git
Because I only want ACPI tables and no FDT blob I removed the FdtPlatformDxe driver from ArmJuno.fdf when I build the UEFI/ACPI firmware image.
When I boot Linux from the UEFI shell using the following command line:
FS2:> Image acpi=force initrd=rootfs-aarch64.cpio root=/dev/ram0 rw ignore_loglevel console=ttyAMA0,115200n8 earlyprintk=pl011,0x7ff80000 verbose debug
I am able to boot to the Linux command line but the USB host fails to initialize and the following output is displayed to the console during boot:
[ 7.463340] ehci-platform ARMH0D20:00: fatal error [ 7.468144] ehci-platform ARMH0D20:00: HC died; cleaning up [ 7.483700] random: nonblocking pool is initialized [ 7.600738] irq 149: nobody cared (try booting with the "irqpoll" option) [ 7.607539] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.1.0-rc6+ #1 [ 7.613814] Hardware name: (null) (DT) [ 7.617564] Call trace: [ 7.620024] [<fffffe000008a85c>] dump_backtrace+0x0/0x138 [ 7.625433] [<fffffe000008a9b0>] show_stack+0x1c/0x28 [ 7.630494] [<fffffe00007b1650>] dump_stack+0x84/0xc8 [ 7.635556] [<fffffe00000ece60>] __report_bad_irq+0x44/0xf4 [ 7.641138] [<fffffe00000ed3b0>] note_interrupt+0x208/0x2c0 [ 7.646720] [<fffffe00000eaa04>] handle_irq_event_percpu+0x1b4/0x230 [ 7.653084] [<fffffe00000eaad0>] handle_irq_event+0x50/0x80 [ 7.658666] [<fffffe00000edb34>] handle_fasteoi_irq+0xb0/0x178 [ 7.664508] [<fffffe00000e9e20>] generic_handle_irq+0x38/0x54 [ 7.670263] [<fffffe00000ea170>] __handle_domain_irq+0x68/0xbc [ 7.676105] [<fffffe0000082474>] gic_handle_irq+0x38/0x88 [ 7.681511] Exception stack(0xfffffe0000b03b80 to 0xfffffe0000b03ca0) [ 7.687966] 3b80: 00ae3000 fffffe00 00000000 00000000 00b03cc0 fffffe00 0009fa68 fffffe00 [ 7.696161] 3ba0: 00000000 00000000 00c00d00 fffffe00 00c00d00 fffffe00 ffff8d9e 00000000 [ 7.704356] 3bc0: 9b967b22 00000000 275ee5db 00000000 00ae3ee0 fffffe00 7f320000 00000009 [ 7.712550] 3be0: 1ef8f97d 00000000 00000000 00000000 00c03000 fffffe00 00b41000 fffffe00 [ 7.720744] 3c00: 00000006 00000000 00000018 00000000 fffffffe 0fffffff b2c50ac8 000003ff [ 7.728939] 3c20: 0009f064 fffffe00 004e9d58 00000000 df62e520 000003ff 00ae3000 fffffe00 [ 7.737133] 3c40: 00000000 00000000 00000000 00000000 740c1000 fffffe09 60000145 00000000 [ 7.745327] 3c60: 00b00000 fffffe00 00000040 00000000 00ad0b00 fffffe00 00b30000 fffffe00 [ 7.753522] 3c80: 007c59c8 fffffe00 00b03cc0 fffffe00 0009f9dc fffffe00 00b03cc0 fffffe00 [ 7.761714] [<fffffe00000855a4>] el1_irq+0x64/0xd8 [ 7.766514] [<fffffe000009ff54>] irq_exit+0x98/0xd8 [ 7.771399] [<fffffe00000ea174>] __handle_domain_irq+0x6c/0xbc [ 7.777240] [<fffffe0000082474>] gic_handle_irq+0x38/0x88 [ 7.782645] Exception stack(0xfffffe0000b03dc0 to 0xfffffe0000b03ee0) [ 7.789100] 3dc0: 00b00000 fffffe00 00000000 00000000 00b03f00 fffffe00 00086bc4 fffffe00 [ 7.797294] 3de0: 000db56c fffffe00 00000000 00000000 00000001 00000000 00b33000 fffffe00 [ 7.805488] 3e00: 00000000 00000000 0ccccccd 00000000 80000000 00232aaf 00000000 00000000 [ 7.813682] 3e20: 00c16938 fffffe00 00000000 00000000 00000020 00000000 00000040 00000000 [ 7.821876] 3e40: 00000030 00000000 ffffffff ffffffff ffffffff ffffffff b2c50ac8 000003ff [ 7.830071] 3e60: 0009f064 fffffe00 004e9d58 00000000 df62e520 000003ff 00b00000 fffffe00 [ 7.838265] 3e80: 00000000 00000000 00b30000 fffffe00 00000000 00000000 00bd0000 fffffe00 [ 7.846460] 3ea0: 00b30640 fffffe00 00b03f10 fffffe00 00ad0b00 fffffe00 00ae5058 fffffe00 [ 7.854654] 3ec0: 007c59c8 fffffe00 00b03f00 fffffe00 00086bc0 fffffe00 00b03f00 fffffe00 [ 7.862847] [<fffffe00000855a4>] el1_irq+0x64/0xd8 [ 7.867647] [<fffffe00000db568>] cpu_startup_entry+0x324/0x374 [ 7.873494] [<fffffe00007ab30c>] rest_init+0x88/0x94 [ 7.878467] [<fffffe0000a309ac>] start_kernel+0x3d8/0x3f0 [ 7.883870] handlers: [ 7.886145] [<fffffe00006092ec>] usb_hcd_irq [ 7.890422] Disabling IRQ #149
If I boot Linux using the same command line as above but replace 'acpi=force' with 'dtb=juno.dtb' the error does not occur, the USB host is initialized and a USB flash drive is discovered.
Is this a known issue? This error could occur because the ACPI tables do not have the right information or because the kernel is not getting the right information from the tables. Do ya'll have any ideas on what might be wrong and where I should look in the code to fix this problem?
Thank you for your help
Jeff Bush