
During cpu init, make sure we initialize the CEC properly so that interrupts can fire and be handled while U-Boot is running.
Signed-off-by: Mike Frysinger vapier@gentoo.org --- cpu/blackfin/cpu.c | 4 ---- cpu/blackfin/start.S | 12 +++++++++--- 2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/cpu/blackfin/cpu.c b/cpu/blackfin/cpu.c index 5ae8875..ca788bb 100644 --- a/cpu/blackfin/cpu.c +++ b/cpu/blackfin/cpu.c @@ -98,9 +98,5 @@ int irq_init(void) bfin_write_EVT15(evt_default); bfin_write_ILAT(0); CSYNC(); - /* enable all interrupts except for core timer */ - irq_flags = 0xffffffbf; - local_irq_enable(); - CSYNC(); return 0; } diff --git a/cpu/blackfin/start.S b/cpu/blackfin/start.S index 9b84f74..96408e3 100644 --- a/cpu/blackfin/start.S +++ b/cpu/blackfin/start.S @@ -170,7 +170,7 @@ ENTRY(_start)
/* Now lower ourselves from the highest interrupt level to * the lowest. We do this by masking all interrupts but 15, - * setting the 15 handler to "board_init_f", raising the 15 + * setting the 15 handler to ".Lenable_nested", raising the 15 * interrupt, and then returning from the highest interrupt * level to the dummy "jump" until the interrupt controller * services the pending 15 interrupt. @@ -180,8 +180,8 @@ ENTRY(_start) r1 = r6; p0.l = LO(EVT15); p0.h = HI(EVT15); - p1.l = _cpu_init_f; - p1.h = _cpu_init_f; + p1.l = .Lenable_nested; + p1.h = .Lenable_nested; [p0] = p1; p2.l = LO(IMASK); p2.h = HI(IMASK); @@ -194,6 +194,12 @@ ENTRY(_start) reti = p4; rti;
+ /* Enable nested interrupts before continuing with cpu init */ +.Lenable_nested: + cli r0; + [--sp] = reti; + jump.l _cpu_init_f; + .LWAIT_HERE: jump .LWAIT_HERE; ENDPROC(_start)