From: Al Stone al.stone@linaro.org
This series of patches starts with Hanjun's patch to create a kernel config item for CONFIG_ACPI_REDUCED_HARDWARE [0]. Building on that, I then reviewed all of the code that touched any of several fields in the FADT that the OSPM is supposed to ignore when ACPI is in Hardware Reduced mode [1]. Any time there was a use of one of the fields to be ignored, I evaluated whether or not the code was implementing Hardware Reduced mode correctly. Similarly, for each the flags in the FADT flags field that are to be ignored in Hardware Reduced mode, the kernel code was again scanned for proper usage. The remainder of the patches are to fix all of the situations I could find where the kernel would not behave correctly in this ACPI mode.
These seem to work just fine on the RTSM model for ARMv7, both with and without ACPI enabled, and with and without ACPI_REDUCED_HARDWARE enabled; similarly for the FVP model for ARMv8. The patches for ACPI on ARM hardware have been submitted elsewhere but they presume that reduced HW mode is functioning correctly. In the meantime, there's no way I can think of to test all possible scenarios so feedback would be greatly appreciated.
[0] List at https://wiki.linaro.org/LEG/Engineering/Kernel/ACPI/AcpiReducedHw#Section_5:... [1] Please see the ACPI Specification v5.0 for details on Hardware Reduced mode (sections 3.11.1, 4.1, 5.2.9, at a minimum).
Changes for v3: -- Modified enabling ACPI_REDUCED_HARDWARE in ACPICA when using kernel config item CONFIG_ACPI_REDUCED_HARDWARE; now consistent with ACPICA code base where needed -- Enable X86 for CONFIG_ACPI_REDUCED_HARDWARE -- Minimize bus master reload patching -- Remove unneeded patch for dmi_check_system() (was 4/6) -- Correct the patch for removing unneeded map/unmap of FADT fields
Changes for v2: -- Remove patch that was outside of reduced HW mode changes -- Simplify CONFIG_ACPI_REDUCED_HARDWARE in Kconfig -- Simplify use of CONFIG_ACPI_REDUCED_HARDWARE in #ifdefs -- Ensure changelogs are present -- Combine and simplify previous patches 8 & 10
Al Stone (5): ACPI: introduce CONFIG_ACPI_REDUCED_HARDWARE to enable this ACPI mode ACPI: bus master reload not supported in reduced HW mode ACPI: HW reduced mode does not allow use of the FADT sci_interrupt field ACPI: in HW reduced mode, using FADT PM information is not allowed. ACPI: do not map/unmap memory regions for FADT entries in reduced HW mode
drivers/acpi/Kconfig | 8 ++++++++ drivers/acpi/bus.c | 3 ++- drivers/acpi/osl.c | 36 +++++++++++++++++------------------- drivers/acpi/pci_link.c | 2 ++ drivers/acpi/processor_idle.c | 15 +++++++++++++-- include/acpi/platform/aclinux.h | 6 ++++++ 6 files changed, 48 insertions(+), 22 deletions(-)
From: Al Stone al.stone@linaro.org
To enable the hardware reduced mode of ACPI on some platforms (such as ARM), we need to modify the kernel code and set ACPI_REDUCED_HARDWARE to TRUE in the ACPICA source.
This can be done more resonably by introducing a kernel config item to enable/disable ACPI_REDUCED_HARDWARE. We can then change the kernel config instead of having to modify the kernel source directly to enable the reduced hardware mode of ACPI.
Lv Zheng suggested that this configuration item does not belong in ACPICA, the upstream source for much of the ACPI internals, but rather to the Linux kernel itself. Hence, we introduce this flag so that we can make ACPI_REDUCED_HARDWARE configurable. For the details of the discussion, please refer to: http://www.spinics.net/lists/linux-acpi/msg46369.html
Support for X86 in hardware reduced mode is also provided to make it simpler to debug this mode, and to provide for probable use in such products. Hardware reduced mode, despite the name, exists primarily to allow newer platforms to use a much simpler form of ACPI that does not require supporting the legacy of previous versions of the specification, and is likely to be used more often in the near future as a result.
Signed-off-by: Hanjun Guo hanjun.guo@linaro.org Signed-off-by: Al Stone al.stone@linaro.org --- drivers/acpi/Kconfig | 8 ++++++++ include/acpi/platform/aclinux.h | 6 ++++++ 2 files changed, 14 insertions(+)
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index 5d92485..66e6bb2 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig @@ -343,6 +343,14 @@ config ACPI_BGRT data from the firmware boot splash. It will appear under /sys/firmware/acpi/bgrt/ .
+config ACPI_REDUCED_HARDWARE + bool "Hardware-reduced ACPI support" + depends on X86 || ARM || ARM64 + help + This config adds support for Hardware-reduced ACPI. When this option + is selected, will generate a specialized version of ACPICA that ONLY + supports the ACPI "reduced hardware". + source "drivers/acpi/apei/Kconfig"
config ACPI_EXTLOG diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 28f4f4d..a33f502 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h @@ -52,6 +52,12 @@
#ifdef __KERNEL__
+/* Compile for reduced hardware mode if requested for this kernel config */ + +#ifdef CONFIG_ACPI_REDUCED_HARDWARE +#define ACPI_REDUCED_HARDWARE 1 +#endif + #include <linux/string.h> #include <linux/kernel.h> #include <linux/ctype.h>
On Wed, 4 Dec 2013 14:22:03 -0700, al.stone@linaro.org wrote:
From: Al Stone al.stone@linaro.org
To enable the hardware reduced mode of ACPI on some platforms (such as ARM), we need to modify the kernel code and set ACPI_REDUCED_HARDWARE to TRUE in the ACPICA source.
This can be done more resonably by introducing a kernel config item to enable/disable ACPI_REDUCED_HARDWARE. We can then change the kernel config instead of having to modify the kernel source directly to enable the reduced hardware mode of ACPI.
Lv Zheng suggested that this configuration item does not belong in ACPICA, the upstream source for much of the ACPI internals, but rather to the Linux kernel itself. Hence, we introduce this flag so that we can make ACPI_REDUCED_HARDWARE configurable. For the details of the discussion, please refer to: http://www.spinics.net/lists/linux-acpi/msg46369.html
Support for X86 in hardware reduced mode is also provided to make it simpler to debug this mode, and to provide for probable use in such products. Hardware reduced mode, despite the name, exists primarily to allow newer platforms to use a much simpler form of ACPI that does not require supporting the legacy of previous versions of the specification, and is likely to be used more often in the near future as a result.
Signed-off-by: Hanjun Guo hanjun.guo@linaro.org Signed-off-by: Al Stone al.stone@linaro.org
drivers/acpi/Kconfig | 8 ++++++++ include/acpi/platform/aclinux.h | 6 ++++++ 2 files changed, 14 insertions(+)
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index 5d92485..66e6bb2 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig @@ -343,6 +343,14 @@ config ACPI_BGRT data from the firmware boot splash. It will appear under /sys/firmware/acpi/bgrt/ . +config ACPI_REDUCED_HARDWARE
- bool "Hardware-reduced ACPI support"
- depends on X86 || ARM || ARM64
Why wouldn't this simply depend on ACPI?
- help
- This config adds support for Hardware-reduced ACPI. When this option
- is selected, will generate a specialized version of ACPICA that ONLY
- supports the ACPI "reduced hardware".
source "drivers/acpi/apei/Kconfig" config ACPI_EXTLOG diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 28f4f4d..a33f502 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h @@ -52,6 +52,12 @@ #ifdef __KERNEL__ +/* Compile for reduced hardware mode if requested for this kernel config */
+#ifdef CONFIG_ACPI_REDUCED_HARDWARE +#define ACPI_REDUCED_HARDWARE 1 +#endif
#include <linux/string.h> #include <linux/kernel.h>
#include <linux/ctype.h>
1.8.3.1
Linaro-acpi mailing list Linaro-acpi@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-acpi
On Wed, 4 Dec 2013 14:22:03 -0700, al.stone@linaro.org wrote:
From: Al Stone al.stone@linaro.org
To enable the hardware reduced mode of ACPI on some platforms (such as ARM), we need to modify the kernel code and set ACPI_REDUCED_HARDWARE to TRUE in the ACPICA source.
This can be done more resonably by introducing a kernel config item to enable/disable ACPI_REDUCED_HARDWARE. We can then change the kernel config instead of having to modify the kernel source directly to enable the reduced hardware mode of ACPI.
Lv Zheng suggested that this configuration item does not belong in ACPICA, the upstream source for much of the ACPI internals, but rather to the Linux kernel itself. Hence, we introduce this flag so that we can make ACPI_REDUCED_HARDWARE configurable. For the details of the discussion, please refer to: http://www.spinics.net/lists/linux-acpi/msg46369.html
Support for X86 in hardware reduced mode is also provided to make it simpler to debug this mode, and to provide for probable use in such products. Hardware reduced mode, despite the name, exists primarily to allow newer platforms to use a much simpler form of ACPI that does not require supporting the legacy of previous versions of the specification, and is likely to be used more often in the near future as a result.
Signed-off-by: Hanjun Guo hanjun.guo@linaro.org Signed-off-by: Al Stone al.stone@linaro.org
drivers/acpi/Kconfig | 8 ++++++++ include/acpi/platform/aclinux.h | 6 ++++++ 2 files changed, 14 insertions(+)
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index 5d92485..66e6bb2 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig @@ -343,6 +343,14 @@ config ACPI_BGRT data from the firmware boot splash. It will appear under /sys/firmware/acpi/bgrt/ . +config ACPI_REDUCED_HARDWARE
- bool "Hardware-reduced ACPI support"
- depends on X86 || ARM || ARM64
- help
- This config adds support for Hardware-reduced ACPI. When this option
- is selected, will generate a specialized version of ACPICA that ONLY
- supports the ACPI "reduced hardware".
source "drivers/acpi/apei/Kconfig" config ACPI_EXTLOG diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 28f4f4d..a33f502 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h @@ -52,6 +52,12 @@ #ifdef __KERNEL__ +/* Compile for reduced hardware mode if requested for this kernel config */
+#ifdef CONFIG_ACPI_REDUCED_HARDWARE +#define ACPI_REDUCED_HARDWARE 1 +#endif
Will this change the way ACPICA is compiled? Will it disable non-hardware-reduced mode? If so, then this is a big problem. Enabling the hardware reduced feature should *not* break normal ACPI usage.
g.
On 2013年12月10日 20:37, Grant Likely wrote:
On Wed, 4 Dec 2013 14:22:03 -0700, al.stone@linaro.org wrote:
From: Al Stone al.stone@linaro.org
To enable the hardware reduced mode of ACPI on some platforms (such as ARM), we need to modify the kernel code and set ACPI_REDUCED_HARDWARE to TRUE in the ACPICA source.
This can be done more resonably by introducing a kernel config item to enable/disable ACPI_REDUCED_HARDWARE. We can then change the kernel config instead of having to modify the kernel source directly to enable the reduced hardware mode of ACPI.
Lv Zheng suggested that this configuration item does not belong in ACPICA, the upstream source for much of the ACPI internals, but rather to the Linux kernel itself. Hence, we introduce this flag so that we can make ACPI_REDUCED_HARDWARE configurable. For the details of the discussion, please refer to: http://www.spinics.net/lists/linux-acpi/msg46369.html
Support for X86 in hardware reduced mode is also provided to make it simpler to debug this mode, and to provide for probable use in such products. Hardware reduced mode, despite the name, exists primarily to allow newer platforms to use a much simpler form of ACPI that does not require supporting the legacy of previous versions of the specification, and is likely to be used more often in the near future as a result.
Signed-off-by: Hanjun Guo hanjun.guo@linaro.org Signed-off-by: Al Stone al.stone@linaro.org
drivers/acpi/Kconfig | 8 ++++++++ include/acpi/platform/aclinux.h | 6 ++++++ 2 files changed, 14 insertions(+)
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index 5d92485..66e6bb2 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig @@ -343,6 +343,14 @@ config ACPI_BGRT data from the firmware boot splash. It will appear under /sys/firmware/acpi/bgrt/ . +config ACPI_REDUCED_HARDWARE
- bool "Hardware-reduced ACPI support"
- depends on X86 || ARM || ARM64
- help
- This config adds support for Hardware-reduced ACPI. When this option
- is selected, will generate a specialized version of ACPICA that ONLY
- supports the ACPI "reduced hardware".
- source "drivers/acpi/apei/Kconfig"
config ACPI_EXTLOG diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 28f4f4d..a33f502 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h @@ -52,6 +52,12 @@ #ifdef __KERNEL__ +/* Compile for reduced hardware mode if requested for this kernel config */
+#ifdef CONFIG_ACPI_REDUCED_HARDWARE +#define ACPI_REDUCED_HARDWARE 1 +#endif
Will this change the way ACPICA is compiled? Will it disable non-hardware-reduced mode?
Both yes. ACPICA supports reduced hardware mode when ACPI_REDUCED_HARWARE is TRUE at compile time. There is no way to support both normal ACPI and hardware reduced ACPI with single binary image for now.
If so, then this is a big problem. Enabling the hardware reduced feature should *not* break normal ACPI usage.
It will break normal ACPI usage but it is ok I think. Since lots of features are not supported in the hardware in hardware reduced mode, and normal ACPI will not run probably such as leading kernel panic when refer to some registers which are not exist on reduced hardware, we should introduce this kernel config and modify the ACPI drivers to avoid such failures.
Thanks Hanjun
Hi Hanjun,
Okay, so after talking with Al and Graeme on IRC, I think I understand what is going on. The fact that ACPICA doesn't allow for both normal and hardware reduced support in the same build is a very big problem. However, it isn't a problem for ARM since we'll never support non-hardware reduced mode. The x86 folks need to work that out when/if they ever add support for hardware reduced mode.
So I would say the thing to do is only allow hardware reduced mode to be enabled on ARM, and make it ultra clear in the config text that it cannot be supported on x86 before ACPICA is fixed.
g.
On Tue, 10 Dec 2013 23:05:03 +0800, Hanjun Guo hanjun.guo@linaro.org wrote:
On 2013年12月10日 20:37, Grant Likely wrote:
On Wed, 4 Dec 2013 14:22:03 -0700, al.stone@linaro.org wrote:
From: Al Stone al.stone@linaro.org
To enable the hardware reduced mode of ACPI on some platforms (such as ARM), we need to modify the kernel code and set ACPI_REDUCED_HARDWARE to TRUE in the ACPICA source.
This can be done more resonably by introducing a kernel config item to enable/disable ACPI_REDUCED_HARDWARE. We can then change the kernel config instead of having to modify the kernel source directly to enable the reduced hardware mode of ACPI.
Lv Zheng suggested that this configuration item does not belong in ACPICA, the upstream source for much of the ACPI internals, but rather to the Linux kernel itself. Hence, we introduce this flag so that we can make ACPI_REDUCED_HARDWARE configurable. For the details of the discussion, please refer to: http://www.spinics.net/lists/linux-acpi/msg46369.html
Support for X86 in hardware reduced mode is also provided to make it simpler to debug this mode, and to provide for probable use in such products. Hardware reduced mode, despite the name, exists primarily to allow newer platforms to use a much simpler form of ACPI that does not require supporting the legacy of previous versions of the specification, and is likely to be used more often in the near future as a result.
Signed-off-by: Hanjun Guo hanjun.guo@linaro.org Signed-off-by: Al Stone al.stone@linaro.org
drivers/acpi/Kconfig | 8 ++++++++ include/acpi/platform/aclinux.h | 6 ++++++ 2 files changed, 14 insertions(+)
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index 5d92485..66e6bb2 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig @@ -343,6 +343,14 @@ config ACPI_BGRT data from the firmware boot splash. It will appear under /sys/firmware/acpi/bgrt/ . +config ACPI_REDUCED_HARDWARE
- bool "Hardware-reduced ACPI support"
- depends on X86 || ARM || ARM64
- help
- This config adds support for Hardware-reduced ACPI. When this option
- is selected, will generate a specialized version of ACPICA that ONLY
- supports the ACPI "reduced hardware".
- source "drivers/acpi/apei/Kconfig"
config ACPI_EXTLOG diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 28f4f4d..a33f502 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h @@ -52,6 +52,12 @@ #ifdef __KERNEL__ +/* Compile for reduced hardware mode if requested for this kernel config */
+#ifdef CONFIG_ACPI_REDUCED_HARDWARE +#define ACPI_REDUCED_HARDWARE 1 +#endif
Will this change the way ACPICA is compiled? Will it disable non-hardware-reduced mode?
Both yes. ACPICA supports reduced hardware mode when ACPI_REDUCED_HARWARE is TRUE at compile time. There is no way to support both normal ACPI and hardware reduced ACPI with single binary image for now.
If so, then this is a big problem. Enabling the hardware reduced feature should *not* break normal ACPI usage.
It will break normal ACPI usage but it is ok I think. Since lots of features are not supported in the hardware in hardware reduced mode, and normal ACPI will not run probably such as leading kernel panic when refer to some registers which are not exist on reduced hardware, we should introduce this kernel config and modify the ACPI drivers to avoid such failures.
Thanks Hanjun
On Tue, Dec 10, 2013 at 4:49 PM, Grant Likely grant.likely@secretlab.ca wrote:
Hi Hanjun,
Okay, so after talking with Al and Graeme on IRC, I think I understand what is going on. The fact that ACPICA doesn't allow for both normal and hardware reduced support in the same build is a very big problem. However, it isn't a problem for ARM since we'll never support non-hardware reduced mode. The x86 folks need to work that out when/if they ever add support for hardware reduced mode.
I believe SMBIOS/DMI tables are only part of full ACPI, so there is a need on ARM for more than hardware reduced mode.
Rob
On Tue, Dec 10, 2013 at 08:06:08PM -0600, Rob Herring wrote:
On Tue, Dec 10, 2013 at 4:49 PM, Grant Likely grant.likely@secretlab.ca wrote:
Hi Hanjun,
Okay, so after talking with Al and Graeme on IRC, I think I understand what is going on. The fact that ACPICA doesn't allow for both normal and hardware reduced support in the same build is a very big problem. However, it isn't a problem for ARM since we'll never support non-hardware reduced mode. The x86 folks need to work that out when/if they ever add support for hardware reduced mode.
I believe SMBIOS/DMI tables are only part of full ACPI, so there is a need on ARM for more than hardware reduced mode.
You seem to be crossing the streams here, SMBIOS/DMI are not part of ACPI.
The only mention I can even find of them in the spec is you can cross reference memory to its SMBIOS handle. Which is optional. It even says OSPM will not use this value.
Graeme
On 12/10/2013 03:49 PM, Grant Likely wrote:
Hi Hanjun,
Okay, so after talking with Al and Graeme on IRC, I think I understand what is going on. The fact that ACPICA doesn't allow for both normal and hardware reduced support in the same build is a very big problem. However, it isn't a problem for ARM since we'll never support non-hardware reduced mode. The x86 folks need to work that out when/if they ever add support for hardware reduced mode.
So I would say the thing to do is only allow hardware reduced mode to be enabled on ARM, and make it ultra clear in the config text that it cannot be supported on x86 before ACPICA is fixed.
g.
Agreed. Will make it so in the next version.
On Tue, 10 Dec 2013 23:05:03 +0800, Hanjun Guo hanjun.guo@linaro.org wrote:
On 2013年12月10日 20:37, Grant Likely wrote:
On Wed, 4 Dec 2013 14:22:03 -0700, al.stone@linaro.org wrote:
From: Al Stone al.stone@linaro.org
To enable the hardware reduced mode of ACPI on some platforms (such as ARM), we need to modify the kernel code and set ACPI_REDUCED_HARDWARE to TRUE in the ACPICA source.
This can be done more resonably by introducing a kernel config item to enable/disable ACPI_REDUCED_HARDWARE. We can then change the kernel config instead of having to modify the kernel source directly to enable the reduced hardware mode of ACPI.
Lv Zheng suggested that this configuration item does not belong in ACPICA, the upstream source for much of the ACPI internals, but rather to the Linux kernel itself. Hence, we introduce this flag so that we can make ACPI_REDUCED_HARDWARE configurable. For the details of the discussion, please refer to: http://www.spinics.net/lists/linux-acpi/msg46369.html
Support for X86 in hardware reduced mode is also provided to make it simpler to debug this mode, and to provide for probable use in such products. Hardware reduced mode, despite the name, exists primarily to allow newer platforms to use a much simpler form of ACPI that does not require supporting the legacy of previous versions of the specification, and is likely to be used more often in the near future as a result.
Signed-off-by: Hanjun Guo hanjun.guo@linaro.org Signed-off-by: Al Stone al.stone@linaro.org
drivers/acpi/Kconfig | 8 ++++++++ include/acpi/platform/aclinux.h | 6 ++++++ 2 files changed, 14 insertions(+)
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index 5d92485..66e6bb2 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig @@ -343,6 +343,14 @@ config ACPI_BGRT data from the firmware boot splash. It will appear under /sys/firmware/acpi/bgrt/ .
+config ACPI_REDUCED_HARDWARE
bool "Hardware-reduced ACPI support"
depends on X86 || ARM || ARM64
help
This config adds support for Hardware-reduced ACPI. When this option
is selected, will generate a specialized version of ACPICA that ONLY
supports the ACPI "reduced hardware".
source "drivers/acpi/apei/Kconfig"
config ACPI_EXTLOG
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 28f4f4d..a33f502 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h @@ -52,6 +52,12 @@
#ifdef __KERNEL__
+/* Compile for reduced hardware mode if requested for this kernel config */
+#ifdef CONFIG_ACPI_REDUCED_HARDWARE +#define ACPI_REDUCED_HARDWARE 1 +#endif
Will this change the way ACPICA is compiled? Will it disable non-hardware-reduced mode?
Both yes. ACPICA supports reduced hardware mode when ACPI_REDUCED_HARWARE is TRUE at compile time. There is no way to support both normal ACPI and hardware reduced ACPI with single binary image for now.
If so, then this is a big problem. Enabling the hardware reduced feature should *not* break normal ACPI usage.
It will break normal ACPI usage but it is ok I think. Since lots of features are not supported in the hardware in hardware reduced mode, and normal ACPI will not run probably such as leading kernel panic when refer to some registers which are not exist on reduced hardware, we should introduce this kernel config and modify the ACPI drivers to avoid such failures.
Thanks Hanjun
From: Al Stone al.stone@linaro.org
Remove the saving and restoring of bus master reload registers in suspend/resume when in reduced HW mode; according to the spec, no such registers should exist
Signed-off-by: Al Stone al.stone@linaro.org --- drivers/acpi/processor_idle.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 597cdab..8b48c08 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c @@ -202,7 +202,7 @@ static void lapic_timer_state_broadcast(struct acpi_processor *pr,
#endif
-#ifdef CONFIG_PM_SLEEP +#if (IS_ENABLED(CONFIG_PM_SLEEP) && !IS_ENABLED(CONFIG_ACPI_REDUCED_HARDWARE)) static u32 saved_bm_rld;
static int acpi_processor_suspend(void) @@ -236,7 +236,10 @@ void acpi_processor_syscore_exit(void) { unregister_syscore_ops(&acpi_processor_syscore_ops); } -#endif /* CONFIG_PM_SLEEP */ +#else +void acpi_processor_syscore_init(void) { return; } +void acpi_processor_syscore_exit(void) { return; } +#endif
#if defined(CONFIG_X86) static void tsc_check_state(int state)
On Wed, 4 Dec 2013 14:22:04 -0700, al.stone@linaro.org wrote:
From: Al Stone al.stone@linaro.org
Remove the saving and restoring of bus master reload registers in suspend/resume when in reduced HW mode; according to the spec, no such registers should exist
Signed-off-by: Al Stone al.stone@linaro.org
drivers/acpi/processor_idle.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 597cdab..8b48c08 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c @@ -202,7 +202,7 @@ static void lapic_timer_state_broadcast(struct acpi_processor *pr, #endif -#ifdef CONFIG_PM_SLEEP +#if (IS_ENABLED(CONFIG_PM_SLEEP) && !IS_ENABLED(CONFIG_ACPI_REDUCED_HARDWARE)) static u32 saved_bm_rld; static int acpi_processor_suspend(void) @@ -236,7 +236,10 @@ void acpi_processor_syscore_exit(void) { unregister_syscore_ops(&acpi_processor_syscore_ops); } -#endif /* CONFIG_PM_SLEEP */ +#else +void acpi_processor_syscore_init(void) { return; } +void acpi_processor_syscore_exit(void) { return; } +#endif
Ditto comment on this patch. This breaks normal ACPI on x86 if hardware reduced is enabled. That is bad form. It is fine to compile it out if normal ACPI is explicitly /disabled/, but it must be possible for normal and hardware reduced to co-exist.
g.
From: Al Stone al.stone@linaro.org
In HW reduced mode, the use of the SCI interrupt is not allowed. In all those places that use the FADT sci_interrupt field, remove that usage when in HW reduced mode.
In the case of acpi_os_install_interrupt_handler() in osl.c, this allows us to open up the routine to installing interrupt handlers other than acpi_gbl_FADT.sci_interrupt regardless of whether we are in ACPI legacy mode or reduced HW mode; acpi_os_remove_interrupt_handler() changes to maintain symmetry.
The function acpi_reserve_resources() is not stubbed but removed to quiet a compiler warning about an unused function when using ACPI reduced hardware mode.
Signed-off-by: Al Stone al.stone@linaro.org --- drivers/acpi/bus.c | 3 ++- drivers/acpi/osl.c | 16 +++++----------- drivers/acpi/pci_link.c | 2 ++ 3 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index bba9b72..de3a259 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -541,7 +541,8 @@ void __init acpi_early_init(void) goto error0; }
-#ifdef CONFIG_X86 +#ifndef CONFIG_ACPI_REDUCED_HARDWARE + /* NOTE: in HW reduced mode, FADT sci_interrupt has no meaning */ if (!acpi_ioapic) { /* compatible (0) means level (3) */ if (!(acpi_sci_flags & ACPI_MADT_TRIGGER_MASK)) { diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 44c07eb..613e4a1 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -84,6 +84,7 @@ static int (*__acpi_os_prepare_extended_sleep)(u8 sleep_state, u32 val_a,
static acpi_osd_handler acpi_irq_handler; static void *acpi_irq_context; +static u32 acpi_irq_number; static struct workqueue_struct *kacpid_wq; static struct workqueue_struct *kacpi_notify_wq; static struct workqueue_struct *kacpi_hotplug_wq; @@ -159,6 +160,7 @@ static u32 acpi_osi_handler(acpi_string interface, u32 supported) return supported; }
+#ifndef CONFIG_ACPI_REDUCED_HARDWARE static void __init acpi_request_region (struct acpi_generic_address *gas, unsigned int length, char *desc) { @@ -209,6 +211,7 @@ static int __init acpi_reserve_resources(void) return 0; } device_initcall(acpi_reserve_resources); +#endif
void acpi_os_printf(const char *fmt, ...) { @@ -795,13 +798,6 @@ acpi_os_install_interrupt_handler(u32 gsi, acpi_osd_handler handler,
acpi_irq_stats_init();
- /* - * ACPI interrupts different from the SCI in our copy of the FADT are - * not supported. - */ - if (gsi != acpi_gbl_FADT.sci_interrupt) - return AE_BAD_PARAMETER; - if (acpi_irq_handler) return AE_ALREADY_ACQUIRED;
@@ -818,15 +814,13 @@ acpi_os_install_interrupt_handler(u32 gsi, acpi_osd_handler handler, acpi_irq_handler = NULL; return AE_NOT_ACQUIRED; } + acpi_irq_number = irq;
return AE_OK; }
acpi_status acpi_os_remove_interrupt_handler(u32 irq, acpi_osd_handler handler) { - if (irq != acpi_gbl_FADT.sci_interrupt) - return AE_BAD_PARAMETER; - free_irq(irq, acpi_irq); acpi_irq_handler = NULL;
@@ -1806,7 +1800,7 @@ acpi_status __init acpi_os_initialize1(void) acpi_status acpi_os_terminate(void) { if (acpi_irq_handler) { - acpi_os_remove_interrupt_handler(acpi_gbl_FADT.sci_interrupt, + acpi_os_remove_interrupt_handler(acpi_irq_number, acpi_irq_handler); }
diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c index 2652a61..d5c155e 100644 --- a/drivers/acpi/pci_link.c +++ b/drivers/acpi/pci_link.c @@ -505,6 +505,8 @@ int __init acpi_irq_penalty_init(void) } } /* Add a penalty for the SCI */ + if (acpi_gbl_reduced_hardware) + return 0; acpi_irq_penalty[acpi_gbl_FADT.sci_interrupt] += PIRQ_PENALTY_PCI_USING; return 0; }
From: Al Stone al.stone@linaro.org
Per the ACPI 5.0 specification, section 5.2.9, none of the power management fields in the FADT are to be used. Short-circuit using any of those fields in acpi_processor_get_power_info_fadt().
Signed-off-by: Al Stone al.stone@linaro.org --- drivers/acpi/processor_idle.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 8b48c08..a419fcb 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c @@ -271,6 +271,14 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) if (!pr->pblk) return -ENODEV;
+ /* + * Using power management information from the FADT is not + * allowed when in HW reduced mode. See ACPI 5.0, section + * 5.2.9. + */ + if (acpi_gbl_reduced_hardware) + return -ENODEV; + /* if info is obtained from pblk/fadt, type equals state */ pr->power.states[ACPI_STATE_C2].type = ACPI_STATE_C2; pr->power.states[ACPI_STATE_C3].type = ACPI_STATE_C3;
From: Al Stone al.stone@linaro.org
Several of the FADT fields are normally kept in specific memory regions. Since these fields are to be ignored in hardware reduced ACPI mode, do not map those addresses when in that mode, and of course do not release the mappings that have not been made.
The function acpi_os_initialize() could become a stub in the header file but is left here in case it can be of further use.
Signed-off-by: Al Stone al.stone@linaro.org --- drivers/acpi/osl.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 613e4a1..3a0bb92 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -1776,10 +1776,12 @@ __setup("acpi_no_auto_ssdt", acpi_no_auto_ssdt_setup);
acpi_status __init acpi_os_initialize(void) { - acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1a_event_block); - acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1b_event_block); - acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe0_block); - acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe1_block); + if (!acpi_gbl_reduced_hardware) { + acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1a_event_block); + acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1b_event_block); + acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe0_block); + acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe1_block); + }
return AE_OK; } @@ -1804,10 +1806,12 @@ acpi_status acpi_os_terminate(void) acpi_irq_handler); }
- acpi_os_unmap_generic_address(&acpi_gbl_FADT.xgpe1_block); - acpi_os_unmap_generic_address(&acpi_gbl_FADT.xgpe0_block); - acpi_os_unmap_generic_address(&acpi_gbl_FADT.xpm1b_event_block); - acpi_os_unmap_generic_address(&acpi_gbl_FADT.xpm1a_event_block); + if (!acpi_gbl_reduced_hardware) { + acpi_os_unmap_generic_address(&acpi_gbl_FADT.xgpe1_block); + acpi_os_unmap_generic_address(&acpi_gbl_FADT.xgpe0_block); + acpi_os_unmap_generic_address(&acpi_gbl_FADT.xpm1b_event_block); + acpi_os_unmap_generic_address(&acpi_gbl_FADT.xpm1a_event_block); + }
destroy_workqueue(kacpid_wq); destroy_workqueue(kacpi_notify_wq);
On Wed, 4 Dec 2013 14:22:07 -0700, al.stone@linaro.org wrote:
From: Al Stone al.stone@linaro.org
Several of the FADT fields are normally kept in specific memory regions. Since these fields are to be ignored in hardware reduced ACPI mode, do not map those addresses when in that mode, and of course do not release the mappings that have not been made.
The function acpi_os_initialize() could become a stub in the header file but is left here in case it can be of further use.
Signed-off-by: Al Stone al.stone@linaro.org
drivers/acpi/osl.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 613e4a1..3a0bb92 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -1776,10 +1776,12 @@ __setup("acpi_no_auto_ssdt", acpi_no_auto_ssdt_setup); acpi_status __init acpi_os_initialize(void) {
- acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1a_event_block);
- acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1b_event_block);
- acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe0_block);
- acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe1_block);
- if (!acpi_gbl_reduced_hardware) {
acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1a_event_block);
acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1b_event_block);
acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe0_block);
acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe1_block);
- }
So, I'm confused. This patch is making the hardware reduced decision at runtime (which is good), but the other patches are using #ifdef blocks to take the code right out. Why the discrepancy?
g.
linaro-kernel@lists.linaro.org