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:
https://github.com/genodelabs/genode/blob/master/repos/base/include/platform...
/* * 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.
Cheers Norman