Commit aa343014 authored by Bob Moore's avatar Bob Moore Committed by Greg Kroah-Hartman

ACPICA: Never run _REG on system_memory and system_IO

[ Upstream commit 8b1cafdc ]

These address spaces are defined by the ACPI spec to be
"always available", and thus _REG should never be run on them.
Provides compatibility with other ACPI implementations.
Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarErik Schmauss <erik.schmauss@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent c7263e71
...@@ -247,6 +247,8 @@ acpi_status ...@@ -247,6 +247,8 @@ acpi_status
acpi_ev_initialize_region(union acpi_operand_object *region_obj, acpi_ev_initialize_region(union acpi_operand_object *region_obj,
u8 acpi_ns_locked); u8 acpi_ns_locked);
u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node);
/* /*
* evsci - SCI (System Control Interrupt) handling/dispatch * evsci - SCI (System Control Interrupt) handling/dispatch
*/ */
......
...@@ -428,9 +428,9 @@ struct acpi_simple_repair_info { ...@@ -428,9 +428,9 @@ struct acpi_simple_repair_info {
/* Info for running the _REG methods */ /* Info for running the _REG methods */
struct acpi_reg_walk_info { struct acpi_reg_walk_info {
acpi_adr_space_type space_id;
u32 function; u32 function;
u32 reg_run_count; u32 reg_run_count;
acpi_adr_space_type space_id;
}; };
/***************************************************************************** /*****************************************************************************
......
...@@ -677,6 +677,19 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node, ...@@ -677,6 +677,19 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
ACPI_FUNCTION_TRACE(ev_execute_reg_methods); ACPI_FUNCTION_TRACE(ev_execute_reg_methods);
/*
* These address spaces do not need a call to _REG, since the ACPI
* specification defines them as: "must always be accessible". Since
* they never change state (never become unavailable), no need to ever
* call _REG on them. Also, a data_table is not a "real" address space,
* so do not call _REG. September 2018.
*/
if ((space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) ||
(space_id == ACPI_ADR_SPACE_SYSTEM_IO) ||
(space_id == ACPI_ADR_SPACE_DATA_TABLE)) {
return_VOID;
}
info.space_id = space_id; info.space_id = space_id;
info.function = function; info.function = function;
info.reg_run_count = 0; info.reg_run_count = 0;
...@@ -738,8 +751,8 @@ acpi_ev_reg_run(acpi_handle obj_handle, ...@@ -738,8 +751,8 @@ acpi_ev_reg_run(acpi_handle obj_handle,
} }
/* /*
* We only care about regions.and objects that are allowed to have address * We only care about regions and objects that are allowed to have
* space handlers * address space handlers
*/ */
if ((node->type != ACPI_TYPE_REGION) && (node != acpi_gbl_root_node)) { if ((node->type != ACPI_TYPE_REGION) && (node != acpi_gbl_root_node)) {
return (AE_OK); return (AE_OK);
......
...@@ -50,9 +50,6 @@ ...@@ -50,9 +50,6 @@
#define _COMPONENT ACPI_EVENTS #define _COMPONENT ACPI_EVENTS
ACPI_MODULE_NAME("evrgnini") ACPI_MODULE_NAME("evrgnini")
/* Local prototypes */
static u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node);
/******************************************************************************* /*******************************************************************************
* *
* FUNCTION: acpi_ev_system_memory_region_setup * FUNCTION: acpi_ev_system_memory_region_setup
...@@ -67,7 +64,6 @@ static u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node); ...@@ -67,7 +64,6 @@ static u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node);
* DESCRIPTION: Setup a system_memory operation region * DESCRIPTION: Setup a system_memory operation region
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ev_system_memory_region_setup(acpi_handle handle, acpi_ev_system_memory_region_setup(acpi_handle handle,
u32 function, u32 function,
...@@ -347,7 +343,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle, ...@@ -347,7 +343,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle,
* *
******************************************************************************/ ******************************************************************************/
static u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node) u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node)
{ {
acpi_status status; acpi_status status;
struct acpi_pnp_device_id *hid; struct acpi_pnp_device_id *hid;
......
...@@ -227,7 +227,6 @@ acpi_remove_address_space_handler(acpi_handle device, ...@@ -227,7 +227,6 @@ acpi_remove_address_space_handler(acpi_handle device,
*/ */
region_obj = region_obj =
handler_obj->address_space.region_list; handler_obj->address_space.region_list;
} }
/* Remove this Handler object from the list */ /* Remove this Handler object from the list */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment