From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Linux ACPI <linux-acpi@vger.kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Hans de Goede <hdegoede@redhat.com>,
Mario Limonciello <mario.limonciello@amd.com>,
Armin Wolf <w_armin@gmx.de>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>
Subject: [PATCH v1 1/2] ACPI: EC: Install address space handler at the namespace root
Date: Fri, 10 May 2024 16:03:39 +0200 [thread overview]
Message-ID: <4926735.31r3eYUQgx@kreacher> (raw)
In-Reply-To: <5787281.DvuYhMxLoT@kreacher>
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
It is reported that _DSM evaluation fails in ucsi_acpi_dsm() on Lenovo
IdeaPad Pro 5 due to a missing address space handler for the EC address
space:
ACPI Error: No handler for Region [ECSI] (000000007b8176ee) [EmbeddedControl] (20230628/evregion-130)
This happens because the EC driver only registers the EC address space
handler for operation regions defined in the EC device scope of the
ACPI namespace while the operation region being accessed by the _DSM
in question is located beyond that scope.
To address this, modify the ACPI EC driver to install the EC address
space handler at the root of the ACPI namespace.
Note that this change is consistent with some examples in the ACPI
specification in which EC operation regions located outside the EC
device scope are used (for example, see Section 9.17.15 in ACPI 6.5),
so the current behavior of the EC driver is arguably questionable.
Reported-by: webcaptcha <webcapcha@gmail.com>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=218789
Link: https://uefi.org/specs/ACPI/6.5/09_ACPI_Defined_Devices_and_Device_Specific_Objects.html#example-asl-code
Link: https://lore.kernel.org/linux-acpi/Zi+0whTvDbAdveHq@kuha.fi.intel.com
Suggested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
drivers/acpi/ec.c | 10 +++++-----
drivers/acpi/internal.h | 1 -
2 files changed, 5 insertions(+), 6 deletions(-)
Index: linux-pm/drivers/acpi/ec.c
===================================================================
--- linux-pm.orig/drivers/acpi/ec.c
+++ linux-pm/drivers/acpi/ec.c
@@ -1488,7 +1488,7 @@ static int ec_install_handlers(struct ac
if (!test_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags)) {
acpi_ec_enter_noirq(ec);
- status = acpi_install_address_space_handler_no_reg(ec->handle,
+ status = acpi_install_address_space_handler_no_reg(ACPI_ROOT_OBJECT,
ACPI_ADR_SPACE_EC,
&acpi_ec_space_handler,
NULL, ec);
@@ -1497,11 +1497,10 @@ static int ec_install_handlers(struct ac
return -ENODEV;
}
set_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags);
- ec->address_space_handler_holder = ec->handle;
}
if (call_reg && !test_bit(EC_FLAGS_EC_REG_CALLED, &ec->flags)) {
- acpi_execute_reg_methods(ec->handle, ACPI_ADR_SPACE_EC);
+ acpi_execute_reg_methods(ACPI_ROOT_OBJECT, ACPI_ADR_SPACE_EC);
set_bit(EC_FLAGS_EC_REG_CALLED, &ec->flags);
}
@@ -1555,8 +1554,9 @@ static void ec_remove_handlers(struct ac
{
if (test_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags)) {
if (ACPI_FAILURE(acpi_remove_address_space_handler(
- ec->address_space_handler_holder,
- ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
+ ACPI_ROOT_OBJECT,
+ ACPI_ADR_SPACE_EC,
+ &acpi_ec_space_handler)))
pr_err("failed to remove space handler\n");
clear_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags);
}
Index: linux-pm/drivers/acpi/internal.h
===================================================================
--- linux-pm.orig/drivers/acpi/internal.h
+++ linux-pm/drivers/acpi/internal.h
@@ -186,7 +186,6 @@ enum acpi_ec_event_state {
struct acpi_ec {
acpi_handle handle;
- acpi_handle address_space_handler_holder;
int gpe;
int irq;
unsigned long command_addr;
next prev parent reply other threads:[~2024-05-10 14:05 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-10 14:01 [PATCH v1 0/2] ACPI: EC: Install EC address space handler at the namespace root Rafael J. Wysocki
2024-05-10 14:03 ` Rafael J. Wysocki [this message]
2024-05-10 16:10 ` [PATCH v1 1/2] ACPI: EC: Install " Armin Wolf
2024-05-10 16:41 ` Rafael J. Wysocki
2024-05-10 16:52 ` Armin Wolf
2024-05-10 17:29 ` Andy Shevchenko
2024-05-10 17:38 ` Armin Wolf
2024-05-10 18:00 ` Rafael J. Wysocki
2024-05-11 14:22 ` Hans de Goede
2024-05-14 19:40 ` Rafael J. Wysocki
2024-05-15 10:05 ` Hans de Goede
2024-05-10 17:40 ` Mario Limonciello
2024-05-10 17:47 ` Armin Wolf
2024-05-10 17:50 ` Andy Shevchenko
2024-05-10 17:54 ` Andy Shevchenko
2024-05-10 18:06 ` Rafael J. Wysocki
2024-05-10 18:17 ` Andy Shevchenko
2024-05-10 17:56 ` Rafael J. Wysocki
2024-05-10 14:04 ` [PATCH v1 2/2] platform/x86: wmi: Remove custom EC address space handler Rafael J. Wysocki
2024-05-10 17:40 ` Armin Wolf
2024-05-10 14:15 ` [PATCH v1 0/2] ACPI: EC: Install EC address space handler at the namespace root Mario Limonciello
2024-05-13 8:10 ` Heikki Krogerus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4926735.31r3eYUQgx@kreacher \
--to=rjw@rjwysocki.net \
--cc=andriy.shevchenko@linux.intel.com \
--cc=hdegoede@redhat.com \
--cc=heikki.krogerus@linux.intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mario.limonciello@amd.com \
--cc=w_armin@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.