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.

Loading the Plugin

import IrqMp

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

Commands

Name Description

delete

Dispose instance of @IrqMp

new

Create new instance of IrqMp

Command new Arguments

Name Type Required Description

name

string

yes

Name of object to create

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

Ports

Prop Iface Description

irqCtrl

IrqClientIface

irq port

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

-

-

-

-

Register IRQMAP6
Description

Interrupt map register 6

Reset value

0x00000000

Warm reset mask

0x00000000

Field Mask Reset Description

-

-

-

-

Register IRQMAP0
Description

Interrupt map register 7

Reset value

0x00000000

Warm reset mask

0x00000000

Field Mask Reset Description

-

-

-

-

Commands

Name Description

delete

Dispose instance of IrqMp

raiseExternalIrq

Raise interrupt

Command raiseExternalIrq Arguments

Name Type Required Description

irq

int

yes

Interrupt number

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.