public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ACPI: Add reboot mechanism
@ 2007-07-16 18:00 Aaron Durbin
  2007-07-16 18:17 ` Arjan van de Ven
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Aaron Durbin @ 2007-07-16 18:00 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-acpi, len.brown, ak, akpm


Add the ability to reset the machine using the RESET_REG in ACPI's FADT table.

Signed-off-by: Aaron Durbin <adurbin@google.com>
---

diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
index d4336f1..c9906a5 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -21,7 +21,7 @@ obj-$(CONFIG_X86)		+= blacklist.o
 #
 # ACPI Core Subsystem (Interpreter)
 #
-obj-y				+= osl.o utils.o \
+obj-y				+= osl.o utils.o reboot.o \
 				   dispatcher/ events/ executer/ hardware/ \
 				   namespace/ parser/ resources/ tables/ \
 				   utilities/
diff --git a/drivers/acpi/reboot.c b/drivers/acpi/reboot.c
new file mode 100644
index 0000000..4bb4d3e
--- /dev/null
+++ b/drivers/acpi/reboot.c
@@ -0,0 +1,45 @@
+
+#include <linux/pci.h>
+#include <acpi/acpi.h>
+
+void acpi_reboot(void)
+{
+	struct acpi_generic_address *rr;
+	struct pci_bus *bus0;
+	u8 reset_value;
+	unsigned int devfn;
+
+	rr = &acpi_gbl_FADT.reset_register;
+
+	/* Is the reset register supported? */
+	if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER) ||
+	    rr->bit_width != 8 || rr->bit_offset != 0)
+		return;
+
+	reset_value = acpi_gbl_FADT.reset_value;
+
+	/* The reset register can only exist in I/O, Memory or PCI config space
+	 * on a device on bus 0. */
+	switch (rr->space_id) {
+		case ACPI_ADR_SPACE_PCI_CONFIG:
+			/* The reset register can only live on bus 0. */
+			bus0 = pci_find_bus(0, 0);
+			if (!bus0)
+				return;
+			/* Form PCI device/function pair. */
+			devfn = PCI_DEVFN((rr->address >> 32) & 0xffff,
+					  (rr->address >> 16) & 0xffff);
+			printk(KERN_DEBUG "Resetting with ACPI PCI RESET_REG.");
+			/* Write the value that resets us. */
+			pci_bus_write_config_byte(bus0, devfn,
+					(rr->address & 0xffff), reset_value);
+			break;
+
+		case ACPI_ADR_SPACE_SYSTEM_MEMORY:
+		case ACPI_ADR_SPACE_SYSTEM_IO:
+			printk(KERN_DEBUG "ACPI MEMORY or I/O RESET_REG.");
+			acpi_hw_low_level_write(8, reset_value, rr);
+			break;
+	}
+}
+
diff --git a/include/acpi/reboot.h b/include/acpi/reboot.h
new file mode 100644
index 0000000..1d8da79
--- /dev/null
+++ b/include/acpi/reboot.h
@@ -0,0 +1,10 @@
+#ifndef __ACPI_REBOOT_H
+#define __ACPI_REBOOT_H
+
+#ifdef CONFIG_ACPI
+extern void acpi_reboot(void);
+#else
+#define acpi_reboot()
+#endif
+
+#endif

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-16 18:00 Aaron Durbin
@ 2007-07-16 18:17 ` Arjan van de Ven
  2007-07-16 18:22   ` Aaron Durbin
  2007-07-17  1:46 ` Shaohua Li
  2007-07-17 11:31 ` Andi Kleen
  2 siblings, 1 reply; 14+ messages in thread
From: Arjan van de Ven @ 2007-07-16 18:17 UTC (permalink / raw)
  To: Aaron Durbin; +Cc: linux-kernel, linux-acpi, len.brown, ak, akpm

On Mon, 2007-07-16 at 11:00 -0700, Aaron Durbin wrote:
> Add the ability to reset the machine using the RESET_REG in ACPI's FADT table.
> 
> Signed-off-by: Aaron Durbin <adurbin@google.com>
> ---
> 
> diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
> index d4336f1..c9906a5 100644
> --- a/drivers/acpi/Makefile
> +++ b/drivers/acpi/Makefile
> @@ -21,7 +21,7 @@ obj-$(CONFIG_X86)		+= blacklist.o
>  #
>  # ACPI Core Subsystem (Interpreter)
>  #
> -obj-y				+= osl.o utils.o \
> +obj-y				+= osl.o utils.o reboot.o \

a one function C file? Can you just stick it in one of the other files
instead?

Greetings,
   Arjan van de Ven


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-16 18:17 ` Arjan van de Ven
@ 2007-07-16 18:22   ` Aaron Durbin
  0 siblings, 0 replies; 14+ messages in thread
From: Aaron Durbin @ 2007-07-16 18:22 UTC (permalink / raw)
  To: Arjan van de Ven; +Cc: linux-kernel, linux-acpi, len.brown, ak, akpm

On 7/16/07, Arjan van de Ven <arjan@infradead.org> wrote:
> On Mon, 2007-07-16 at 11:00 -0700, Aaron Durbin wrote:
> > Add the ability to reset the machine using the RESET_REG in ACPI's FADT table.
> >
> > Signed-off-by: Aaron Durbin <adurbin@google.com>
> > ---
> >
> > diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
> > index d4336f1..c9906a5 100644
> > --- a/drivers/acpi/Makefile
> > +++ b/drivers/acpi/Makefile
> > @@ -21,7 +21,7 @@ obj-$(CONFIG_X86)           += blacklist.o
> >  #
> >  # ACPI Core Subsystem (Interpreter)
> >  #
> > -obj-y                                += osl.o utils.o \
> > +obj-y                                += osl.o utils.o reboot.o \
>
> a one function C file? Can you just stick it in one of the other files
> instead?
>

I originally did not do this because I didn't know the proper place.  Any
suggestions where you would want this?

-Aaron

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-16 18:00 Aaron Durbin
  2007-07-16 18:17 ` Arjan van de Ven
