summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/pseries/setup.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-19 13:05:14 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-19 13:05:14 -0800
commit5c56f466835d20fc4f7119063a8c029f7170a317 (patch)
treecfa8afcea4defb59de32c501245bae16d0fdc5d0 /arch/powerpc/platforms/pseries/setup.c
parentdd397a6d1ae125686d97a20f983778c331093206 (diff)
parentc2944612cf30aece4526f23e96e1d234a1870ed6 (diff)
downloadtalos-op-linux-5c56f466835d20fc4f7119063a8c029f7170a317.tar.gz
talos-op-linux-5c56f466835d20fc4f7119063a8c029f7170a317.zip
Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (34 commits) [POWERPC] 86xx: Cleaned up platform dts files [POWERPC] 85xx: Renamed MPC8568 MDS board code to match other boards [POWERPC] 85xx: Cleaning up machine probing [POWERPC] QE: clean up ucc_slow.c and ucc_fast.c [POWERPC] 85xx: Cleaned up platform dts files [POWERPC] 83xx: Renamed MPC8323 MDS dts and defconfig to match other boards [POWERPC] 83xx: Updated and renamed MPC8360PB to MPC836x MDS [POWERPC] 83xx: Use of_platform_bus_probe to setup QE devices [POWERPC] 83xx: use default value of loops_per_jiffy [POWERPC] 83xx: Remove obsolete setting of ROOT_DEV. [POWERPC] 83xx: Cleaning up machine probing and board initcalls [POWERPC] Dispose irq mapping when done in mpc52xx_serial.c [POWERPC] 86xx: Add missing of_node_put() in mpc86xx_hpcn_init_irq(). [POWERPC] 8[56]xx: Remove obsolete setting of ROOT_DEV for 85xx and 86xx platforms. [POWERPC] pseries: Enabling auto poweron after power is restored. [POWERPC] use winbond libata instead of ide driver for pseries CD drives [POWERPC] powerpc: remove references to the obsolete linux,platform property [POWERPC] add of_get_mac_address and update fsl_soc.c to use it [POWERPC] 83xx: Cleaned up 83xx platform dts files [POWERPC] Fix bug with early ioremap and 64k pages ...
Diffstat (limited to 'arch/powerpc/platforms/pseries/setup.c')
-rw-r--r--arch/powerpc/platforms/pseries/setup.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 435a04596526..34aff47b1f55 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -486,6 +486,34 @@ static int pSeries_pci_probe_mode(struct pci_bus *bus)
return PCI_PROBE_NORMAL;
}
+/**
+ * pSeries_power_off - tell firmware about how to power off the system.
+ *
+ * This function calls either the power-off rtas token in normal cases
+ * or the ibm,power-off-ups token (if present & requested) in case of
+ * a power failure. If power-off token is used, power on will only be
+ * possible with power button press. If ibm,power-off-ups token is used
+ * it will allow auto poweron after power is restored.
+ */
+void pSeries_power_off(void)
+{
+ int rc;
+ int rtas_poweroff_ups_token = rtas_token("ibm,power-off-ups");
+
+ if (rtas_flash_term_hook)
+ rtas_flash_term_hook(SYS_POWER_OFF);
+
+ if (rtas_poweron_auto == 0 ||
+ rtas_poweroff_ups_token == RTAS_UNKNOWN_SERVICE) {
+ rc = rtas_call(rtas_token("power-off"), 2, 1, NULL, -1, -1);
+ printk(KERN_INFO "RTAS power-off returned %d\n", rc);
+ } else {
+ rc = rtas_call(rtas_poweroff_ups_token, 0, 1, NULL);
+ printk(KERN_INFO "RTAS ibm,power-off-ups returned %d\n", rc);
+ }
+ for (;;);
+}
+
define_machine(pseries) {
.name = "pSeries",
.probe = pSeries_probe,
@@ -496,7 +524,7 @@ define_machine(pseries) {
.pcibios_fixup = pSeries_final_fixup,
.pci_probe_mode = pSeries_pci_probe_mode,
.restart = rtas_restart,
- .power_off = rtas_power_off,
+ .power_off = pSeries_power_off,
.halt = rtas_halt,
.panic = rtas_os_term,
.get_boot_time = rtas_get_boot_time,
OpenPOWER on IntegriCloud