summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx31/avic-imx31.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx31/avic-imx31.c')
-rw-r--r--firmware/target/arm/imx31/avic-imx31.c15
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
216void avic_set_ni_level(unsigned int level) 218void 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}