@ 2007-07-17  1:46 ` Shaohua Li
  2007-07-17  2:10   ` Aaron Durbin
  2007-07-17 11:31 ` Andi Kleen
  2 siblings, 1 reply; 14+ messages in thread
From: Shaohua Li @ 2007-07-17  1:46 UTC (permalink / raw)
  To: Aaron Durbin; +Cc: linux-kernel, linux-acpi, Brown, Len, ak, akpm

On Tue, 2007-07-17 at 02:00 +0800, Aaron Durbin wrote:
> 
> Add the ability to reset the machine using the RESET_REG in ACPI's
> FADT table.
We could have another command for 'reboot' kernel command line.

Thanks,
Shaohua

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-17  1:46 ` Shaohua Li
@ 2007-07-17  2:10   ` Aaron Durbin
  0 siblings, 0 replies; 14+ messages in thread
From: Aaron Durbin @ 2007-07-17  2:10 UTC (permalink / raw)
  To: Shaohua Li; +Cc: linux-kernel, linux-acpi, Brown, Len, ak, akpm

On 7/16/07, Shaohua Li <shaohua.li@intel.com> wrote:
> On Tue, 2007-07-17 at 02:00 +0800, Aaron Durbin wrote:
> >
> > Add the ability to reset the machine using the RESET_REG in ACPI's
> > FADT table.
> We could have another command for 'reboot' kernel command line.
>

I did this in a separate patch for x86_64. See

http://www.ussg.iu.edu/hypermail/linux/kernel/0707.2/0319.html
and
http://www.ussg.iu.edu/hypermail/linux/kernel/0707.2/0319.html

-Aaron

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-16 18:00 Aaron Durbin
  2007-07-16 18:17 ` Arjan van de Ven
  2007-07-17  1:46 ` Shaohua Li
@ 2007-07-17 11:31 ` Andi Kleen
  2007-07-17 14:40   ` Yinghai Lu
  2007-07-17 15:08   ` Aaron Durbin
  2 siblings, 2 replies; 14+ messages in thread
From: Andi Kleen @ 2007-07-17 11:31 UTC (permalink / raw)
  To: Aaron Durbin; +Cc: linux-kernel, linux-acpi, len.brown, akpm

On Monday 16 July 2007 20:00:19 Aaron Durbin wrote:
> 
> Add the ability to reset the machine using the RESET_REG in ACPI's FADT table.

Why? I had such a patch at some point as experiment, but it never
helped actually fix a box.

