From: Christian Krafft <krafft@de.ibm.com>
To: Christian Krafft <krafft@linux.ibm.com>
Cc: cbe-oss-dev@ozlabs.org, arnd@arndb.de, linuxppc-dev@ozlabs.org
Subject: Re: [Cbe-oss-dev] [patch 02/02] powerpc/cell: add support for power button of future IBM cell blades
Date: Mon, 7 Jul 2008 18:56:44 +0200 [thread overview]
Message-ID: <20080707185644.0d6c9757@de.ibm.com> (raw)
In-Reply-To: <20080707184756.16e52677@linux.ibm.com>
From: Christian Krafft <krafft@de.ibm.com>
This patch adds support for the power button on future IBM cell blades.
It actually doesn't shut down the machine. Instead it exposes an
input device /dev/input/event0 to userspace which sends KEY_POWER
if power button has been pressed.
haldaemon actually recognizes the button, so a plattform independent acpid
replacement should handle it correctly.
Signed-off-by: Christian Krafft <krafft@de.ibm.com>
Index: linux.git/arch/powerpc/platforms/cell/Kconfig
===================================================================
--- linux.git.orig/arch/powerpc/platforms/cell/Kconfig
+++ linux.git/arch/powerpc/platforms/cell/Kconfig
@@ -87,9 +87,12 @@ config PPC_IBM_CELL_BLADE_BUTTONS
bool "IBM Cell Blade Buttons"
depends on CBE_RAS && PPC_IBM_CELL_BLADE
default y
+ select INPUT
+ select INPUT_EVDEV
help
Support Buttons on IBM Cell blades. This adds a method to
- trigger system reset via front panel pinhole button.
+ trigger system reset via front panel pinhole button and
+ an input device for the power button.
config CBE_THERM
tristate "CBE thermal support"
Index: linux.git/arch/powerpc/platforms/cell/ras.c
===================================================================
--- linux.git.orig/arch/powerpc/platforms/cell/ras.c
+++ linux.git/arch/powerpc/platforms/cell/ras.c
@@ -14,6 +14,11 @@
#include <linux/smp.h>
#include <linux/reboot.h>
+#ifdef CONFIG_PPC_IBM_CELL_BLADE_BUTTONS
+#include <linux/input.h>
+#include <linux/platform_device.h>
+#endif /* CONFIG_PPC_IBM_CELL_BLADE_BUTTONS */
+
#include <asm/reg.h>
#include <asm/io.h>
#include <asm/prom.h>
@@ -232,31 +237,76 @@ static struct notifier_block cbe_ptcal_r
#ifdef CONFIG_PPC_IBM_CELL_BLADE_BUTTONS
static int sysreset_hack;
+static struct input_dev *button_dev;
+static struct platform_device *button_pdev;
static int __init cbe_sysreset_init(void)
{
+ int ret = 0;
+ struct input_dev *dev;
struct cbe_pmd_regs __iomem *regs;
sysreset_hack = machine_is_compatible("IBM,CBPLUS-1.0");
if (!sysreset_hack)
- return 0;
+ goto out;
regs = cbe_get_cpu_pmd_regs(0);
if (!regs)
- return 0;
+ goto out;
/* Enable JTAG system-reset hack */
out_be32(®s->fir_mode_reg,
in_be32(®s->fir_mode_reg) |
CBE_PMD_FIR_MODE_M8);
- return 0;
+ dev = input_allocate_device();
+ if (!dev) {
+ ret = -ENOMEM;
+ printk(KERN_ERR "%s: Not enough memory\n", __func__);
+ goto out;
+ }
+
+ set_bit(EV_KEY, dev->evbit);
+ set_bit(KEY_POWER, dev->keybit);
+
+ dev->name = "Power Button";
+ dev->id.bustype = BUS_HOST;
+
+ /* this makes the button look like an acpi power button
+ * no clue whether anyone relies on that though */
+ dev->id.product = 0x02;
+ dev->phys = "LNXPWRBN/button/input0";
+
+ button_pdev = platform_device_register_simple("power_button", 0, NULL, 0);
+ if (IS_ERR(button_pdev)) {
+ ret = PTR_ERR(button_pdev);
+ goto out_free_input;
+ }
+
+ dev->dev.parent = &button_pdev->dev;
+ ret = input_register_device(dev);
+
+ if (ret) {
+ printk(KERN_ERR "%s: Failed to register device\n", __func__);
+ goto out_free_pdev;
+ }
+
+ button_dev = dev;
+ goto out;
+
+out_free_pdev:
+ platform_device_unregister(button_pdev);
+out_free_input:
+ input_free_device(dev);
+out:
+ return ret;
}
device_initcall(cbe_sysreset_init);
int cbe_sysreset_hack(void)
{
struct cbe_pmd_regs __iomem *regs;
+ u64 status;
/*
* The BMC can inject user triggered system reset exceptions,
@@ -267,10 +317,20 @@ int cbe_sysreset_hack(void)
regs = cbe_get_cpu_pmd_regs(0);
if (!regs)
return 0;
- if (in_be64(®s->ras_esc_0) & 0x0000ffff) {
+ status = in_be64(®s->ras_esc_0);
+ if (status & 0x0000ffff) {
out_be64(®s->ras_esc_0, 0);
return 0;
}
+ if (status & 0x00010000) {
+ out_be64(®s->ras_esc_0, 0);
+ if (!button_dev)
+ return 0;
+ input_report_key(button_dev, KEY_POWER, 1);
+ input_sync(button_dev);
+ input_report_key(button_dev, KEY_POWER, 0);
+ input_sync(button_dev);
+ }
}
return 1;
}
--
Mit freundlichen Gruessen,
kind regards,
Christian Krafft
Linux Kernel Development
IBM Systems & Technology Group
Phone: +49-07031-16-2032
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martin Jetter
Geschaetsfuehung: Herbert Kircher
Sitz der Gesellschaft: Boelingen
Registergericht: Amtsgericht Stuttgart, HRB 243294
next prev parent reply other threads:[~2008-07-07 16:56 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-04 19:05 [patch 00/11] Cell patches for 2.6.27 arnd
2008-07-04 19:05 ` [patch 01/11] powerpc/cell: add support for power button of future IBM cell blades arnd
2008-07-07 5:12 ` Benjamin Herrenschmidt
2008-07-07 9:23 ` Christian Krafft
[not found] ` <20080707184756.16e52677@linux.ibm.com>
2008-07-07 16:54 ` [Cbe-oss-dev] [patch 01/02] powerpc/cell: cleanup sysreset_hack for " Christian Krafft
2008-07-07 16:56 ` Christian Krafft [this message]
2008-07-09 3:35 ` [Cbe-oss-dev] [patch 02/02] powerpc/cell: add support for power button of future " Benjamin Herrenschmidt
2008-07-09 13:15 ` Arnd Bergmann
2008-07-09 20:45 ` Benjamin Herrenschmidt
2008-07-10 14:34 ` Arnd Bergmann
2008-07-07 5:24 ` [patch 01/11] " Stephen Rothwell
2008-07-07 8:40 ` [Cbe-oss-dev] " Arnd Bergmann
2008-07-04 19:05 ` [patch 02/11] powerpc/axonram: use only one block device major number arnd
2008-07-04 19:05 ` [patch 03/11] powerpc/axonram: enable partitioning of the Axons DDR2 DIMMs arnd
2008-07-04 19:05 ` [patch 04/11] powerpc/spufs: add atomic busy_spus counter to struct cbe_spu_info arnd
2008-07-07 5:19 ` Benjamin Herrenschmidt
2008-07-07 5:30 ` Stephen Rothwell
2008-07-07 8:50 ` [Cbe-oss-dev] " Arnd Bergmann
2008-07-04 19:05 ` [patch 05/11] powerpc/cell: add spu aware cpufreq governor arnd
2008-07-07 5:21 ` Benjamin Herrenschmidt
2008-07-07 5:32 ` Stephen Rothwell
2008-07-07 9:01 ` [Cbe-oss-dev] " Arnd Bergmann
2008-07-07 6:24 ` Stephen Rothwell
2008-07-07 8:58 ` [Cbe-oss-dev] " Arnd Bergmann
2008-07-07 14:59 ` Arnd Bergmann
2008-07-07 15:35 ` Josh Boyer
2008-07-07 21:15 ` Arnd Bergmann
2008-07-07 21:17 ` Josh Boyer
2008-07-08 2:40 ` Stephen Rothwell
2008-07-07 19:56 ` Geoff Levand
2008-07-04 19:05 ` [patch 06/11] powerpc: Add struct iommu_table argument to iommu_map_sg() arnd
2008-07-04 19:05 ` [patch 07/11] powerpc/dma: implement new dma_*map*_attrs() interfaces arnd
2008-07-07 5:27 ` Benjamin Herrenschmidt
2008-07-07 19:15 ` Geoff Levand
2008-07-04 19:05 ` [patch 08/11] powerpc/dma: use the struct dma_attrs in iommu code arnd
2008-07-04 19:05 ` [patch 09/11] powerpc/cell: cell_dma_dev_setup_iommu() return the iommu table arnd
2008-07-04 19:05 ` [patch 10/11] powerpc: move device_to_mask() to dma-mapping.h arnd
2008-07-04 19:05 ` [patch 11/11] powerpc/cell: Add DMA_ATTR_STRONG_ORDERING dma attribute and use in IOMMU code arnd
2008-07-05 5:43 ` [Cbe-oss-dev] " Michael Ellerman
2008-07-05 6:28 ` Benjamin Herrenschmidt
2008-07-05 21:51 ` Arnd Bergmann
2008-07-05 22:20 ` Benjamin Herrenschmidt
2008-07-06 15:15 ` Arnd Bergmann
2008-07-07 0:00 ` Michael Ellerman
2008-07-07 9:01 ` Arnd Bergmann
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=20080707185644.0d6c9757@de.ibm.com \
--to=krafft@de.ibm.com \
--cc=arnd@arndb.de \
--cc=cbe-oss-dev@ozlabs.org \
--cc=krafft@linux.ibm.com \
--cc=linuxppc-dev@ozlabs.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.