GRLIB IRQMP Model
The IrqMP is part of the GRLIB device library from Gaisler. It is a multiprocessor capable interrupt controller.
The controller supports routing interrupts to different processor cores and broadcasted interrupts.
Configuration
- config.nCpu
-
Number of processors supported.
- config.enExtIrq
-
Enable extended IRQs.
- pnp.config
-
Plug and play configuration word for APB plug-and-play.
- cpu
-
Up to 16 CPUs supported. IfaceRef property should be connected to the different CPUs.
@IrqMp Reference
Properties
| Name | Type | Description |
|---|---|---|
Class |
*void |
Class object |
Component |
*void |
Pointer to component object if part of component |
LocalName |
*char |
Local name (in component, if applicable) |
LoggingFlags |
uint64_t |
Flags for logging info |
Name |
*char |
Object name |
ObjectID |
uint64_t |
Unique ObjectID. |
TimeSource |
*void |
Time source object |
IrqMp Reference
Properties
| Name | Type | Description |
|---|---|---|
Class |
*void |
Class object |
Component |
*void |
Pointer to component object if part of component |
LocalName |
*char |
Local name (in component, if applicable) |
LoggingFlags |
uint64_t |
Flags for logging info |
Name |
*char |
Object name |
ObjectID |
uint64_t |
Unique ObjectID. |
TimeSource |
*void |
Time source object |
bootAddress |
[uint32_t; 16] |
|
broadcast |
uint32_t |
|
config.bootReg |
uint8_t |
Enable boot address registers |
config.enExtIrq |
uint8_t |
|
config.irqMapping |
uint8_t |
Enable interrupt mapping |
config.littleEndian |
uint8_t |
Endianess of memory interface. |
config.logInterrupts |
uint8_t |
|
config.nCpu |
uint8_t |
|
config.traceReads |
uint8_t |
|
config.traceWrites |
uint8_t |
|
cpu |
[temu_IfaceRef; 16]/ <unknown> |
Processors |
extIntAck |
[uint32_t; 16] |
|
force |
[uint32_t; 16] |
|
interruptMap |
[uint32_t; 8] |
|
irqClear |
uint32_t |
|
irqCtrl |
[temu_IfaceRef; 16]/ <unknown> |
Upstream interrupt controllers (e.g. processor) |
irqForce0 |
uint32_t |
|
irqLevel |
uint32_t |
|
irqPending |
uint32_t |
|
irqSignalStatus |
[uint16_t; 16] |
|
mask |
[uint32_t; 16] |
|
mpStatus |
uint32_t |
|
pnp.bar |
uint32_t |
|
pnp.config |
uint32_t |
Interfaces
| Name | Type | Description |
|---|---|---|
ApbIface |
ApbIface |
|
DeviceIface |
DeviceIface |
|
IrqClientIface |
IrqClientIface |
uptree interrupt handlers (e.g. CPUs) |
IrqIface |
IrqCtrlIface |
|
MemAccessIface |
MemAccessIface |
|
RegisterIface |
temu::RegisterIface |
|
ResetIface |
ResetIface |
Registers
| Register support is currently experimental! |
Register Bank default
Register ILEVEL
- Description
-
Interrupt level register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register IPEND
- Description
-
Interrupt pending register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register IFORCE
- Description
-
Interrupt force register (ncpu = 1)
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register ICLEAR
- Description
-
Interrupt clear register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register MPSTAT
- Description
-
Multiprocessor status register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register BRDCST
- Description
-
Broadcast register (ncpu > 1)
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PIMASK0
- Description
-
Processor 0 interrupt mask register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PIMASK1
- Description
-
Processor 1 interrupt mask register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PIMASK2
- Description
-
Processor 2 interrupt mask register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PIMASK3
- Description
-
Processor 3 interrupt mask register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PIFORCE0
- Description
-
Processor 0 interrupt force register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PIFORCE1
- Description
-
Processor 1 interrupt force register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PIFORCE2
- Description
-
Processor 2 interrupt force register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PIFORCE3
- Description
-
Processor 3 interrupt force register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PEXTACK0
- Description
-
Processor 0 extended interrupt acknowledge register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PEXTACK1
- Description
-
Processor 1 extended interrupt acknowledge register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PEXTACK2
- Description
-
Processor 2 extended interrupt acknowledge register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register PEXTACK3
- Description
-
Processor 3 extended interrupt acknowledge register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register BADDR0
- Description
-
Processor 0 boot address register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register BADDR1
- Description
-
Processor 1 boot address register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register BADDR2
- Description
-
Processor 2 boot address register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register BADDR3
- Description
-
Processor 3 boot address register
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register IRQMAP0
- Description
-
Interrupt map register 0
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register IRQMAP1
- Description
-
Interrupt map register 1
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register IRQMAP2
- Description
-
Interrupt map register 2
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register IRQMAP3
- Description
-
Interrupt map register 3
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register IRQMAP4
- Description
-
Interrupt map register 4
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Register IRQMAP5
- Description
-
Interrupt map register 5
- Reset value
-
0x00000000
- Warm reset mask
-
0x00000000
| Field | Mask | Reset | Description |
|---|---|---|---|
- |
- |
- |
- |
Limitations
The following deviations from real hardware are known to exist with this model:
-
Broadcasted interrupts are broadcasted at the current time to all CPUs. If it was triggered by a non-synchronized event, the interrupt is raised at different times on the different cores. Consider the IRQ frequency and the configured quanta length.