QEMU IRL not modeled

Sam Price thesamprice at gmail.com
Mon Feb 19 19:44:21 UTC 2024


Debugging some qemu interrupts with the uarts on the microblaze platform.

I noticed i was getting some transactions failed on the qemu side.

interrupt at pc=802dec88 msr=1a2 0 iflags=100
Transaction failed: vaddr 0x41200024 physaddr 0x0000000041200024 size
4 access type DATA_LOAD
Transaction failed: vaddr 0x41200024 physaddr 0x0000000041200024 size
4 access type DATA_STORE
Transaction failed: vaddr 0x41200024 physaddr 0x0000000041200024 size
4 access type DATA_STORE

This is the interrupt controller.

24 offset is the ILR register
24h ILR Interrupt Level Register (ILR)
```
The Interrupt Level Register (ILR) is a read-write register that
contains the ordinal value of the highest priority interrupt prevented
from generating a processor IRQ. The ILR provides a method to block
lower priority interrupts in order to support nested interrupt
handling. When the ILR is 0, no interrupt is allowed to generate IRQ,
when the ILR is 1 only INT(0) is allowed to generate IRQ, etc. If all
interrupts are allowed to generate IRQ, the ILR should contain all
ones. The ILR is shown in Figure 2-10 and described in Table 2-14.

Rtems microblaze is most likely writing to this register here.
https://github.com/RTEMS/rtems/blob/master/bsps/microblaze/microblaze_fpga/irq/irq.c#L140

Its not totally apparent to me why interrupts are disabled and then
re-enable in an interrupt context.

Is this needed?  I started looking through qemu code, but haven't
quite figured out how to patch it to support the irl.

>From what i can tell
https://github.com/Xilinx/qemu/blob/master/target/microblaze/cpu.c#L153

Interrupt registers actually firing.
https://github.com/Xilinx/qemu/blob/master/target/microblaze/helper.c#L180
-- 
Sincerely,

Sam Price


More information about the devel mailing list