irq: multilevel: fix irq_parent_level_3()
The IRQ for level 1 and above is incremented by 1 when encoded with Zephyr's multilevel IRQ scheme, so it should be decremented by 1. Signed-off-by: Yong Cong Sin <ycsin@meta.com> Signed-off-by: Yong Cong Sin <yongcong.sin@gmail.com>
This commit is contained in:
parent
08ceb14299
commit
cb6417cff4
2 changed files with 5 additions and 4 deletions
|
@ -163,8 +163,9 @@ static inline unsigned int irq_to_level_3(unsigned int irq)
|
||||||
*/
|
*/
|
||||||
static inline unsigned int irq_parent_level_3(unsigned int irq)
|
static inline unsigned int irq_parent_level_3(unsigned int irq)
|
||||||
{
|
{
|
||||||
return (irq >> CONFIG_1ST_LEVEL_INTERRUPT_BITS) &
|
return ((irq >> CONFIG_1ST_LEVEL_INTERRUPT_BITS) &
|
||||||
BIT_MASK(CONFIG_2ND_LEVEL_INTERRUPT_BITS);
|
BIT_MASK(CONFIG_2ND_LEVEL_INTERRUPT_BITS)) -
|
||||||
|
1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -437,8 +437,8 @@ static void test_multi_level_bit_masks_fn(uint32_t irq1, uint32_t irq2, uint32_t
|
||||||
zassert_equal(hwirq3, irq_from_level(irqn, 3));
|
zassert_equal(hwirq3, irq_from_level(irqn, 3));
|
||||||
zassert_equal((hwirq3 + 1) << l3_shift, irq_to_level_3(hwirq3));
|
zassert_equal((hwirq3 + 1) << l3_shift, irq_to_level_3(hwirq3));
|
||||||
zassert_equal((hwirq3 + 1) << l3_shift, irq_to_level(hwirq3, 3));
|
zassert_equal((hwirq3 + 1) << l3_shift, irq_to_level(hwirq3, 3));
|
||||||
zassert_equal(hwirq2 + 1, irq_parent_level_3(irqn));
|
zassert_equal(hwirq2, irq_parent_level_3(irqn));
|
||||||
zassert_equal(hwirq2 + 1, irq_parent_level(irqn, 3));
|
zassert_equal(hwirq2, irq_parent_level(irqn, 3));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_l3) {
|
if (has_l3) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue