[SPARC64]: Fix powering off on SMP.
Doing a "SUNW,stop-self" firmware call on the other cpus is not the correct thing to do when dropping into the firmware for a halt, reboot, or power-off. For now, just do nothing to quiet the other cpus, as the system should be quiescent enough. Later we may decide to implement smp_send_stop() like the other SMP platforms do. Based upon a report from Christopher Zimmermann. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f75884d28a
commit
b4d1b82578
3 changed files with 0 additions and 35 deletions
|
@ -1001,13 +1001,6 @@ void smp_penguin_jailcell(int irq, struct pt_regs *regs)
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern unsigned long xcall_promstop;
|
|
||||||
|
|
||||||
void smp_promstop_others(void)
|
|
||||||
{
|
|
||||||
smp_cross_call(&xcall_promstop, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define prof_multiplier(__cpu) cpu_data(__cpu).multiplier
|
#define prof_multiplier(__cpu) cpu_data(__cpu).multiplier
|
||||||
#define prof_counter(__cpu) cpu_data(__cpu).counter
|
#define prof_counter(__cpu) cpu_data(__cpu).counter
|
||||||
|
|
||||||
|
|
|
@ -453,22 +453,6 @@ xcall_flush_dcache_page_spitfire: /* %g1 == physical page address
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
.globl xcall_promstop
|
|
||||||
xcall_promstop:
|
|
||||||
rdpr %pstate, %g2
|
|
||||||
wrpr %g2, PSTATE_IG | PSTATE_AG, %pstate
|
|
||||||
rdpr %pil, %g2
|
|
||||||
wrpr %g0, 15, %pil
|
|
||||||
sethi %hi(109f), %g7
|
|
||||||
b,pt %xcc, etrap_irq
|
|
||||||
109: or %g7, %lo(109b), %g7
|
|
||||||
flushw
|
|
||||||
call prom_stopself
|
|
||||||
nop
|
|
||||||
/* We should not return, just spin if we do... */
|
|
||||||
1: b,a,pt %xcc, 1b
|
|
||||||
nop
|
|
||||||
|
|
||||||
.data
|
.data
|
||||||
|
|
||||||
errata32_hwbug:
|
errata32_hwbug:
|
||||||
|
|
|
@ -68,19 +68,11 @@ void prom_cmdline(void)
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
extern void smp_promstop_others(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Drop into the prom, but completely terminate the program.
|
/* Drop into the prom, but completely terminate the program.
|
||||||
* No chance of continuing.
|
* No chance of continuing.
|
||||||
*/
|
*/
|
||||||
void prom_halt(void)
|
void prom_halt(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
smp_promstop_others();
|
|
||||||
udelay(8000);
|
|
||||||
#endif
|
|
||||||
again:
|
again:
|
||||||
p1275_cmd("exit", P1275_INOUT(0, 0));
|
p1275_cmd("exit", P1275_INOUT(0, 0));
|
||||||
goto again; /* PROM is out to get me -DaveM */
|
goto again; /* PROM is out to get me -DaveM */
|
||||||
|
@ -88,10 +80,6 @@ void prom_halt(void)
|
||||||
|
|
||||||
void prom_halt_power_off(void)
|
void prom_halt_power_off(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
smp_promstop_others();
|
|
||||||
udelay(8000);
|
|
||||||
#endif
|
|
||||||
p1275_cmd("SUNW,power-off", P1275_INOUT(0, 0));
|
p1275_cmd("SUNW,power-off", P1275_INOUT(0, 0));
|
||||||
|
|
||||||
/* if nothing else helps, we just halt */
|
/* if nothing else helps, we just halt */
|
||||||
|
|
Loading…
Add table
Reference in a new issue