All of lore.kernel.org
 help / color / mirror / Atom feed
From: Manish Ahuja <ahuja@austin.ibm.com>
To: Paul Mackerras <paulus@samba.org>
Cc: ppc-dev <linuxppc-dev@ozlabs.org>
Subject: Re: [PATCH]Enabling Auto poweron after power is restored.
Date: Thu, 08 Feb 2007 16:01:17 -0600	[thread overview]
Message-ID: <45CB9DAD.3060609@austin.ibm.com> (raw)
In-Reply-To: <17865.14407.190426.642030@cargo.ozlabs.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 646 bytes --]

Re-spun as suggested. I think this should be i-series friendly.

------------------------------------------------------------------------------------------------------------------------- 




During power outages, the ups notifies the system for a shutdown. In the
current setup, it isn't possible to poweron when power is restored. This
patch fixes the issue by calling the right ibm,power-off-ups token
during such events. It also adds a sysfs interface so that rc.powerfail
can parse the epow events and modify the power-off behavior accordingly
to enable the right token to be called.

Signed-off-by: Manish Ahuja <ahuja@austin.ibm.com>






[-- Attachment #2: Auto-poweron-patch-1 --]
[-- Type: text/plain, Size: 6003 bytes --]

---
 arch/powerpc/platforms/pseries/Makefile  |    2 
 arch/powerpc/platforms/pseries/power.c   |   87 +++++++++++++++++++++++++++++++
 arch/powerpc/platforms/pseries/pseries.h |    3 +
 arch/powerpc/platforms/pseries/setup.c   |   30 ++++++++++
 4 files changed, 120 insertions(+), 2 deletions(-)

Index: 2.6.20-rc6-git1-t2/arch/powerpc/platforms/pseries/power.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.20-rc6-git1-t2/arch/powerpc/platforms/pseries/power.c	2007-02-08 12:37:30.000000000 -0800
@@ -0,0 +1,87 @@
+/*
+ *  Interface for power-management for ppc64 compliant platform
+ *
+ *  Manish Ahuja <mahuja@us.ibm.com>
+ *
+ *  Feb 2007
+ *
+ *  Copyright (C) 2007 IBM Corporation.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; version 2 of the License.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <linux/kobject.h>
+#include <linux/string.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+
+unsigned long rtas_poweron_auto; /* default and normal state is 0 */
+
+static ssize_t auto_poweron_show(struct subsystem * subsys, char * buf)
+{
+        return sprintf(buf, "%lu\n", rtas_poweron_auto);
+}
+
+static ssize_t
+auto_poweron_store(struct subsystem * subsys, const char * buf, size_t n)
+{
+	int ret;
+	unsigned long ups_restart;
+	ret = sscanf(buf, "%lu", &ups_restart);
+
+	if ((ret == 1) && ((ups_restart == 1) || (ups_restart == 0))){
+		rtas_poweron_auto = ups_restart;
+		return n;
+	}
+	return -EINVAL;
+}
+
+static struct subsys_attribute auto_poweron_attr = {
+        .attr   = {
+                .name = __stringify(auto_poweron),
+                .mode = 0644,
+        },
+        .show   = auto_poweron_show,
+        .store  = auto_poweron_store,
+};
+
+#ifndef CONFIG_PM
+decl_subsys(power,NULL,NULL);
+
+static struct attribute * g[] = {
+        &auto_poweron_attr.attr,
+        NULL,
+};
+
+static struct attribute_group attr_group = {
+        .attrs = g,
+};
+
+static int __init pm_init(void)
+{
+        int error = subsystem_register(&power_subsys);
+        if (!error)
+                error = sysfs_create_group(&power_subsys.kset.kobj,&attr_group);
+        return error;
+}
+core_initcall(pm_init);
+#else
+extern struct subsystem power_subsys;
+
+static int __init apo_pm_init(void)
+{
+	return(subsys_create_file(&power_subsys, &auto_poweron_attr));
+}
+__initcall(apo_pm_init);
+#endif
Index: 2.6.20-rc6-git1-t2/arch/powerpc/platforms/pseries/Makefile
===================================================================
--- 2.6.20-rc6-git1-t2.orig/arch/powerpc/platforms/pseries/Makefile	2007-02-08 12:37:28.000000000 -0800
+++ 2.6.20-rc6-git1-t2/arch/powerpc/platforms/pseries/Makefile	2007-02-08 12:37:30.000000000 -0800
@@ -4,7 +4,7 @@ endif
 
 obj-y			:= pci.o lpar.o hvCall.o nvram.o reconfig.o \
 			   setup.o iommu.o ras.o rtasd.o pci_dlpar.o \
-			   firmware.o
+			   firmware.o power.o
 obj-$(CONFIG_SMP)	+= smp.o
 obj-$(CONFIG_XICS)	+= xics.o
 obj-$(CONFIG_SCANLOG)	+= scanlog.o
Index: 2.6.20-rc6-git1-t2/arch/powerpc/platforms/pseries/setup.c
===================================================================
--- 2.6.20-rc6-git1-t2.orig/arch/powerpc/platforms/pseries/setup.c	2007-02-08 12:37:28.000000000 -0800
+++ 2.6.20-rc6-git1-t2/arch/powerpc/platforms/pseries/setup.c	2007-02-08 12:37:30.000000000 -0800
@@ -486,6 +486,34 @@ static int pSeries_pci_probe_mode(struct
 	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,
Index: 2.6.20-rc6-git1-t2/arch/powerpc/platforms/pseries/pseries.h
===================================================================
--- 2.6.20-rc6-git1-t2.orig/arch/powerpc/platforms/pseries/pseries.h	2007-02-08 12:37:28.000000000 -0800
+++ 2.6.20-rc6-git1-t2/arch/powerpc/platforms/pseries/pseries.h	2007-02-08 12:48:10.000000000 -0800
@@ -33,4 +33,7 @@ static inline setup_kexec_cpu_down_xics(
 static inline setup_kexec_cpu_down_mpic(void) { };
 #endif
 
+/* Poweron buffer used for enabling auto ups restart */
+extern unsigned long rtas_poweron_auto;
+
 #endif /* _PSERIES_PSERIES_H */


  parent reply	other threads:[~2007-02-08 22:01 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-01 18:28 [PATCH]Enabling Auto poweron after power is restored Manish Ahuja
2006-12-04 15:48 ` Will Schmidt
2006-12-04 19:31   ` Linas Vepstas
2006-12-04 19:49   ` Olof Johansson
2006-12-04 21:26     ` Manish Ahuja
2006-12-05 21:41 ` Manish Ahuja
2006-12-08  6:09   ` Paul Mackerras
2006-12-24 16:56     ` Manish Ahuja
2006-12-24 17:50     ` Manish Ahuja
2007-01-09  4:16       ` Paul Mackerras
2007-01-09 14:21         ` Segher Boessenkool
2007-01-09 15:05         ` Nathan Lynch
2007-01-10 20:58           ` Linas Vepstas
2007-01-10 20:58           ` Manish Ahuja
2007-01-12  0:38             ` Linas Vepstas
2007-02-03  4:16         ` Manish Ahuja
2007-02-06 17:58           ` Linas Vepstas
2007-02-07  2:24           ` Paul Mackerras
2007-02-07 19:42             ` Manish Ahuja
2007-02-08 22:01             ` Manish Ahuja [this message]
2007-02-07 16:59           ` Olof Johansson
2007-02-07 17:05             ` Manish Ahuja

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45CB9DAD.3060609@austin.ibm.com \
    --to=ahuja@austin.ibm.com \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.