-Andi

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
       [not found] ` <fa.+iOE+OqrQUbecN788fV4aEhLLtg@ifi.uio.no>
@ 2007-07-17 14:39   ` Robert Hancock
  2007-07-17 15:41     ` Andi Kleen
  0 siblings, 1 reply; 14+ messages in thread
From: Robert Hancock @ 2007-07-17 14:39 UTC (permalink / raw)
  To: Andi Kleen; +Cc: Aaron Durbin, linux-kernel, linux-acpi, len.brown, akpm

Andi Kleen wrote:
> On Monday 16 July 2007 20:00:19 Aaron Durbin wrote:
>> Add the ability to reset the machine using the RESET_REG in ACPI's FADT table.
> 
> Why? I had such a patch at some point as experiment, but it never
> helped actually fix a box.

Depends if Windows resets using this method, in that case using it as 
well would likely prevent the steady trickle of machines that seem to 
have trouble with other reset methods and need blacklist entries..

I sometimes think that with these sorts of things where basic 
functionality like reboot is broken, people are too quick to put in 
hacks to make it work and nobody looks into why it works consistently in 
Windows but not in Linux and what we are doing differently..

-- 
Robert Hancock      Saskatoon, SK, Canada
To email, remove "nospam" from hancockr@nospamshaw.ca
Home Page: http://www.roberthancock.com/


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-17 11:31 ` Andi Kleen
@ 2007-07-17 14:40   ` Yinghai Lu
  2007-07-17 15:08     ` Aaron Durbin
  2007-07-17 15:08   ` Aaron Durbin
  1 sibling, 1 reply; 14+ messages in thread
From: Yinghai Lu @ 2007-07-17 14:40 UTC (permalink / raw)
  To: Andi Kleen; +Cc: Aaron Durbin, linux-kernel, linux-acpi, len.brown, akpm

On 7/17/07, Andi Kleen <ak@suse.de> wrote:
> On Monday 16 July 2007 20:00:19 Aaron Durbin wrote:
> >
> > Add the ability to reset the machine using the RESET_REG in ACPI's FADT table.
>
> Why? I had such a patch at some point as experiment, but it never
> helped actually fix a box.
>
system without superio, should still have SMI to simulate one keyboard
controller. So the key board reset still works.

YH

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-17 14:40   ` Yinghai Lu
@ 2007-07-17 15:08     ` Aaron Durbin
  2007-07-17 15:42       ` Andi Kleen
  0 siblings, 1 reply; 14+ messages in thread
From: Aaron Durbin @ 2007-07-17 15:08 UTC (permalink / raw)
  To: Yinghai Lu; +Cc: Andi Kleen, linux-kernel, linux-acpi, len.brown, akpm

On 7/17/07, Yinghai Lu <yhlu.kernel@gmail.com> wrote:
> On 7/17/07, Andi Kleen <ak@suse.de> wrote:
> > On Monday 16 July 2007 20:00:19 Aaron Durbin wrote:
> > >
> > > Add the ability to reset the machine using the RESET_REG in ACPI's FADT table.
> >
> > Why? I had such a patch at some point as experiment, but it never
> > helped actually fix a box.
> >
> system without superio, should still have SMI to simulate one keyboard
> controller. So the key board reset still works.

This is true if SMIs are still flowing, and the SMI handler correctly handles
the reset properly. I have seen cases where the SMI handler is broken which
causes the system to perpetually hang. Utilizing the exposed reset mechanism
in ACPI should reset the system every time. However, if the reset fails it
will fall back to the keyboard controller.

-Aaron

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-17 11:31 ` Andi Kleen
  2007-07-17 14:40   ` Yinghai Lu
@ 2007-07-17 15:08   ` Aaron Durbin
  2007-07-27  6:17     ` Pavel Machek
  1 sibling, 1 reply; 14+ messages in thread
From: Aaron Durbin @ 2007-07-17 15:08 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel, linux-acpi, len.brown, akpm

On 7/17/07, Andi Kleen <ak@suse.de> wrote:
> On Monday 16 July 2007 20:00:19 Aaron Durbin wrote:
> >
> > Add the ability to reset the machine using the RESET_REG in ACPI's FADT table.
>
> Why? I had such a patch at some point as experiment, but it never
> helped actually fix a box.

I have a box here that it fixes, but I also don't see what it hurts. How much
are you against the patch? If the keyboard controller won't work and there are
issues using the triple fault, but if the RESET_REG is setup properly it will
definitely reboot the machine as intended with no ill side effects.

-Aaron

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-17 14:39   ` [PATCH] ACPI: Add reboot mechanism Robert Hancock
@ 2007-07-17 15:41     ` Andi Kleen
  0 siblings, 0 replies; 14+ messages in thread
From: Andi Kleen @ 2007-07-17 15:41 UTC (permalink / raw)
  To: Robert Hancock; +Cc: Aaron Durbin, linux-kernel, linux-acpi, len.brown, akpm

On Tuesday 17 July 2007 16:39:52 Robert Hancock wrote:
> Andi Kleen wrote:
> > On Monday 16 July 2007 20:00:19 Aaron Durbin wrote:
> >> Add the ability to reset the machine using the RESET_REG in ACPI's FADT table.
> > 
> > Why? I had such a patch at some point as experiment, but it never
> > helped actually fix a box.
> 
> Depends if Windows resets using this method,> in that case using it as  
> well would likely prevent the steady trickle of machines that seem to 
> have trouble with other reset methods and need blacklist entries..

