Skip to content

Commit

Permalink
[POWERPC] PS3: System manager support
Browse files Browse the repository at this point in the history
Add PS3 system manager support and the ppc_md routines restart() and
power_off().

The system manager provides an event notification mechanism for reporting
events like thermal alert and button presses.  It also provides support to
control system shutdown and startup.

Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Geoff Levand authored and Paul Mackerras committed Feb 16, 2007
1 parent ea1547d commit fde5efd
Show file tree
Hide file tree
Showing 5 changed files with 643 additions and 4 deletions.
10 changes: 10 additions & 0 deletions arch/powerpc/platforms/ps3/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,14 @@ config PS3_PS3AV
This support is required for graphics and sound. In
general, all users will say Y or M.

config PS3_SYS_MANAGER
bool "PS3 System Manager driver"
select PS3_VUART
default y
help
Include support for the PS3 System Manager.

This support is required for system control. In
general, all users will say Y.

endmenu
27 changes: 23 additions & 4 deletions arch/powerpc/platforms/ps3/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@
#define DBG(fmt...) do{if(0)printk(fmt);}while(0)
#endif

#if !defined(CONFIG_SMP)
static void smp_send_stop(void) {}
#endif

int ps3_get_firmware_version(union ps3_firmware_version *v)
{
int result = lv1_get_version_info(&v->raw);
Expand All @@ -66,22 +70,35 @@ static void ps3_power_save(void)
lv1_pause(0);
}

static void ps3_restart(char *cmd)
{
DBG("%s:%d cmd '%s'\n", __func__, __LINE__, cmd);

smp_send_stop();
ps3_sys_manager_restart(); /* never returns */
}

static void ps3_power_off(void)
{
DBG("%s:%d\n", __func__, __LINE__);

smp_send_stop();
ps3_sys_manager_power_off(); /* never returns */
}

static void ps3_panic(char *str)
{
DBG("%s:%d %s\n", __func__, __LINE__, str);

#ifdef CONFIG_SMP
smp_send_stop();
#endif
printk("\n");
printk(" System does not reboot automatically.\n");
printk(" Please press POWER button.\n");
printk("\n");

for (;;) ;
while(1);
}


static void prealloc(struct ps3_prealloc *p)
{
if (!p->size)
Expand Down Expand Up @@ -219,6 +236,8 @@ define_machine(ps3) {
.get_rtc_time = ps3_get_rtc_time,
.calibrate_decr = ps3_calibrate_decr,
.progress = ps3_progress,
.restart = ps3_restart,
.power_off = ps3_power_off,
#if defined(CONFIG_KEXEC)
.kexec_cpu_down = ps3_kexec_cpu_down,
.machine_kexec = ps3_machine_kexec,
Expand Down
1 change: 1 addition & 0 deletions drivers/ps3/Makefile
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
obj-$(CONFIG_PS3_VUART) += vuart.o
obj-$(CONFIG_PS3_PS3AV) += ps3av.o ps3av_cmd.o
obj-$(CONFIG_PS3_SYS_MANAGER) += sys-manager.o
Loading

0 comments on commit fde5efd

Please sign in to comment.