Platform-level interrupt controller (PLIC)

The PLIC is a RISC-V interrupt controller and specifically we are using OpenTitan's interrupt controller. Please find more details in the official specification. Part of these details are is the memory map, which shows all registers from the base until base + 0x3FFFFFC. Not all of these registers are mapped, most importantly we only have one core, so only one context (context 0).

The following table shows the current list of interrupts that are fed through the PLIC. For more detailed descriptions of what each interrupt means, please refer to the documentation of each individual hardware IP block. For most blocks, interrupts are multiplexed - all hardware interrupt sources are presented as a single interrupt to the PLIC. The relevant software INTR_STATE registers should be queried by software to determine the interrupt cause.

NumberBlockInterrupt description
0NoneTied to zero
1RevokerHardware revoker sweep complete
2EthernetInterrupt from external SPI ethernet chip (KSZ8851SNLI-TR)
3USB DevShared USB Device interrupt
4GPIOShared GPIO interrupt
5-7NoneReserved
8UART 0Shared interrupt for UART0
9UART 1Shared interrupt for UART1
10UART 2Shared interrupt for UART2
11-15NoneReserved
16I2C 0Shared interrupt for I2C0
17I2C 1Shared interrupt for I2C1
18-23NoneReserved
24SPI LCDShared interrupt for the LCD SPI
25SPI EthmacShared interrupt for the Ethernet SPI
26SPI 0Shared interrupt for SPI0
27SPI 1Shared interrupt for SPI1
28SPI 2Shared interrupt for SPI2
29-31NoneReserved