In acpi_bus_register_driver(), there is an if (acpi_disabled) check,
so the if(acpi_disabled) before it is reduplicate, remove it.
Signed-off-by: Hanjun Guo <hanjun.guo(a)linaro.org>
---
drivers/staging/quickstart/quickstart.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/staging/quickstart/quickstart.c b/drivers/staging/quickstart/quickstart.c
index 4247d60..9f6ebdb 100644
--- a/drivers/staging/quickstart/quickstart.c
+++ b/drivers/staging/quickstart/quickstart.c
@@ -390,10 +390,6 @@ static int __init quickstart_init(void)
{
int ret;
- /* ACPI Check */
- if (acpi_disabled)
- return -ENODEV;
-
/* ACPI driver register */
ret = acpi_bus_register_driver(&quickstart_acpi_driver);
if (ret)
--
1.7.9.5
"APIC" should be "ACPI" here.
Signed-off-by: Hanjun Guo <hanjun.guo(a)linaro.org>
---
drivers/acpi/scan.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index fbdb82e..611ce90 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1121,7 +1121,7 @@ int acpi_bus_register_driver(struct acpi_driver *driver)
EXPORT_SYMBOL(acpi_bus_register_driver);
/**
- * acpi_bus_unregister_driver - unregisters a driver with the APIC bus
+ * acpi_bus_unregister_driver - unregisters a driver with the ACPI bus
* @driver: driver to unregister
*
* Unregisters a driver with the ACPI bus. Searches the namespace for all
--
1.7.9.5
From: Al Stone <ahs3(a)redhat.com>
This series of patches first sets up the efi_map_regions()
function, which is in turn used by setup_arch() to initialize
ACPI tables loaded from RAM. For this to work properly, there
were bugs to be fixed in both the EFI and ACPI code; these
fixes get the two to agree on where the ACPI data is in RAM,
and how it is to be addressed at early boot.
Al Stone (4):
ARM: EFI: make efi_remap_regions() visible for use in setup_arch()
ARM: ACPI: insert WARN_ON to make error condition more obvious
ARM: clean up the io.h header file
ACPI: ARM: use the correct ioremap sequence when loading and using
ACPI data
arch/arm/include/asm/efi.h | 1 +
arch/arm/include/asm/io.h | 9 ++-------
arch/arm/kernel/efi.c | 31 +++++++++++++++++++++++--------
arch/arm/kernel/setup.c | 9 ++++++---
drivers/acpi/acpica/tbxface.c | 1 +
drivers/acpi/osl.c | 12 ++++++------
drivers/acpi/plat/arm/boot.c | 19 +++++++------------
include/linux/acpi.h | 2 +-
include/linux/acpi_io.h | 4 ++++
9 files changed, 51 insertions(+), 37 deletions(-)
--
1.8.3.1
This patch set convert PMU driver to ACPI for ARMv8 arch. Despite driver is
initialized in early boot stage, no ACPI related actions are taken then. All PMU
resources coming from ACPI tables are use by others units once bus is enumerated.
Changes for v2:
- remove MODULE_DEVICE_TABLE macro since perf_event is not kernel module
Tomasz Nowicki (3):
ACPI, ARMv8: Whitelist armv8-pmu driver for ACPI.
armv8, dts: Move device resources to DSTD ACPI table.
armv8, pmu: Add the match table and pointers for ACPI probing to the
driver.
arch/arm64/boot/dts/foundation-v8-acpi.dts | 4 ++++
arch/arm64/boot/dts/rtsm_ve-aemv8a-acpi.dts | 4 ++++
arch/arm64/kernel/perf_event.c | 13 +++++++++++++
drivers/acpi/acpi_platform.c | 1 +
4 files changed, 22 insertions(+)
--
1.7.9.5
On hardware reduced platforms, there is no support for the following:
- PM Event and Control registers
- SCI interrupt (and handler)
- Fixed Events
- General Purpose Events (GPEs)
- Global Lock
- ACPI PM timer
- FACS table (Waking vectors and Global Lock)
acpi_gbl_reduced_hardware is a global flag and can be used to prevent
misbehavior on hardware reduced platforms, and this flag is initialized at
the very beginning of the system boot when FADT is parsed, this flag is set
to 1 when the FACP Hardware Reduced flag is set, so we can use it to prevent
accessing registers which do not exist on reduced hardware platform.
but when FACP Hardware Reduced flag is set, ACPI drivers will still access
some registers directly which do not exist on reduced hardware platform
and cause boot failure:
[ 9.024370] Unable to handle kernel paging request at virtual address ffffffbffbe00001
[ 9.024423] pgd = ffffffc00007d000
[ 9.024468] [ffffffbffbe00001] *pgd=000000008007f003, *pmd=0000000000000000
[ 9.024538] Internal error: Oops: 96000006 [#1] SMP
[ 9.024577] Modules linked in:
[ 9.024627] CPU: 0 Not tainted (3.9.0+ #3)
[ 9.024691] PC is at acpi_os_read_port+0x58/0xc8
[ 9.024753] LR is at acpi_hw_read_port+0x4c/0xc4
[ 9.024810] pc : [<ffffffc0002810cc>] lr : [<ffffffc0002a4fc4>] pstate: 600003c5
....
[ 9.031956] Call trace:
[ 9.032021] [<ffffffc0002810cc>] acpi_os_read_port+0x58/0xc8
[ 9.032094] [<ffffffc0002a4fc4>] acpi_hw_read_port+0x4c/0xc4
[ 9.032165] [<ffffffc0002a4198>] acpi_hw_read+0x6c/0x100
[ 9.032237] [<ffffffc0002a4250>] acpi_hw_read_multiple+0x24/0x70
[ 9.032312] [<ffffffc0002a457c>] acpi_hw_register_read+0xa8/0x164
[ 9.032386] [<ffffffc0002a52dc>] acpi_write_bit_register+0x9c/0x194
[ 9.032472] [<ffffffc0002bffb4>] acpi_processor_get_power_info+0x6c4/0x748
[ 9.032550] [<ffffffc000565220>] acpi_processor_power_init+0xac/0x138
[ 9.032630] [<ffffffc0003f3c00>] acpi_processor_start+0x48/0x138
[ 9.032704] [<ffffffc000565118>] acpi_processor_add+0x43c/0x498
[ 9.032784] [<ffffffc000283a74>] acpi_device_probe+0x3c/0x198
[ 9.032862] [<ffffffc0002ef0fc>] driver_probe_device+0x90/0x348
[ 9.032940] [<ffffffc0002ef450>] __driver_attach+0x9c/0xa0
[ 9.033015] [<ffffffc0002ed40c>] bus_for_each_dev+0x4c/0x8c
[ 9.033090] [<ffffffc0002eeb98>] driver_attach+0x20/0x28
[ 9.033166] [<ffffffc0002ee6e0>] bus_add_driver+0xfc/0x254
[ 9.033244] [<ffffffc0002ef8b0>] driver_register+0x6c/0x184
[ 9.033325] [<ffffffc000284894>] acpi_bus_register_driver+0x34/0x44
[ 9.033400] [<ffffffc000559c60>] acpi_processor_init+0x28/0x40
[ 9.033469] [<ffffffc000081438>] do_one_initcall+0x100/0x138
[ 9.033544] [<ffffffc0005448c8>] kernel_init_freeable+0x128/0x1cc
[ 9.033620] [<ffffffc0003f2f90>] kernel_init+0x10/0xcc
[ 9.033700] Code: d2bf7c02 f2dff7e2 f2ffffe2 8b020000 (79400000)
[ 9.033843] ---[ end trace 64376967e6bc20a9 ]---
[ 9.033995] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
So acpi_gbl_reduced_hardware should be used to check if reduced hardware or
not, if it is reduced hardware, just return with some error and do not access
the no-existent registers.
Signed-off-by: Hanjun Guo <hanjun.guo(a)linaro.org>
---
drivers/acpi/acpica/hwregs.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/acpi/acpica/hwregs.c b/drivers/acpi/acpica/hwregs.c
index 8d2e866..4c270c3 100644
--- a/drivers/acpi/acpica/hwregs.c
+++ b/drivers/acpi/acpica/hwregs.c
@@ -265,6 +265,11 @@ acpi_status acpi_hw_clear_acpi_status(void)
ACPI_FUNCTION_TRACE(hw_clear_acpi_status);
+ /* If Hardware Reduced flag is set, there are no GPEs */
+ if (acpi_gbl_reduced_hardware) {
+ return_ACPI_STATUS(AE_NOT_IMPLEMENTED);
+ }
+
ACPI_DEBUG_PRINT((ACPI_DB_IO, "About to write %04X to %8.8X%8.8X\n",
ACPI_BITMASK_ALL_FIXED_STATUS,
ACPI_FORMAT_UINT64(acpi_gbl_xpm1a_status.address)));
@@ -305,6 +310,10 @@ struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id)
{
ACPI_FUNCTION_ENTRY();
+ if (acpi_gbl_reduced_hardware) {
+ return (NULL);
+ }
+
if (register_id > ACPI_BITREG_MAX) {
ACPI_ERROR((AE_INFO, "Invalid BitRegister ID: 0x%X",
register_id));
@@ -337,6 +346,11 @@ acpi_status acpi_hw_write_pm1_control(u32 pm1a_control, u32 pm1b_control)
ACPI_FUNCTION_TRACE(hw_write_pm1_control);
+ /* If Hardware Reduced flag is set, there are no PM Control registers */
+ if (acpi_gbl_reduced_hardware) {
+ return_ACPI_STATUS(AE_NOT_IMPLEMENTED);
+ }
+
status =
acpi_hw_write(pm1a_control, &acpi_gbl_FADT.xpm1a_control_block);
if (ACPI_FAILURE(status)) {
@@ -370,6 +384,11 @@ acpi_status acpi_hw_register_read(u32 register_id, u32 *return_value)
ACPI_FUNCTION_TRACE(hw_register_read);
+ /* If Hardware Reduced flag is set, there are no PM Control registers */
+ if (acpi_gbl_reduced_hardware) {
+ return_ACPI_STATUS(AE_NOT_IMPLEMENTED);
+ }
+
switch (register_id) {
case ACPI_REGISTER_PM1_STATUS: /* PM1 A/B: 16-bit access each */
@@ -465,6 +484,11 @@ acpi_status acpi_hw_register_write(u32 register_id, u32 value)
ACPI_FUNCTION_TRACE(hw_register_write);
+ /* If Hardware Reduced flag is set, there are no PM Control registers */
+ if (acpi_gbl_reduced_hardware) {
+ return_ACPI_STATUS(AE_NOT_IMPLEMENTED);
+ }
+
switch (register_id) {
case ACPI_REGISTER_PM1_STATUS: /* PM1 A/B: 16-bit access each */
/*
--
1.7.9.5
From: Al Stone <ahs3(a)redhat.com>
The first two versions of this patch set were in different submissions.
The primary difference with this version is that I've combined and
simplified the multiple sets into one comprehensive set, cleaned up
the ordering of the patches, and made corrections based on feedback
on v2.
The intent of this patch set is to enable the Arndale pinctrl devices
under ACPI instead of FDT. The ACPI ASL has been submitted as a
separate patch set. This patch set includes three of the four devices
defined for Arndale. The final device defines GPIO interrupts which
will be the subject of a later patch set (interrupts require a diversion
into enabling GICs first).
NB: the first two patches are generic and can apply to all ACPI
branches. The remainder are specific to Arndale and the acpi-ltfixes
branch.
Al Stone (8):
ACPI: make an error message a little cleaner
ACPI: improve acpi_extract_package() utility
ACPI: ARM: arndale: enable ACPI in the Samsung pinctrl driver
ACPI: ARM: arndale: add CONFIG_ACPI ifdefs to pinctrl driver
ACPI: ARM: arndale: move pin controller 4 of 4 from FDT to ACPI
ACPI: ARM: arndale: move pin controller 3 of 4 from FDT to ACPI
ACPI: ARM: arndale: move pin controller 2 of 4 from FDT to ACPI
ACPI: ARM: arndale: whitelist the samsung-pinctrl driver for ACPI
arch/arm/boot/dts/exynos5250-arndale.dts | 26 ++
arch/arm/boot/dts/exynos5250-pinctrl.dtsi | 2 +
arch/arm/boot/dts/exynos5250.dtsi | 6 +-
drivers/acpi/acpi_platform.c | 3 +
drivers/acpi/osl.c | 2 +-
drivers/acpi/utils.c | 17 +-
drivers/pinctrl/pinctrl-samsung.c | 513 +++++++++++++++++++++++++++++-
drivers/pinctrl/pinctrl-samsung.h | 3 +
8 files changed, 559 insertions(+), 13 deletions(-)
--
1.8.3.1
EINJ table is fully implemented in kernel and no changes were needed
to bring it up on armv7/8 arch.
Along with work on EINJ coulpe of steps were done like:
1. Expand bfapei tool so it can create blob which pretend h/w registers
for EINJ driver.
2. Filling address in EINJ table according to those in blob.
3. Trigger error using existing injection kernel mechanism.
See commit for more details.
Tomasz Nowicki (3):
bfapei: Move common functionality to separate function.
bfapei: Expand bfapei tool to EINJ table testing.
acpi, apei, einj: Fill in EINJ table according to address in EINJ
blobs.
platforms/exynos5250-arndale.acpi/einj.asl | 20 +++---
platforms/foundation-v8.acpi/einj.asl | 20 +++---
platforms/rtsm_ve-aemv8a.acpi/einj.asl | 20 +++---
tools/bfapei/bfapei.c | 101 ++++++++++++++++++++++------
tools/bfapei/bfapei.h | 30 +++++++--
tools/common/include/acpi.h | 57 ++++++++++++++++
6 files changed, 192 insertions(+), 56 deletions(-)
--
1.7.9.5
This patch set convert PMU driver to ACPI for ARMv8 arch. Despite driver is
initialized in early boot stage, no ACPI related actions are taken then. All PMU
resources coming from ACPI tables are use by others units once bus is enumerated.
Tomasz Nowicki (3):
ACPI, ARMv8: Whitelist armv8-pmu driver for ACPI.
armv8, dts: Move device resources to DSTD ACPI table.
armv8, pmu: Add the match table and pointers for ACPI probing to the
driver.
arch/arm64/boot/dts/foundation-v8-acpi.dts | 4 ++++
arch/arm64/boot/dts/rtsm_ve-aemv8a-acpi.dts | 4 ++++
arch/arm64/kernel/perf_event.c | 14 ++++++++++++++
drivers/acpi/acpi_platform.c | 1 +
4 files changed, 23 insertions(+)
--
1.7.9.5