Interrupt routing

The interrupt matrix routes a peripheral source to a CLIC input on an HP core. Three numbers appear in this path: the device-tree matrix source, the allocated CLIC slot, and the Linux IRQ number returned to a driver. They are different namespaces; do not use a matrix source as a Linux IRQ.

Reserved system assignments

Owner / use

HP core

Matrix source

CLIC slot

Assignment

Linux IPI doorbell

0

65

40

Per-core software interrupt

Linux IPI doorbell

1

66

40

Per-core software interrupt

Linux SYSTIMER event

0

33

41

Per-core timer event

Linux SYSTIMER event

1

34

41

Per-core timer event

OpenSBI TIMERG0 timer 1

0

26

48

Private M-mode idle-wakeup guard

OpenSBI TIMERG1 timer 1

1

29

48

Private M-mode idle-wakeup guard

The generic Linux peripheral allocator uses CLIC slots 16–47, reserving 40 and 41 for local IPI/timer routes. OpenSBI’s slot 48 is outside that pool. The same slot number on two cores refers to two different core-local inputs. See slot constants, local sources and setup, allocator reservations and OpenSBI guard definitions.

Both GPTimer device-tree nodes set espressif,reserved-timer-mask = <2>. Bit 1 reserves timer 1; the Linux counter driver skips that channel. The guard uses the 40 MHz crystal divided by 40 and an alarm of 10,000 ticks. See the DTS reservation and its GPTimer consumer.

Radio interrupt sources remain owned by the radio runtime while loaded; their Linux IRQs are requested through the platform interrupt path. They are not additional fixed CLIC-slot reservations in the table above.

Peripheral and GPIO routing

A peripheral’s interrupts property supplies its matrix source and trigger type. Linux selects the CLIC slot and returns the Linux IRQ to the driver. Generic peripheral routes currently target HP core 0; the precise affinity restriction and handler rules are in Interrupts and SMP.

GPIO signal routing is configured separately through pinctrl and overlay route settings. See the overlay catalog.