arm64: isr_wrapper: ignore Special INTIDs between 1020..1023
Referring the Arm Generic Interrupt Controller Architecture Specification GIC architecture version 3 and version 4 document (see 2.2.1 Special INTIDs paragraph), these INTIDs are reserved for special purposes and should be ignored for now. For the ITS implementation, the INTID 1023 must be ignored since this special INTID will trigger after an LPI acknowledge, thus triggering the spurious interrupt handler. The GICv3 Linux implementation ignores these INTIDs the same way. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
This commit is contained in:
parent
078113982f
commit
d55991b98e
1 changed files with 13 additions and 0 deletions
|
@ -46,6 +46,19 @@ SECTION_FUNC(TEXT, _isr_wrapper)
|
|||
bl z_soc_irq_get_active
|
||||
#endif /* !CONFIG_ARM_CUSTOM_INTERRUPT_CONTROLLER */
|
||||
|
||||
#if CONFIG_GIC_VER >= 3
|
||||
/*
|
||||
* Ignore Special INTIDs 1020..1023 see 2.2.1 of Arm Generic Interrupt Controller
|
||||
* Architecture Specification GIC architecture version 3 and version 4
|
||||
*/
|
||||
cmp x0, 1019
|
||||
b.le oob
|
||||
cmp x0, 1023
|
||||
b.gt oob
|
||||
b spurious_continue
|
||||
|
||||
oob:
|
||||
#endif
|
||||
/* IRQ out of bounds */
|
||||
mov x1, #(CONFIG_NUM_IRQS - 1)
|
||||
cmp x0, x1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue