From d67eeb1f8aa442daecc8c00fc6ab9a2973fef3f4 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 17 Nov 2013 11:40:58 -0600 Subject: [PATCH] A10: Make sure that interrupts are disabled and cleared --- arch/arm/src/a1x/a1x_boot.c | 2 +- arch/arm/src/a1x/a1x_irq.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/arch/arm/src/a1x/a1x_boot.c b/arch/arm/src/a1x/a1x_boot.c index dca93a1a94..66bf43fb7e 100644 --- a/arch/arm/src/a1x/a1x_boot.c +++ b/arch/arm/src/a1x/a1x_boot.c @@ -98,7 +98,7 @@ extern uint32_t _vector_end; /* End+1 of vector block */ #ifndef CONFIG_ARCH_ROMPGTABLE static const struct section_mapping_s section_mapping[] = { - { A1X_INTMEM_PSECTION, A1X_INTMEM_VSECTION, + { A1X_INTMEM_PSECTION, A1X_INTMEM_VSECTION, /* Includes vectors and page table */ A1X_INTMEM_MMUFLAGS, A1X_INTMEM_NSECTIONS }, { A1X_PERIPH_PSECTION, A1X_PERIPH_VSECTION, diff --git a/arch/arm/src/a1x/a1x_irq.c b/arch/arm/src/a1x/a1x_irq.c index 037e469e80..49361bd23f 100644 --- a/arch/arm/src/a1x/a1x_irq.c +++ b/arch/arm/src/a1x/a1x_irq.c @@ -148,12 +148,22 @@ static void a1x_dumpintc(const char *msg, int irq) void up_irqinitialize(void) { + int i; /* The following operations need to be atomic, but since this function is * called early in the initialization sequence, we expect to have exclusive * access to the INTC. */ + /* Disable, mask, and clear all interrupts */ + + for (i = 0; i < A1X_IRQ_NINT; i += 32) + { + putreg32(0x00000000, A1X_INTC_EN(i)); /* 0 disables corresponding interrupt */ + putreg32(0xffffffff, A1X_INTC_MASK(i)); /* 1 masks corresponding interrupt */ + (void)getreg32(A1X_INTC_IRQ_PEND(i)); /* Reading status clears pending interrupts */ + } + /* Colorize the interrupt stack for debug purposes */ #if defined(CONFIG_DEBUG_STACK) && CONFIG_ARCH_INTERRUPTSTACK > 3