Patchwork [U-Boot,03/12] microblaze: intc: Clear interrupt code

login
register
mail settings
Submitter Michal Simek
Date July 9, 2012, 9:20 a.m.
Message ID <1341825639-23475-3-git-send-email-monstr@monstr.eu>
Download mbox | patch
Permalink /patch/169720/
State Accepted
Delegated to: Michal Simek
Headers show

Comments

Michal Simek - July 9, 2012, 9:20 a.m.
Clear and prepare for device-tree driven configuration.
Remove CONFIG_SYS_INTC_0 definition
Use dynamic allocation instead of static.

Signed-off-by: Michal Simek <monstr@monstr.eu>
---
 arch/microblaze/cpu/interrupts.c              |   88 ++++++++++++++-----------
 arch/microblaze/cpu/start.S                   |    2 -
 arch/microblaze/cpu/timer.c                   |    2 -
 arch/microblaze/include/asm/microblaze_intc.h |    3 +
 arch/microblaze/lib/board.c                   |    6 +--
 include/configs/microblaze-generic.h          |    1 -
 6 files changed, 54 insertions(+), 48 deletions(-)
Simon Glass - July 9, 2012, 9:21 p.m.
Hi Michal,

On Mon, Jul 9, 2012 at 2:20 AM, Michal Simek <monstr@monstr.eu> wrote:

> Clear and prepare for device-tree driven configuration.
> Remove CONFIG_SYS_INTC_0 definition
> Use dynamic allocation instead of static.
>
> Signed-off-by: Michal Simek <monstr@monstr.eu>
>

I'm not really qualified to review this, but it seems reasonable.

Acked-by: Simon Glass <sjg@chromium.org>


