On 07/09/2012 11:21 PM, Simon Glass wrote:
Hi Michal,
On Mon, Jul 9, 2012 at 2:20 AM, Michal Simek <mon...@monstr.eu
<mailto:mon...@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 <mon...@monstr.eu <mailto:mon...@monstr.eu>>
I'm not really qualified to review this, but it seems reasonable.
Acked-by: Simon Glass <s...@chromium.org <mailto:s...@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
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot