Help with RaspberryPI USB on Fiasco.OC+Genode

Norman Feske norman.feske at
Mon Mar 23 13:08:26 CET 2015

Hello Reinier,

> After that, I have tried to log the USB driver IRQ, setting
>     #define DEBUG_IRQ        1
> in the file
>     repos/dde_linux/src/lib/usb/include/lx_emul.h
> Setting this value, the USB driver will log every IRQ handled by the
> function *_handle()* and *_handle_one()***in the USB driver. In the
> Genode bare metal hardware it works fine, but when tried it with
> Fiasco.OC, the IRQ handler *_handle()* and *_handle_one()* are never logged.

apparently, the USB driver initializes the USB controller (so the SoF
interrupts start appearing at the kernel) but it never receives any
interrupt. The issue could be the way of how IRQs are named by Fiasco.OC
and base-hw. Because of the hierarchic way of how the BCM's IRQ
controller works, the OS kernel developer has to come up with an
enumeration scheme. The scheme I introduced for the base-hw kernel is
defined at repos/base/include/platform/rpi/drivers/board_base.h:

 * IRQ numbers 0..7 refer to the basic IRQs.
 * IRQ numbers 8..39 refer to GPU IRQs 0..31.
 * IRQ numbers 40..71 refer to GPU IRQs 32..63.

The DWC-OTG controller uses IRQ 17. So it is not a basic IRQ. Hence, its
number is subjected to the enumeration scheme above. I do not know how
Fiasco.OC's naming scheme for IRQs on the Raspberry Pi looks like but it
may be different. To investigate, I'd recommend you to instrument both
kernels to log the accesses to the interrupt-controller registers. Look
if each of them touch the same bits once the USB driver is started.


Dr.-Ing. Norman Feske
Genode Labs ·

Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth

More information about the l4-hackers mailing list