This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 36312562191b5dcfdff34aceac79beeeca50c004 Author: Maarten Zanders <[email protected]> AuthorDate: Tue Feb 24 10:26:37 2026 +0100 arch/arm/imx9: irq: replace hardcoded NVIC register lists with loops. Use NVIC_IRQ_ENABLE(n) and NVIC_IRQ_PRIORITY(n) macros in imx9_dumpnvic() to iterate over all NVIC registers programmatically based on CONFIG_ARCH_NINTS (IMX9_IRQ_NEXTINT), rather than enumerating named per-range register defines. Output is grouped 4-per-line for priority and 4-per-line for enable registers, matching the original layout. This avoids accessing registers which don't exist when extending the interrupt count. Also replace named NVIC_IRQxx_yy_ENABLE constants in imx9_irqinfo() with NVIC_IRQ_ENABLE(n), avoiding naming conflicts between chips with different IRQ counts. Fix the upper boundary in the >192 IRQ branch from 219 to 224 to align with the 32-interrupt register granularity. Change %08x to %08lx to silence warnings from the compiler for the debug dump. No functional change for existing i.MX95-M7 builds. Signed-off-by: Maarten Zanders <[email protected]> --- arch/arm/src/imx9/imx9_irq.c | 180 +++++++++++++++---------------------------- 1 file changed, 60 insertions(+), 120 deletions(-) diff --git a/arch/arm/src/imx9/imx9_irq.c b/arch/arm/src/imx9/imx9_irq.c index 6430c0e036b..b76e288f8f7 100644 --- a/arch/arm/src/imx9/imx9_irq.c +++ b/arch/arm/src/imx9/imx9_irq.c @@ -81,11 +81,14 @@ static void imx9_dumpnvic(const char *msg, int irq) { irqstate_t flags; + int i; + char buf[64]; + int len; flags = enter_critical_section(); irqinfo("NVIC (%s, irq=%d):\n", msg, irq); - irqinfo(" INTCTRL: %08x VECTAB: %08x\n", + irqinfo(" INTCTRL: %08lx VECTAB: %08lx\n", getreg32(NVIC_INTCTRL), getreg32(NVIC_VECTAB)); #if 0 irqinfo(" SYSH ENABLE MEMFAULT: %08x BUSFAULT: %08x USGFAULT: %08x " @@ -95,120 +98,57 @@ static void imx9_dumpnvic(const char *msg, int irq) getreg32(NVIC_SYSHCON_USGFAULTENA), getreg32(NVIC_SYSTICK_CTRL_ENABLE)); #endif - irqinfo(" IRQ ENABLE: %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ0_31_ENABLE), - getreg32(NVIC_IRQ32_63_ENABLE), - getreg32(NVIC_IRQ64_95_ENABLE), - getreg32(NVIC_IRQ96_127_ENABLE)); -#if IMX9_IRQ_NEXTINT > 128 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ128_159_ENABLE), - getreg32(NVIC_IRQ160_191_ENABLE), - getreg32(NVIC_IRQ192_223_ENABLE), - getreg32(NVIC_IRQ224_239_ENABLE)); -#endif - irqinfo(" SYSH_PRIO: %08x %08x %08x\n", + + len = 0; + for (i = 0; i < IMX9_IRQ_NEXTINT; i += 32) + { + if (i % 128 == 0) + { + len = 0; + len += snprintf(buf + len, sizeof(buf) - len, "%s", + i == 0 ? " IRQ ENABLE: " : " "); + } + + len += snprintf(buf + len, sizeof(buf) - len, "%08lx", + getreg32(NVIC_IRQ_ENABLE(i))); + + if ((i + 32) >= IMX9_IRQ_NEXTINT || (i + 32) % 128 == 0) + { + irqinfo("%s\n", buf); + } + else + { + len += snprintf(buf + len, sizeof(buf) - len, " "); + } + } + + irqinfo(" SYSH_PRIO: %08lx %08lx %08lx\n", getreg32(NVIC_SYSH4_7_PRIORITY), getreg32(NVIC_SYSH8_11_PRIORITY), getreg32(NVIC_SYSH12_15_PRIORITY)); - irqinfo(" IRQ PRIO: %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ0_3_PRIORITY), - getreg32(NVIC_IRQ4_7_PRIORITY), - getreg32(NVIC_IRQ8_11_PRIORITY), - getreg32(NVIC_IRQ12_15_PRIORITY)); -#if IMX9_IRQ_NEXTINT > 16 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ16_19_PRIORITY), - getreg32(NVIC_IRQ20_23_PRIORITY), - getreg32(NVIC_IRQ24_27_PRIORITY), - getreg32(NVIC_IRQ28_31_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 32 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ32_35_PRIORITY), - getreg32(NVIC_IRQ36_39_PRIORITY), - getreg32(NVIC_IRQ40_43_PRIORITY), - getreg32(NVIC_IRQ44_47_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 48 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ48_51_PRIORITY), - getreg32(NVIC_IRQ52_55_PRIORITY), - getreg32(NVIC_IRQ56_59_PRIORITY), - getreg32(NVIC_IRQ60_63_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 64 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ64_67_PRIORITY), - getreg32(NVIC_IRQ68_71_PRIORITY), - getreg32(NVIC_IRQ72_75_PRIORITY), - getreg32(NVIC_IRQ76_79_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 80 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ80_83_PRIORITY), - getreg32(NVIC_IRQ84_87_PRIORITY), - getreg32(NVIC_IRQ88_91_PRIORITY), - getreg32(NVIC_IRQ92_95_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 96 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ96_99_PRIORITY), - getreg32(NVIC_IRQ100_103_PRIORITY), - getreg32(NVIC_IRQ104_107_PRIORITY), - getreg32(NVIC_IRQ108_111_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 112 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ112_115_PRIORITY), - getreg32(NVIC_IRQ116_119_PRIORITY), - getreg32(NVIC_IRQ120_123_PRIORITY), - getreg32(NVIC_IRQ124_127_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 128 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ128_131_PRIORITY), - getreg32(NVIC_IRQ132_135_PRIORITY), - getreg32(NVIC_IRQ136_139_PRIORITY), - getreg32(NVIC_IRQ140_143_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 144 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ144_147_PRIORITY), - getreg32(NVIC_IRQ148_151_PRIORITY), - getreg32(NVIC_IRQ152_155_PRIORITY), - getreg32(NVIC_IRQ156_159_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 160 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ160_163_PRIORITY), - getreg32(NVIC_IRQ164_167_PRIORITY), - getreg32(NVIC_IRQ168_171_PRIORITY), - getreg32(NVIC_IRQ172_175_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 176 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ176_179_PRIORITY), - getreg32(NVIC_IRQ180_183_PRIORITY), - getreg32(NVIC_IRQ184_187_PRIORITY), - getreg32(NVIC_IRQ188_191_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 192 - irqinfo(" %08x %08x %08x %08x\n", - getreg32(NVIC_IRQ192_195_PRIORITY), - getreg32(NVIC_IRQ196_199_PRIORITY), - getreg32(NVIC_IRQ200_203_PRIORITY), - getreg32(NVIC_IRQ204_207_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 208 - irqinfo(" %08x %08x %08x\n", - getreg32(NVIC_IRQ208_211_PRIORITY), - getreg32(NVIC_IRQ212_215_PRIORITY), - getreg32(NVIC_IRQ216_219_PRIORITY)); -#endif -#if IMX9_IRQ_NEXTINT > 218 -# warning Missing logic -#endif + + len = 0; + for (i = 0; i < IMX9_IRQ_NEXTINT; i += 4) + { + if (i % 16 == 0) + { + len = 0; + len += snprintf(buf + len, sizeof(buf) - len, "%s", + i == 0 ? " IRQ PRIO: " : " "); + } + + len += snprintf(buf + len, sizeof(buf) - len, "%08lx", + getreg32(NVIC_IRQ_PRIORITY(i))); + + if ((i + 4) >= IMX9_IRQ_NEXTINT || (i + 4) % 16 == 0) + { + irqinfo("%s\n", buf); + } + else + { + len += snprintf(buf + len, sizeof(buf) - len, " "); + } + } leave_critical_section(flags); } @@ -295,14 +235,14 @@ static int imx9_irqinfo(int irq, uintptr_t *regaddr, uint32_t *bit, { if (extint < 32) { - *regaddr = (NVIC_IRQ0_31_ENABLE + offset); + *regaddr = (NVIC_IRQ_ENABLE(0) + offset); *bit = 1 << extint; } else #if IMX9_IRQ_NEXTINT > 32 if (extint < 64) { - *regaddr = (NVIC_IRQ32_63_ENABLE + offset); + *regaddr = (NVIC_IRQ_ENABLE(32) + offset); *bit = 1 << (extint - 32); } else @@ -310,7 +250,7 @@ static int imx9_irqinfo(int irq, uintptr_t *regaddr, uint32_t *bit, #if IMX9_IRQ_NEXTINT > 64 if (extint < 96) { - *regaddr = (NVIC_IRQ64_95_ENABLE + offset); + *regaddr = (NVIC_IRQ_ENABLE(64) + offset); *bit = 1 << (extint - 64); } else @@ -318,7 +258,7 @@ static int imx9_irqinfo(int irq, uintptr_t *regaddr, uint32_t *bit, #if IMX9_IRQ_NEXTINT > 96 if (extint < 128) { - *regaddr = (NVIC_IRQ96_127_ENABLE + offset); + *regaddr = (NVIC_IRQ_ENABLE(96) + offset); *bit = 1 << (extint - 96); } else @@ -326,7 +266,7 @@ static int imx9_irqinfo(int irq, uintptr_t *regaddr, uint32_t *bit, #if IMX9_IRQ_NEXTINT > 128 if (extint < 160) { - *regaddr = (NVIC_IRQ128_159_ENABLE + offset); + *regaddr = (NVIC_IRQ_ENABLE(128) + offset); *bit = 1 << (extint - 128); } else @@ -334,15 +274,15 @@ static int imx9_irqinfo(int irq, uintptr_t *regaddr, uint32_t *bit, #if IMX9_IRQ_NEXTINT > 160 if (extint < 192) { - *regaddr = (NVIC_IRQ160_191_ENABLE + offset); + *regaddr = (NVIC_IRQ_ENABLE(160) + offset); *bit = 1 << (extint - 160); } else #endif #if IMX9_IRQ_NEXTINT > 192 - if (extint < 219) + if (extint < 224) { - *regaddr = (NVIC_IRQ192_223_ENABLE + offset); + *regaddr = (NVIC_IRQ_ENABLE(192) + offset); *bit = 1 << (extint - 192); } else
