]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.6-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Jun 2024 14:50:37 +0000 (16:50 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Jun 2024 14:50:37 +0000 (16:50 +0200)
added patches:
acpi-ec-evaluate-orphan-_reg-under-ec-device.patch

queue-6.6/acpi-ec-evaluate-orphan-_reg-under-ec-device.patch [new file with mode: 0644]
queue-6.6/series

diff --git a/queue-6.6/acpi-ec-evaluate-orphan-_reg-under-ec-device.patch b/queue-6.6/acpi-ec-evaluate-orphan-_reg-under-ec-device.patch
new file mode 100644 (file)
index 0000000..7d93e4a
--- /dev/null
@@ -0,0 +1,152 @@
+From 0e6b6dedf16800df0ff73ffe2bb5066514db29c2 Mon Sep 17 00:00:00 2001
+From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
+Date: Wed, 12 Jun 2024 16:15:55 +0200
+Subject: ACPI: EC: Evaluate orphan _REG under EC device
+
+From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+
+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 <vitaly.torshyn@gmail.com>
+Tested-by: VitaliiT <vitaly.torshyn@gmail.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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);
+@@ -818,7 +814,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
+@@ -306,3 +306,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
+@@ -1502,6 +1502,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
+@@ -663,6 +663,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
index d168168c81e88b59102ea45b6219039e85c8e709..67b4a866b9cf34a1178e0d01e289eac6117b85a3 100644 (file)
@@ -132,3 +132,4 @@ firmware-psci-fix-return-value-from-psci_system_susp.patch
 rdma-mlx5-fix-unwind-flow-as-part-of-mlx5_ib_stage_i.patch
 rdma-mlx5-add-check-for-srq-max_sge-attribute.patch
 rdma-mana_ib-ignore-optional-access-flags-for-mrs.patch
+acpi-ec-evaluate-orphan-_reg-under-ec-device.patch