> ---
>  arch/microblaze/cpu/interrupts.c              |   88
> ++++++++++++++-----------
>  arch/microblaze/cpu/start.S                   |    2 -
>  arch/microblaze/cpu/timer.c                   |    2 -
>  arch/microblaze/include/asm/microblaze_intc.h |    3 +
>  arch/microblaze/lib/board.c                   |    6 +--
>  include/configs/microblaze-generic.h          |    1 -
>  6 files changed, 54 insertions(+), 48 deletions(-)
>
> diff --git a/arch/microblaze/cpu/interrupts.c
> b/arch/microblaze/cpu/interrupts.c
> index e7ca859..ee67082 100644
> --- a/arch/microblaze/cpu/interrupts.c
> +++ b/arch/microblaze/cpu/interrupts.c
> @@ -26,6 +26,7 @@
>
>  #include <common.h>
>  #include <command.h>
> +#include <malloc.h>
>  #include <asm/microblaze_intc.h>
>  #include <asm/asm.h>
>
> @@ -48,20 +49,19 @@ int disable_interrupts (void)
>         return (msr & 0x2) != 0;
>  }
>
> -#ifdef CONFIG_SYS_INTC_0
> -
> -static struct irq_action vecs[CONFIG_SYS_INTC_0_NUM];
> +static struct irq_action *vecs;
> +static u32 irq_no;
>
>  /* mapping structure to interrupt controller */
> -microblaze_intc_t *intc = (microblaze_intc_t *) (CONFIG_SYS_INTC_0_ADDR);
> +microblaze_intc_t *intc;
>
>  /* default handler */
> -void def_hdlr (void)
> +static void def_hdlr(void)
>  {
>         puts ("def_hdlr\n");
>  }
>
> -void enable_one_interrupt (int irq)
> +static void enable_one_interrupt(int irq)
>  {
>         int mask;
>         int offset = 1;
> @@ -76,7 +76,7 @@ void enable_one_interrupt (int irq)
>  #endif
>  }
>
> -void disable_one_interrupt (int irq)
> +static void disable_one_interrupt(int irq)
>  {
>         int mask;
>         int offset = 1;
> @@ -96,7 +96,7 @@ void install_interrupt_handler (int irq,
> interrupt_handler_t * hdlr, void *arg)
>  {
>         struct irq_action *act;
>         /* irq out of range */
> -       if ((irq < 0) || (irq > CONFIG_SYS_INTC_0_NUM)) {
> +       if ((irq < 0) || (irq > irq_no)) {
>                 puts ("IRQ out of range\n");
>                 return;
>         }
> @@ -114,7 +114,7 @@ void install_interrupt_handler (int irq,
> interrupt_handler_t * hdlr, void *arg)
>  }
>
>  /* initialization interrupt controller - hardware */
> -void intc_init (void)
> +static void intc_init(void)
>  {
>         intc->mer = 0;
>         intc->ier = 0;
> @@ -127,18 +127,33 @@ void intc_init (void)
>  #endif
>  }
>
> -int interrupts_init (void)
> +int interrupts_init(void)
>  {
>         int i;
> -       /* initialize irq list */
> -       for (i = 0; i < CONFIG_SYS_INTC_0_NUM; i++) {
> -               vecs[i].handler = (interrupt_handler_t *) def_hdlr;
> -               vecs[i].arg = (void *)i;
> -               vecs[i].count = 0;
> +
> +#if defined(CONFIG_SYS_INTC_0_ADDR) && defined(CONFIG_SYS_INTC_0_NUM)
> +       intc = (microblaze_intc_t *) (CONFIG_SYS_INTC_0_ADDR);
> +       irq_no = CONFIG_SYS_INTC_0_NUM;
> +#endif
> +       if (irq_no) {
> +               vecs = calloc(1, sizeof(struct irq_action) * irq_no);
>

This is fine, since I assume it is called after memalloc_init(), but you
could set an arbitrary maximum limit if you prefer.


> +               if (vecs == NULL) {
> +                       puts("Interrupt vector allocation failed\n");
> +                       return -1;
> +               }
> +
> +               /* initialize irq list */
> +               for (i = 0; i < irq_no; i++) {
> +                       vecs[i].handler = (interrupt_handler_t *) def_hdlr;
> +                       vecs[i].arg = (void *)i;
> +                       vecs[i].count = 0;
> +               }
> +               /* initialize intc controller */
> +               intc_init();
> +               enable_interrupts();
> +       } else {
> +               puts("Undefined interrupt controller\n");
>         }
> -       /* initialize intc controller */
> -       intc_init ();
> -       enable_interrupts ();
>         return 0;
>  }
>
> @@ -172,33 +187,30 @@ void interrupt_handler (void)
>         printf ("Interrupt handler on %x line, r14 %x\n", irqs, value);
>  #endif
>  }
> -#endif
>
>  #if defined(CONFIG_CMD_IRQ)
> -#ifdef CONFIG_SYS_INTC_0
> -int do_irqinfo (cmd_tbl_t * cmdtp, int flag, int argc, char * const
> argv[])
> +int do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, const char *argv[])
>  {
>         int i;
>         struct irq_action *act = vecs;
>
> -       puts ("\nInterrupt-Information:\n\n"
> -             "Nr  Routine   Arg       Count\n"
> -             "-----------------------------\n");
> -
> -       for (i = 0; i < CONFIG_SYS_INTC_0_NUM; i++) {
> -               if (act->handler != (interrupt_handler_t*) def_hdlr) {
> -                       printf ("%02d  %08x  %08x  %d\n", i,
> -                               (int)act->handler, (int)act->arg,
> act->count);
> +       if (irq_no) {
> +               puts("\nInterrupt-Information:\n\n"
> +                     "Nr  Routine   Arg       Count\n"
> +                     "-----------------------------\n");
> +
> +               for (i = 0; i < irq_no; i++) {
> +                       if (act->handler != (interrupt_handler_t *)
> def_hdlr) {
> +                               printf("%02d  %08x  %08x  %d\n", i,
> +                                       (int)act->handler, (int)act->arg,
> +
> act->count);
> +                       }
> +                       act++;
>                 }
> -               act++;
> +               puts("\n");
> +       } else {
> +               puts("Undefined interrupt controller\n");
>         }
> -       puts ("\n");
> -       return (0);
> -}
> -#else
> -int do_irqinfo (cmd_tbl_t * cmdtp, int flag, int argc, char * const
> argv[])
> -{
> -       puts ("Undefined interrupt controller\n");
> +       return 0;
>  }
>  #endif
> -#endif
> diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
> index 9077f74..8a2f634 100644
> --- a/arch/microblaze/cpu/start.S
> +++ b/arch/microblaze/cpu/start.S
> @@ -108,7 +108,6 @@ _start:
>         sh      r6, r0, r8
>  #endif
>
> -#ifdef CONFIG_SYS_INTC_0
>         /* interrupt_handler */
>         swi     r2, r0, 0x10    /* interrupt - imm opcode */
>         swi     r3, r0, 0x14    /* interrupt - brai opcode */
> @@ -120,7 +119,6 @@ _start:
>         sh      r7, r0, r8
>         rsubi   r8, r10, 0x16
>         sh      r6, r0, r8
> -#endif
>
>         /* hardware exception */
>         swi     r2, r0, 0x20    /* hardware exception - imm opcode */
> diff --git a/arch/microblaze/cpu/timer.c b/arch/microblaze/cpu/timer.c
> index 1952804..ae4ffe0 100644
> --- a/arch/microblaze/cpu/timer.c
> +++ b/arch/microblaze/cpu/timer.c
> @@ -40,7 +40,6 @@ ulong get_timer (ulong base)
>  }
>  #endif
>
> -#ifdef CONFIG_SYS_INTC_0
>  #ifdef CONFIG_SYS_TIMER_0
>  microblaze_timer_t *tmr = (microblaze_timer_t *)
> (CONFIG_SYS_TIMER_0_ADDR);
>
> @@ -61,7 +60,6 @@ int timer_init (void)
>         return 0;
>  }
>  #endif
> -#endif
>
>  /*
>   * This function is derived from PowerPC code (read timebase as long
> long).
> diff --git a/arch/microblaze/include/asm/microblaze_intc.h
> b/arch/microblaze/include/asm/microblaze_intc.h
> index 4c385aa..6142b9c 100644
> --- a/arch/microblaze/include/asm/microblaze_intc.h
> +++ b/arch/microblaze/include/asm/microblaze_intc.h
> @@ -41,3 +41,6 @@ struct irq_action {
>
>  void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
>                                        void *arg);
> +
> +int interrupts_init(void);
> +
> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
> index 1cf895b..8cf4266 100644
> --- a/arch/microblaze/lib/board.c
> +++ b/arch/microblaze/lib/board.c
> @@ -32,6 +32,7 @@
>  #include <stdio_dev.h>
>  #include <net.h>
>  #include <asm/processor.h>
> +#include <asm/microblaze_intc.h>
>  #include <fdtdec.h>
>
>  DECLARE_GLOBAL_DATA_PTR;
> @@ -39,9 +40,6 @@ DECLARE_GLOBAL_DATA_PTR;
>  #ifdef CONFIG_SYS_GPIO_0
>  extern int gpio_init (void);
>  #endif
> -#ifdef CONFIG_SYS_INTC_0
> -extern int interrupts_init (void);
> -#endif
>  #ifdef CONFIG_SYS_TIMER_0
>  extern int timer_init (void);
>  #endif
> @@ -73,9 +71,7 @@ init_fnc_t *init_sequence[] = {
>  #ifdef CONFIG_SYS_GPIO_0
>         gpio_init,
>  #endif
> -#ifdef CONFIG_SYS_INTC_0
>         interrupts_init,
> -#endif
>  #ifdef CONFIG_SYS_TIMER_0
>         timer_init,
>  #endif
> diff --git a/include/configs/microblaze-generic.h
> b/include/configs/microblaze-generic.h
> index e20eb08..44934eb 100644
> --- a/include/configs/microblaze-generic.h
> +++ b/include/configs/microblaze-generic.h
> @@ -97,7 +97,6 @@
>
>  /* interrupt controller */
>  #ifdef XILINX_INTC_BASEADDR
> -# define CONFIG_SYS_INTC_0             1
>  # define CONFIG_SYS_INTC_0_ADDR                XILINX_INTC_BASEADDR
>  # define CONFIG_SYS_INTC_0_NUM         XILINX_INTC_NUM_INTR_INPUTS
>  #endif
> --
> 1.7.0.4
>
> Regards,
Simon
Michal Simek - July 10, 2012, 8:34 a.m.
On 07/09/2012 11:21 PM, Simon Glass wrote:
> Hi Michal,
>
> On Mon, Jul 9, 2012 at 2:20 AM, Michal Simek <monstr@monstr.eu <mailto:monstr@monstr.eu>> wrote:
>
>     Clear and prepare for device-tree driven configuration.
>     Remove CONFIG_SYS_INTC_0 definition
>     Use dynamic allocation instead of static.
>
>     Signed-off-by: Michal Simek <monstr@monstr.eu <mailto:monstr@monstr.eu>>
>
>
> I'm not really qualified to review this, but it seems reasonable.
>
> Acked-by: Simon Glass <sjg@chromium.org <mailto:sjg@chromium.org>>

thanks.

>
>     ---
>       arch/microblaze/cpu/interrupts.c              |   88 ++++++++++++++-----------
>       arch/microblaze/cpu/start.S                   |    2 -
>       arch/microblaze/cpu/timer.c                   |    2 -
>       arch/microblaze/include/asm/microblaze_intc.h |    3 +
>       arch/microblaze/lib/board.c                   |    6 +--
>       include/configs/microblaze-generic.h          |    1 -
>       6 files changed, 54 insertions(+), 48 deletions(-)
>
>     diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
>     index e7ca859..ee67082 100644
>     --- a/arch/microblaze/cpu/interrupts.c
>     +++ b/arch/microblaze/cpu/interrupts.c
>     @@ -26,6 +26,7 @@
>
>       #include <common.h>
>       #include <command.h>
>     +#include <malloc.h>
>       #include <asm/microblaze_intc.h>
>       #include <asm/asm.h>
>
>     @@ -48,20 +49,19 @@ int disable_interrupts (void)
>              return (msr & 0x2) != 0;
>       }
>
>     -#ifdef CONFIG_SYS_INTC_0
>     -
>     -static struct irq_action vecs[CONFIG_SYS_INTC_0_NUM];
>     +static struct irq_action *vecs;
>     +static u32 irq_no;
>
>       /* mapping structure to interrupt controller */
>     -microblaze_intc_t *intc = (microblaze_intc_t *) (CONFIG_SYS_INTC_0_ADDR);
>     +microblaze_intc_t *intc;
>
>       /* default handler */
>     -void def_hdlr (void)
>     +static void def_hdlr(void)
>       {
>              puts ("def_hdlr\n");
>       }
>
>     -void enable_one_interrupt (int irq)
>     +static void enable_one_interrupt(int irq)
>       {
>              int mask;
>              int offset = 1;
>     @@ -76,7 +76,7 @@ void enable_one_interrupt (int irq)
>       #endif
>       }
>
>     -void disable_one_interrupt (int irq)
>     +static void disable_one_interrupt(int irq)
>       {
>              int mask;
>              int offset = 1;
>     @@ -96,7 +96,7 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
>       {
>              struct irq_action *act;
>              /* irq out of range */
>     -       if ((irq < 0) || (irq > CONFIG_SYS_INTC_0_NUM)) {
>     +       if ((irq < 0) || (irq > irq_no)) {
>                      puts ("IRQ out of range\n");
>                      return;
>              }
>     @@ -114,7 +114,7 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
>       }
>
>       /* initialization interrupt controller - hardware */
>     -void intc_init (void)
>     +static void intc_init(void)
>       {
>              intc->mer = 0;
>              intc->ier = 0;
>     @@ -127,18 +127,33 @@ void intc_init (void)
>       #endif
>       }
>
>     -int interrupts_init (void)
>     +int interrupts_init(void)
>       {
>              int i;
>     -       /* initialize irq list */
>     -       for (i = 0; i < CONFIG_SYS_INTC_0_NUM; i++) {
>     -               vecs[i].handler = (interrupt_handler_t *) def_hdlr;
>     -               vecs[i].arg = (void *)i;
>     -               vecs[i].count = 0;
>     +
>     +#if defined(CONFIG_SYS_INTC_0_ADDR) && defined(CONFIG_SYS_INTC_0_NUM)
>     +       intc = (microblaze_intc_t *) (CONFIG_SYS_INTC_0_ADDR);
>     +       irq_no = CONFIG_SYS_INTC_0_NUM;
>     +#endif
>     +       if (irq_no) {
>     +               vecs = calloc(1, sizeof(struct irq_action) * irq_no);
>
>
> This is fine, since I assume it is called after memalloc_init(), but you could set an arbitrary maximum limit if you prefer.
>

Yes, it is called after mem_malloc_init.
The maximum limit is 32 but it won't be reached.
This checking is done by u-boot BSP.

Applied.

Thanks,
Michal

Patch

diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
index e7ca859..ee67082 100644
--- a/arch/microblaze/cpu/interrupts.c
+++ b/arch/microblaze/cpu/interrupts.c
@@ -26,6 +26,7 @@ 
 
 #include <common.h>
 #include <command.h>
+#include <malloc.h>
 #include <asm/microblaze_intc.h>
 #include <asm/asm.h>
 
@@ -48,20 +49,19 @@  int disable_interrupts (void)
 	return (msr & 0x2) != 0;
 }
 
-#ifdef CONFIG_SYS_INTC_0
-
-static struct irq_action vecs[CONFIG_SYS_INTC_0_NUM];
+static struct irq_action *vecs;
+static u32 irq_no;
 
 /* mapping structure to interrupt controller */
-microblaze_intc_t *intc = (microblaze_intc_t *) (CONFIG_SYS_INTC_0_ADDR);
+microblaze_intc_t *intc;
 
 /* default handler */
-void def_hdlr (void)
+static void def_hdlr(void)
 {
 	puts ("def_hdlr\n");
 }
 
-void enable_one_interrupt (int irq)
+static void enable_one_interrupt(int irq)
 {
 	int mask;
 	int offset = 1;
@@ -76,7 +76,7 @@  void enable_one_interrupt (int irq)
 #endif
 }
 
-void disable_one_interrupt (int irq)
+static void disable_one_interrupt(int irq)
 {
 	int mask;
 	int offset = 1;
@@ -96,7 +96,7 @@  void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
 {
 	struct irq_action *act;
 	/* irq out of range */
-	if ((irq < 0) || (irq > CONFIG_SYS_INTC_0_NUM)) {
+	if ((irq < 0) || (irq > irq_no)) {
 		puts ("IRQ out of range\n");
 		return;
 	}
@@ -114,7 +114,7 @@  void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
 }
 
 /* initialization interrupt controller - hardware */
-void intc_init (void)
+static void intc_init(void)
 {
 	intc->mer = 0;
 	intc->ier = 0;
@@ -127,18 +127,33 @@  void intc_init (void)
 #endif
 }
 
-int interrupts_init (void)
+int interrupts_init(void)
 {
 	int i;
-	/* initialize irq list */
-	for (i = 0; i < CONFIG_SYS_INTC_0_NUM; i++) {
-		vecs[i].handler = (interrupt_handler_t *) def_hdlr;
-		vecs[i].arg = (void *)i;
-		vecs[i].count = 0;
+
+#if defined(CONFIG_SYS_INTC_0_ADDR) && defined(CONFIG_SYS_INTC_0_NUM)
+	intc = (microblaze_intc_t *) (CONFIG_SYS_INTC_0_ADDR);
+	irq_no = CONFIG_SYS_INTC_0_NUM;
+#endif
+	if (irq_no) {
+		vecs = calloc(1, sizeof(struct irq_action) * irq_no);
+		if (vecs == NULL) {
+			puts("Interrupt vector allocation failed\n");
+			return -1;
+		}
+
+		/* initialize irq list */
+		for (i = 0; i < irq_no; i++) {
+			vecs[i].handler = (interrupt_handler_t *) def_hdlr;
+			vecs[i].arg = (void *)i;
+			vecs[i].count = 0;
+		}
+		/* initialize intc controller */
+		intc_init();
+		enable_interrupts();
+	} else {
+		puts("Undefined interrupt controller\n");
 	}
-	/* initialize intc controller */
-	intc_init ();
-	enable_interrupts ();
 	return 0;
 }
 
@@ -172,33 +187,30 @@  void interrupt_handler (void)
 	printf ("Interrupt handler on %x line, r14 %x\n", irqs, value);
 #endif
 }
-#endif
 
 #if defined(CONFIG_CMD_IRQ)
-#ifdef CONFIG_SYS_INTC_0
-int do_irqinfo (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
+int do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, const char *argv[])
 {
 	int i;
 	struct irq_action *act = vecs;
 
-	puts ("\nInterrupt-Information:\n\n"
-	      "Nr  Routine   Arg       Count\n"
-	      "-----------------------------\n");
-
-	for (i = 0; i < CONFIG_SYS_INTC_0_NUM; i++) {
-		if (act->handler != (interrupt_handler_t*) def_hdlr) {
-			printf ("%02d  %08x  %08x  %d\n", i,
-				(int)act->handler, (int)act->arg, act->count);
+	if (irq_no) {
+		puts("\nInterrupt-Information:\n\n"
+		      "Nr  Routine   Arg       Count\n"
+		      "-----------------------------\n");
+
+		for (i = 0; i < irq_no; i++) {
+			if (act->handler != (interrupt_handler_t *) def_hdlr) {
+				printf("%02d  %08x  %08x  %d\n", i,
+					(int)act->handler, (int)act->arg,
+								act->count);
+			}
+			act++;
 		}
-		act++;
+		puts("\n");
+	} else {
+		puts("Undefined interrupt controller\n");
 	}
-	puts ("\n");
-	return (0);
-}
-#else
-int do_irqinfo (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
-{
-	puts ("Undefined interrupt controller\n");
+	return 0;
 }
 #endif
-#endif
diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index 9077f74..8a2f634 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -108,7 +108,6 @@  _start:
 	sh	r6, r0, r8
 #endif
 
-#ifdef CONFIG_SYS_INTC_0
 	/* interrupt_handler */
 	swi	r2, r0, 0x10	/* interrupt - imm opcode */
 	swi	r3, r0, 0x14	/* interrupt - brai opcode */
@@ -120,7 +119,6 @@  _start:
 	sh	r7, r0, r8
 	rsubi	r8, r10, 0x16
 	sh	r6, r0, r8
-#endif
 
 	/* hardware exception */
 	swi	r2, r0, 0x20	/* hardware exception - imm opcode */
diff --git a/arch/microblaze/cpu/timer.c b/arch/microblaze/cpu/timer.c
index 1952804..ae4ffe0 100644
--- a/arch/microblaze/cpu/timer.c
+++ b/arch/microblaze/cpu/timer.c
@@ -40,7 +40,6 @@  ulong get_timer (ulong base)
 }
 #endif
 
-#ifdef CONFIG_SYS_INTC_0
 #ifdef CONFIG_SYS_TIMER_0
 microblaze_timer_t *tmr = (microblaze_timer_t *) (CONFIG_SYS_TIMER_0_ADDR);
 
@@ -61,7 +60,6 @@  int timer_init (void)
 	return 0;
 }
 #endif
-#endif
 
 /*
  * This function is derived from PowerPC code (read timebase as long long).
diff --git a/arch/microblaze/include/asm/microblaze_intc.h b/arch/microblaze/include/asm/microblaze_intc.h
index 4c385aa..6142b9c 100644
--- a/arch/microblaze/include/asm/microblaze_intc.h
+++ b/arch/microblaze/include/asm/microblaze_intc.h
@@ -41,3 +41,6 @@  struct irq_action {
 
 void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
 				       void *arg);
+
+int interrupts_init(void);
+
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index 1cf895b..8cf4266 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -32,6 +32,7 @@ 
 #include <stdio_dev.h>
 #include <net.h>
 #include <asm/processor.h>
+#include <asm/microblaze_intc.h>
 #include <fdtdec.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -39,9 +40,6 @@  DECLARE_GLOBAL_DATA_PTR;
 #ifdef CONFIG_SYS_GPIO_0
 extern int gpio_init (void);
 #endif
-#ifdef CONFIG_SYS_INTC_0
-extern int interrupts_init (void);
-#endif
 #ifdef CONFIG_SYS_TIMER_0
 extern int timer_init (void);
 #endif
@@ -73,9 +71,7 @@  init_fnc_t *init_sequence[] = {
 #ifdef CONFIG_SYS_GPIO_0
 	gpio_init,
 #endif
-#ifdef CONFIG_SYS_INTC_0
 	interrupts_init,
-#endif
 #ifdef CONFIG_SYS_TIMER_0
 	timer_init,
 #endif
diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
index e20eb08..44934eb 100644
--- a/include/configs/microblaze-generic.h
+++ b/include/configs/microblaze-generic.h
@@ -97,7 +97,6 @@ 
 
 /* interrupt controller */
 #ifdef XILINX_INTC_BASEADDR
-# define CONFIG_SYS_INTC_0		1
 # define CONFIG_SYS_INTC_0_ADDR		XILINX_INTC_BASEADDR
 # define CONFIG_SYS_INTC_0_NUM		XILINX_INTC_NUM_INTR_INPUTS
 #endif