diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-07-13 19:05:26 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-07-14 20:00:21 -0400 |
commit | d8573e20d5d6974305599dde42b5dd7583310ccf (patch) | |
tree | e4469e74b112413c5d781038424a303068113c48 /arch | |
parent | 18b0bbd8ca6d3cb90425aa0d77b99a762c6d6de3 (diff) |
[SPARC64]: Make sure IRQs are disabled properly during early boot.
Else we trigger the new irqs_disable() assertion in start_kernel().
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/sparc64/kernel/head.S | 13 | ||||
-rw-r--r-- | arch/sparc64/kernel/time.c | 2 |
2 files changed, 6 insertions, 9 deletions
diff --git a/arch/sparc64/kernel/head.S b/arch/sparc64/kernel/head.S index 75684b56767e..c8e9dc9d68a9 100644 --- a/arch/sparc64/kernel/head.S +++ b/arch/sparc64/kernel/head.S | |||
@@ -551,9 +551,10 @@ setup_trap_table: | |||
551 | save %sp, -192, %sp | 551 | save %sp, -192, %sp |
552 | 552 | ||
553 | /* Force interrupts to be disabled. */ | 553 | /* Force interrupts to be disabled. */ |
554 | rdpr %pstate, %o1 | 554 | rdpr %pstate, %l0 |
555 | andn %o1, PSTATE_IE, %o1 | 555 | andn %l0, PSTATE_IE, %o1 |
556 | wrpr %o1, 0x0, %pstate | 556 | wrpr %o1, 0x0, %pstate |
557 | rdpr %pil, %l1 | ||
557 | wrpr %g0, 15, %pil | 558 | wrpr %g0, 15, %pil |
558 | 559 | ||
559 | /* Make the firmware call to jump over to the Linux trap table. */ | 560 | /* Make the firmware call to jump over to the Linux trap table. */ |
@@ -622,11 +623,9 @@ setup_trap_table: | |||
622 | call init_irqwork_curcpu | 623 | call init_irqwork_curcpu |
623 | nop | 624 | nop |
624 | 625 | ||
625 | /* Now we can turn interrupts back on. */ | 626 | /* Now we can restore interrupt state. */ |
626 | rdpr %pstate, %o1 | 627 | wrpr %l0, 0, %pstate |
627 | or %o1, PSTATE_IE, %o1 | 628 | wrpr %l1, 0x0, %pil |
628 | wrpr %o1, 0, %pstate | ||
629 | wrpr %g0, 0x0, %pil | ||
630 | 629 | ||
631 | ret | 630 | ret |
632 | restore | 631 | restore |
diff --git a/arch/sparc64/kernel/time.c b/arch/sparc64/kernel/time.c index b43de647ba73..094d3e35be18 100644 --- a/arch/sparc64/kernel/time.c +++ b/arch/sparc64/kernel/time.c | |||
@@ -928,8 +928,6 @@ static void sparc64_start_timers(void) | |||
928 | __asm__ __volatile__("wrpr %0, 0x0, %%pstate" | 928 | __asm__ __volatile__("wrpr %0, 0x0, %%pstate" |
929 | : /* no outputs */ | 929 | : /* no outputs */ |
930 | : "r" (pstate)); | 930 | : "r" (pstate)); |
931 | |||
932 | local_irq_enable(); | ||
933 | } | 931 | } |
934 | 932 | ||
935 | struct freq_table { | 933 | struct freq_table { |