Received: by 2002:ab2:6d45:0:b0:1fb:d597:ff75 with SMTP id d5csp241188lqr; Wed, 5 Jun 2024 05:00:18 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXkcIIzYl5kTm90LX8iuwtXxLPi4K3AmcI3BLU/vRocxw/xyyfBJ3vkTa0KbQqT9PuZPy+uEqvuJqYxTv091cdgnadDsp1hP0lVd0QPgQ== X-Google-Smtp-Source: AGHT+IH0RNDvd3ORuoKDp+WdpT1r6uLEf00UZpEnWdulyKi/dVavNX1jPvMnPBiDJJiN4nLToBKY X-Received: by 2002:a05:6358:4419:b0:19c:3d57:d480 with SMTP id e5c5f4694b2df-19c6c7c308bmr262865955d.16.1717588817991; Wed, 05 Jun 2024 05:00:17 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717588817; cv=pass; d=google.com; s=arc-20160816; b=tmuZDAuTiYGSfB/6wbECqTJADIVYFMlDijdCUsQuPGv0d20yrHO1evYd6PcvmgqnNc uK7naGKxQpiMFdrzFgXvuzGojKcWl/EaBjPaNb07msxpRXFCikGySlFPO/KCM7BB8oUG wnk7smn3zRjpfgtXCYRyY3GG+/mR2IM06XzGwxjPEV1u5Ejj2F7Ljt7AjQcFa3qbp5vp L4PIekhBTF71U5Q1npWQOq9yNVnNFGb1GVbJYyAWwR7DBGuVdltpraehqNqbRrip66d2 SIa/z3DMZobczcTPrj2Et60EFtL2jnwsISp54xHNoJdgHrqhQ/lnIG96mq47q/rzGE96 v9Ag== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=wRRlESvP9ZnPiYZxBTXHRCaEtbk/6SwnFGbmFUkm/y8=; fh=oYsGjTPUIcmYjmuCx3OhfJ1gj59slujWNgV4dTH3PkE=; b=Oq7WvhnX/DutFUtj4357/q6oac0w28NZh4yHWU2Jw28cGtmwC/Mu6DIkYC1yAA0yer /n9AUrUg1SnnzZdyb3CtmB3gGgIddqNESuz6q5mOLP9X39T9OVZR4i5ZMwJVDinEeeVv kVL9NpUGgFA1Tv9pAnQp/WEs8FoyXjGjLPgZ8CSFR4wnZBIu34reT9RfIHAQ8LPDGoxA HQSuzzG8ZTbh33s8phnZlDE/O4Hnsbv2X0hrHygBiB2hFnGvJf0jnXVy/D1tPwXGYQKH G6eDKZJlbcsgDL0gn5xqXm5evH3AeiJ1GvlMiI5oRMjri1D5Jdicikx0raMhxgMZfSLv e8vg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=bnGtN5ed; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-202327-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-202327-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id 41be03b00d2f7-6c35b222fc8si3633712a12.498.2024.06.05.05.00.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Jun 2024 05:00:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-202327-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=bnGtN5ed; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-202327-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-202327-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id D591A28A2F7 for ; Wed, 5 Jun 2024 11:57:14 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0365C19B5BF; Wed, 5 Jun 2024 11:50:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bnGtN5ed" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C7DB19B5A2; Wed, 5 Jun 2024 11:50:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717588230; cv=none; b=XQrEpYvNMetIkqa0sZWy9ziJebv62XjhDLWMILXP+lxZ7tIZchfnzLO120Kw7U1r4HDTRy5MqyBrUw5lbed/8WZieqQ6tb3oCKS8JP5abCyzuxkM8kYg9ji7JpU9K5iOrSLlu/Dy0cyCx1gkjnue/D8Sl55Ich4fz0JINvr8rPY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717588230; c=relaxed/simple; bh=+WR5tOMHgkRCoxG+oy9TpkffBlAtvH38e/x9PsfCGRE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m+ZyabaTkc5ealEnSmmTl2Juk5+lTZ04d40kO6TlytIX8Z6QfQ8yUUAGxiNCV5ncgidVS2N94AOmd2YMaKR5LOs41vlTd4qd3PizfTGVBAjBbRSH3fiPo89DdZH842lPjFKhpRRXvsXfrLzktOk17Iny2dKCmV4w9qBximxBBjU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bnGtN5ed; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5206EC3277B; Wed, 5 Jun 2024 11:50:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717588229; bh=+WR5tOMHgkRCoxG+oy9TpkffBlAtvH38e/x9PsfCGRE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bnGtN5edUSq8Rz9X++pp6n3Kl1Qys8rjj3WdHWDeQ3QR2KHPGhQDeS29IqdgrNijU O5vlOHS9B7Qeu8EQKNclSG3ZKid8bG1/GEI25AjJnPgYgso0+jwC+iyooI3BPM+ctK 2Oiyt4jb9xePtP3z+bDPXlejO99Kc2T3fgj87GBM0HOUWtgfEuhf99ZyzV70cHD4tg Zeo8MWDpGM89rOGd3kq9bR+nCzz/fz1UKTqLmYh36aba2vA3RsAIrQP0zgTYi6eMCr N5ppSBdAgylDBfPskJS8DWZYksg9FYGOlywy62Zp40cAXb8jBw/YxibOay5XdV6GhH bzhHs2AoPOqwg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: "Rafael J. Wysocki" , webcaptcha , Heikki Krogerus , Hans de Goede , Mario Limonciello , Andy Shevchenko , Sasha Levin , rafael@kernel.org, linux-acpi@vger.kernel.org Subject: [PATCH AUTOSEL 6.9 26/28] ACPI: EC: Install address space handler at the namespace root Date: Wed, 5 Jun 2024 07:48:55 -0400 Message-ID: <20240605114927.2961639-26-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240605114927.2961639-1-sashal@kernel.org> References: <20240605114927.2961639-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.9.3 Content-Transfer-Encoding: 8bit From: "Rafael J. Wysocki" [ Upstream commit 60fa6ae6e6d09e377fce6f8d9b6f6a4d88769f63 ] 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 if there is no ECDT, 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 for the first EC that can be found regardless of whether or not an ECDT is present. 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 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 Signed-off-by: Rafael J. Wysocki Reviewed-by: Hans de Goede Reviewed-by: Mario Limonciello Reviewed-by: Andy Shevchenko Signed-off-by: Sasha Levin --- drivers/acpi/ec.c | 25 ++++++++++++++++--------- drivers/acpi/internal.h | 1 - 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 02255795b800d..e7793ee9e6498 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c @@ -1482,13 +1482,14 @@ static bool install_gpio_irq_event_handler(struct acpi_ec *ec) static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device, bool call_reg) { + acpi_handle scope_handle = ec == first_ec ? ACPI_ROOT_OBJECT : ec->handle; acpi_status status; acpi_ec_start(ec, false); 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(scope_handle, ACPI_ADR_SPACE_EC, &acpi_ec_space_handler, NULL, ec); @@ -1497,11 +1498,10 @@ static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device, 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(scope_handle, ACPI_ADR_SPACE_EC); set_bit(EC_FLAGS_EC_REG_CALLED, &ec->flags); } @@ -1553,10 +1553,13 @@ static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device, static void ec_remove_handlers(struct acpi_ec *ec) { + acpi_handle scope_handle = ec == first_ec ? ACPI_ROOT_OBJECT : ec->handle; + 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))) + scope_handle, + 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); } @@ -1595,14 +1598,18 @@ static int acpi_ec_setup(struct acpi_ec *ec, struct acpi_device *device, bool ca { int ret; - ret = ec_install_handlers(ec, device, call_reg); - if (ret) - return ret; - /* First EC capable of handling transactions */ if (!first_ec) first_ec = ec; + ret = ec_install_handlers(ec, device, call_reg); + if (ret) { + if (ec == first_ec) + first_ec = NULL; + + return ret; + } + pr_info("EC_CMD/EC_SC=0x%lx, EC_DATA=0x%lx\n", ec->command_addr, ec->data_addr); diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h index ca72a0dc57151..a0801e0876fc0 100644 --- a/drivers/acpi/internal.h +++ b/drivers/acpi/internal.h @@ -185,7 +185,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; -- 2.43.0