From: Greg Kroah-Hartman Date: Wed, 8 Apr 2026 13:48:31 +0000 (+0200) Subject: 5.15-stable patches X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2fd84befce675f177d529eb7ce1065f8f77a4284;p=thirdparty%2Fkernel%2Fstable-queue.git 5.15-stable patches added patches: acpi-ec-evaluate-orphan-_reg-under-ec-device.patch --- diff --git a/queue-5.15/acpi-ec-evaluate-orphan-_reg-under-ec-device.patch b/queue-5.15/acpi-ec-evaluate-orphan-_reg-under-ec-device.patch new file mode 100644 index 0000000000..64d52456c7 --- /dev/null +++ b/queue-5.15/acpi-ec-evaluate-orphan-_reg-under-ec-device.patch @@ -0,0 +1,152 @@ +From 0e6b6dedf16800df0ff73ffe2bb5066514db29c2 Mon Sep 17 00:00:00 2001 +From: "Rafael J. Wysocki" +Date: Wed, 12 Jun 2024 16:15:55 +0200 +Subject: ACPI: EC: Evaluate orphan _REG under EC device + +From: Rafael J. Wysocki + +commit 0e6b6dedf16800df0ff73ffe2bb5066514db29c2 upstream. + +After starting to install the EC address space handler at the ACPI +namespace root, if there is an "orphan" _REG method in the EC device's +scope, it will not be evaluated any more. This breaks EC operation +regions on some systems, like Asus gu605. + +To address this, use a wrapper around an existing ACPICA function to +look for an "orphan" _REG method in the EC device scope and evaluate +it if present. + +Fixes: 60fa6ae6e6d0 ("ACPI: EC: Install address space handler at the namespace root") +Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218945 +Reported-by: VitaliiT +Tested-by: VitaliiT +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman +--- + drivers/acpi/acpica/acevents.h | 4 +++ + drivers/acpi/acpica/evregion.c | 6 ---- + drivers/acpi/acpica/evxfregn.c | 54 +++++++++++++++++++++++++++++++++++++++++ + drivers/acpi/ec.c | 3 ++ + include/acpi/acpixf.h | 4 +++ + 5 files changed, 66 insertions(+), 5 deletions(-) + +--- a/drivers/acpi/acpica/acevents.h ++++ b/drivers/acpi/acpica/acevents.h +@@ -191,6 +191,10 @@ void + acpi_ev_execute_reg_methods(struct acpi_namespace_node *node, + acpi_adr_space_type space_id, u32 function); + ++void ++acpi_ev_execute_orphan_reg_method(struct acpi_namespace_node *node, ++ acpi_adr_space_type space_id); ++ + acpi_status + acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function); + +--- a/drivers/acpi/acpica/evregion.c ++++ b/drivers/acpi/acpica/evregion.c +@@ -20,10 +20,6 @@ extern u8 acpi_gbl_default_address_space + + /* Local prototypes */ + +-static void +-acpi_ev_execute_orphan_reg_method(struct acpi_namespace_node *device_node, +- acpi_adr_space_type space_id); +- + static acpi_status + acpi_ev_reg_run(acpi_handle obj_handle, + u32 level, void *context, void **return_value); +@@ -799,7 +795,7 @@ acpi_ev_reg_run(acpi_handle obj_handle, + * + ******************************************************************************/ + +-static void ++void + acpi_ev_execute_orphan_reg_method(struct acpi_namespace_node *device_node, + acpi_adr_space_type space_id) + { +--- a/drivers/acpi/acpica/evxfregn.c ++++ b/drivers/acpi/acpica/evxfregn.c +@@ -304,3 +304,57 @@ acpi_execute_reg_methods(acpi_handle dev + } + + ACPI_EXPORT_SYMBOL(acpi_execute_reg_methods) ++ ++/******************************************************************************* ++ * ++ * FUNCTION: acpi_execute_orphan_reg_method ++ * ++ * PARAMETERS: device - Handle for the device ++ * space_id - The address space ID ++ * ++ * RETURN: Status ++ * ++ * DESCRIPTION: Execute an "orphan" _REG method that appears under an ACPI ++ * device. This is a _REG method that has no corresponding region ++ * within the device's scope. ++ * ++ ******************************************************************************/ ++acpi_status ++acpi_execute_orphan_reg_method(acpi_handle device, acpi_adr_space_type space_id) ++{ ++ struct acpi_namespace_node *node; ++ acpi_status status; ++ ++ ACPI_FUNCTION_TRACE(acpi_execute_orphan_reg_method); ++ ++ /* Parameter validation */ ++ ++ if (!device) { ++ return_ACPI_STATUS(AE_BAD_PARAMETER); ++ } ++ ++ status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); ++ if (ACPI_FAILURE(status)) { ++ return_ACPI_STATUS(status); ++ } ++ ++ /* Convert and validate the device handle */ ++ ++ node = acpi_ns_validate_handle(device); ++ if (node) { ++ ++ /* ++ * If an "orphan" _REG method is present in the device's scope ++ * for the given address space ID, run it. ++ */ ++ ++ acpi_ev_execute_orphan_reg_method(node, space_id); ++ } else { ++ status = AE_BAD_PARAMETER; ++ } ++ ++ (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); ++ return_ACPI_STATUS(status); ++} ++ ++ACPI_EXPORT_SYMBOL(acpi_execute_orphan_reg_method) +--- a/drivers/acpi/ec.c ++++ b/drivers/acpi/ec.c +@@ -1521,6 +1521,9 @@ static int ec_install_handlers(struct ac + + if (call_reg && !test_bit(EC_FLAGS_EC_REG_CALLED, &ec->flags)) { + acpi_execute_reg_methods(scope_handle, ACPI_ADR_SPACE_EC); ++ if (scope_handle != ec->handle) ++ acpi_execute_orphan_reg_method(ec->handle, ACPI_ADR_SPACE_EC); ++ + set_bit(EC_FLAGS_EC_REG_CALLED, &ec->flags); + } + +--- a/include/acpi/acpixf.h ++++ b/include/acpi/acpixf.h +@@ -661,6 +661,10 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_adr_space_type + space_id)) + ACPI_EXTERNAL_RETURN_STATUS(acpi_status ++ acpi_execute_orphan_reg_method(acpi_handle device, ++ acpi_adr_space_type ++ space_id)) ++ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_remove_address_space_handler(acpi_handle + device, + acpi_adr_space_type diff --git a/queue-5.15/series b/queue-5.15/series index d890673622..ae8977af75 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -501,3 +501,4 @@ usb-gadget-f_rndis-protect-rndis-options-with-mutex.patch usb-gadget-f_uac1_legacy-validate-control-request-size.patch io_uring-tctx-work-around-xa_store-allocation-error-issue.patch wifi-virt_wifi-remove-set_netdev_dev-to-avoid-use-after-free.patch +acpi-ec-evaluate-orphan-_reg-under-ec-device.patch