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
On 06/15/2015 03:55 PM, Bush, Jeff (System Firmware) wrote:
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?
It looks like there are USB entries in the DSDT for Juno, but I am not seeing any ACPI initialization for USB (I may just be missing it...). I suspect the driver has not been enabled yet, but I'd recommend checking with Graeme (also on this mailing list) who did all the Juno work.
As an aside, you may be able to get rid of the console= on the command line; there is an SPCR table for Juno so in theory it should figure out the console for you.
Thank you for the quick responses.
I looked at the console output from booting Linux and found the following:
[ 4.080850] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 4.087411] ehci-pci: EHCI PCI platform driver [ 4.091938] ehci-platform: EHCI generic platform driver [ 4.097266] ehci-platform ARMH0D20:00: EHCI Host Controller [ 4.102864] ehci-platform ARMH0D20:00: new USB bus registered, assigned bus number 1 [ 4.110773] ehci-platform ARMH0D20:00: irq 149, io mem 0x7ffc0000 [ 4.133221] ehci-platform ARMH0D20:00: USB 2.0 started, EHCI 1.00 [ 4.140021] hub 1-0:1.0: USB hub found [ 4.143814] hub 1-0:1.0: 1 port detected [ 4.148092] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 4.154388] ohci-pci: OHCI PCI platform driver [ 4.159000] usbcore: registered new interface driver usb-storage
I think this is where USB is initialized and I think the USB drivers are enabled. The IRQ error looks like the driver issued a command to the USB host and timed out waiting for the expected interrupt. I was thinking it could be an ACPI interrupt description problem or interrupt controller initialization problem. Do ya'll know a of a way to confirm that interrupts are working and routed correctly in Linux? Where in the Linux source code should I look for USB/interrupt setup and initialization? I think the problem would be in one of two places. The ACPI tables that are passed to Linux are missing or have incorrect information on interrupts or USB. Or the Linux kernel is using the ACPI tables incorrectly to initialize interrupts or USB.
Jeff
On 15 June 2015 at 22:55, Bush, Jeff (System Firmware) jeffrey.m.bush@hp.com wrote:
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
This looks like the error I always saw with USB. No-one ever gave me a solution and I have now returned the Juno to Linaro.
Graeme
[ 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
Linaro-acpi mailing list Linaro-acpi@lists.linaro.org https://lists.linaro.org/mailman/listinfo/linaro-acpi