diff options
-rw-r--r-- | asm/misc.S | 4 | ||||
-rw-r--r-- | core/cpu.c | 16 | ||||
-rw-r--r-- | hw/fsp/fsp-attn.c | 5 |
3 files changed, 18 insertions, 7 deletions
@@ -36,8 +36,8 @@ set_hid0: isync blr -.global trigger_attn -trigger_attn: +.global __trigger_attn +__trigger_attn: sync isync attn @@ -399,6 +399,22 @@ static void init_cpu_thread(struct cpu_thread *t, assert(pir == container_of(t, struct cpu_stack, cpu) - cpu_stacks); } +static void enable_attn(void) +{ + unsigned long hid0; + + hid0 = mfspr(SPR_HID0); + hid0 |= SPR_HID0_ENABLE_ATTN; + set_hid0(hid0); +} + +extern void __trigger_attn(void); +void trigger_attn(void) +{ + enable_attn(); + __trigger_attn(); +} + void pre_init_boot_cpu(void) { struct cpu_thread *cpu = this_cpu(); diff --git a/hw/fsp/fsp-attn.c b/hw/fsp/fsp-attn.c index 7b56192..ff702ab 100644 --- a/hw/fsp/fsp-attn.c +++ b/hw/fsp/fsp-attn.c @@ -118,8 +118,6 @@ static void update_sp_attn_area(const char *msg) void __attribute__((noreturn)) ibm_fsp_terminate(const char *msg) { - unsigned long hid0; - /* Update SP attention area */ update_sp_attn_area(msg); @@ -133,9 +131,6 @@ void __attribute__((noreturn)) ibm_fsp_terminate(const char *msg) * reboot loop. */ - hid0 = mfspr(SPR_HID0); - hid0 |= SPR_HID0_ENABLE_ATTN; - set_hid0(hid0); trigger_attn(); for (;;) ; } |