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

Michal Simek monstr at monstr.eu
Tue Jul 10 10:34:55 CEST 2012


On 07/09/2012 11:21 PM, Simon Glass wrote:
> Hi Michal,
>
> On Mon, Jul 9, 2012 at 2:20 AM, Michal Simek <monstr at monstr.eu <mailto:monstr at 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 at monstr.eu <mailto:monstr at monstr.eu>>
>
>
> I'm not really qualified to review this, but it seems reasonable.
>
> Acked-by: Simon Glass <sjg at chromium.org <mailto:sjg at 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



-- 
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian


More information about the U-Boot mailing list