diff options
Diffstat (limited to 'firmware/target/arm/imx31/avic-imx31.c')
-rw-r--r-- | firmware/target/arm/imx31/avic-imx31.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/firmware/target/arm/imx31/avic-imx31.c b/firmware/target/arm/imx31/avic-imx31.c index 51ba14d0b3..e349c97d82 100644 --- a/firmware/target/arm/imx31/avic-imx31.c +++ b/firmware/target/arm/imx31/avic-imx31.c | |||
@@ -119,8 +119,10 @@ void avic_init(void) | |||
119 | for (i = 0; i < 8; i++) | 119 | for (i = 0; i < 8; i++) |
120 | avic->nipriority[i] = 0; | 120 | avic->nipriority[i] = 0; |
121 | 121 | ||
122 | /* Set NM bit to enable VIC */ | 122 | /* Set NM bit to enable VIC. Mask fast interrupts. Core arbiter rise |
123 | avic->intcntl |= AVIC_INTCNTL_NM; | 123 | * for normal interrupts (for lowest latency). */ |
124 | avic->intcntl |= AVIC_INTCNTL_NM | AVIC_INTCNTL_FIDIS | | ||
125 | AVIC_INTCNTL_NIAD; | ||
124 | 126 | ||
125 | /* Enable VE bit in CP15 Control reg to enable VIC */ | 127 | /* Enable VE bit in CP15 Control reg to enable VIC */ |
126 | asm volatile ( | 128 | asm volatile ( |
@@ -213,7 +215,12 @@ void avic_set_int_type(enum IMX31_INT_LIST ints, enum INT_TYPE intstype) | |||
213 | restore_interrupt(oldstatus); | 215 | restore_interrupt(oldstatus); |
214 | } | 216 | } |
215 | 217 | ||
216 | void avic_set_ni_level(unsigned int level) | 218 | void avic_set_ni_level(int level) |
217 | { | 219 | { |
218 | AVIC_NIMASK = level > 0x1f ? 0x1f : level; | 220 | if (level < 0) |
221 | level = 0x1f; /* -1 */ | ||
222 | else if (level > 15) | ||
223 | level = 15; | ||
224 | |||
225 | AVIC_NIMASK = level; | ||
219 | } | 226 | } |