It's not that easy -- there are different windows versions out who
do different things. Sometimes systems are built for older windows
versions, sometimes systems are built for newer windows versions.
They don't necessarily work on newer versions.
But people expect Linux to run on all of them.

> I sometimes think that with these sorts of things where basic 
> functionality like reboot is broken, 

I'm not aware of that many systems where reboot doesn't work.
Also I'm sure there are some who don't reboot even in Windows.

Another reason is probably that reboot is quite hard to debug.

One recently new problem is that some systems don't have keyboard
controllers anymore so that method obviously doesn't work. But 
it doesn't hurt to try it first because it's unlikely to break
something

The triple fault fallback is normally quite reliable though.

I would expect that putting the ACPI method in the middle
is probably safe enough.

-Andi

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-17 15:08     ` Aaron Durbin
@ 2007-07-17 15:42       ` Andi Kleen
  2007-07-17 15:47         ` Aaron Durbin
  0 siblings, 1 reply; 14+ messages in thread
From: Andi Kleen @ 2007-07-17 15:42 UTC (permalink / raw)
  To: Aaron Durbin; +Cc: Yinghai Lu, linux-kernel, linux-acpi, len.brown, akpm

On Tuesday 17 July 2007 17:08:19 Aaron Durbin wrote:
 
> This is true if SMIs are still flowing, and the SMI handler correctly handles
> the reset properly. I have seen cases where the SMI handler is broken which
> causes the system to perpetually hang.

Ah, that is the rationale that was missing in the first mail ...
Ok that makes some sense. Is it a common issue? 

-Andi

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-17 15:42       ` Andi Kleen
@ 2007-07-17 15:47         ` Aaron Durbin
  0 siblings, 0 replies; 14+ messages in thread
From: Aaron Durbin @ 2007-07-17 15:47 UTC (permalink / raw)
  To: Andi Kleen; +Cc: Yinghai Lu, linux-kernel, linux-acpi, len.brown, akpm

On 7/17/07, Andi Kleen <ak@suse.de> wrote:
> On Tuesday 17 July 2007 17:08:19 Aaron Durbin wrote:
>
> > This is true if SMIs are still flowing, and the SMI handler correctly handles
> > the reset properly. I have seen cases where the SMI handler is broken which
> > causes the system to perpetually hang.
>
> Ah, that is the rationale that was missing in the first mail ...
> Ok that makes some sense. Is it a common issue?
>

I am not sure in how common it is, but I have access to some machines around
here that are displaying this issue.

-Aaron

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] ACPI: Add reboot mechanism
  2007-07-17 15:08   ` Aaron Durbin
@ 2007-07-27  6:17     ` Pavel Machek
  0 siblings, 0 replies; 14+ messages in thread
From: Pavel Machek @ 2007-07-27  6:17 UTC (permalink / raw)
  To: Aaron Durbin; +Cc: Andi Kleen, linux-kernel, linux-acpi, len.brown, akpm

On Tue 2007-07-17 08:08:24, Aaron Durbin wrote:
> On 7/17/07, Andi Kleen <ak@suse.de> wrote:
> >On Monday 16 July 2007 20:00:19 Aaron Durbin wrote:
> >>
> >> Add the ability to reset the machine using the 
> >RESET_REG in ACPI's FADT table.
> >
> >Why? I had such a patch at some point as experiment, 
> >but it never
> >helped actually fix a box.
> 
> I have a box here that it fixes, but I also don't see 
> what it hurts. How much

What machine is it?
							Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2007-07-27  6:18 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <fa.IMXKKgfBkv/U+MG0xx5sLkpV2Ws@ifi.uio.no>
     [not found] ` <fa.+iOE+OqrQUbecN788fV4aEhLLtg@ifi.uio.no>
2007-07-17 14:39   ` [PATCH] ACPI: Add reboot mechanism Robert Hancock
2007-07-17 15:41     ` Andi Kleen
2007-07-16 18:00 Aaron Durbin
2007-07-16 18:17 ` Arjan van de Ven
2007-07-16 18:22   ` Aaron Durbin
2007-07-17  1:46 ` Shaohua Li
2007-07-17  2:10   ` Aaron Durbin
2007-07-17 11:31 ` Andi Kleen
2007-07-17 14:40   ` Yinghai Lu
2007-07-17 15:08     ` Aaron Durbin
2007-07-17 15:42       ` Andi Kleen
2007-07-17 15:47         ` Aaron Durbin
2007-07-17 15:08   ` Aaron Durbin
2007-07-27  6:17     ` Pavel Machek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox