From patchwork Tue Jan 9 04:12:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kai-Heng Feng X-Patchwork-Id: 186208 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:37c1:b0:101:2151:f287 with SMTP id y1csp1433176dyq; Mon, 8 Jan 2024 20:13:03 -0800 (PST) X-Google-Smtp-Source: AGHT+IG9rRmMpaOxPNX0HV8GMD+wbIrgBz9dT6GEa44MkzsEnobySYOrGyQ/zjfqFnVcE7os7sJL X-Received: by 2002:a05:6358:5928:b0:175:9b4d:5d83 with SMTP id g40-20020a056358592800b001759b4d5d83mr1124701rwf.25.1704773583202; Mon, 08 Jan 2024 20:13:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704773583; cv=none; d=google.com; s=arc-20160816; b=zuUk2cbsMR/UzTUWXs92rNqjonqOldhx1MnQph8p3jm9hw7FnirV+t72gBJwUtYCPe rEEhUI2RN7kQijyoOaKg6GU5s823Wf1xZuLR42K3/pWXaqSZQr8HrPkujpbtD2FQ+RHy ipI88vTTnwMhiZazElGfLj/tipzScAPJdClh4qUmZz9Olw4nevqBwxeKxbu4b/zk/gTY WUiLcGDMIcpIgLD+vlsB0NU7n4H8cfxznKLS6iZl4pDBafsU/UeqhjiE/WfeCHiuPFT5 UrmK6mxUkf9TRF+i2++XkZFtI42ayk3xFijr9u386npAXG63TH8K17zC65sBB8k91dHL OtQA== ARC-Message-Signature: i=1; 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:message-id:date:subject:cc:to :from:dkim-signature; bh=mkzCDhuur4nw3vJi1sNPki2ia8X8CMEeigRIEazS7gI=; fh=EUsWKEM3fynHiFmpY91gAyxDPYrojFFdy7NIwo9HjIg=; b=0eKhxeW4cKC9doTQOeVBTZaw+cegiYz7hxnlTVYBAu+0Owu6gO5zQJWHb1UgpUFeou 2M2hTGgUgZjM6TAxbkizKXc+pPy0MG8ChUwCGNdVh1ERSKYvsXJTLFspUJhFaHj6281K puyvwHL8pm4ibktx27dSTN4H+Gem5KjbBHI8/bG6PyyqCDD3joghZvIODJ16kG2Huweh hfGo5mtw5cHGC5w3cBIyjh1QYx8DUQX6XS3m+kdwLd/3f6fQk8CEOISyLq5yKeW55qsR 75fH+11e+OVislogLsvANazMiBeOC06GB9VVLxYWfNi6O+GvL9jl316fhZisSFOF5Lnf kP5w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=iRNzNeBd; spf=pass (google.com: domain of linux-kernel+bounces-20368-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-20368-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id j1-20020a17090a734100b0028ce590c8b5si903080pjs.144.2024.01.08.20.13.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 20:13:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-20368-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=iRNzNeBd; spf=pass (google.com: domain of linux-kernel+bounces-20368-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-20368-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com 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 D76E128580D for ; Tue, 9 Jan 2024 04:13:02 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 61C8914AB8; Tue, 9 Jan 2024 04:12:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b="iRNzNeBd" Received: from smtp-relay-canonical-0.canonical.com (smtp-relay-canonical-0.canonical.com [185.125.188.120]) (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 BE2D5567E; Tue, 9 Jan 2024 04:12:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=canonical.com Received: from HP-EliteBook-x360-830-G8-Notebook-PC.. (unknown [10.101.196.174]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-0.canonical.com (Postfix) with ESMTPSA id 0B9B43F1F8; Tue, 9 Jan 2024 04:12:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1704773546; bh=mkzCDhuur4nw3vJi1sNPki2ia8X8CMEeigRIEazS7gI=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=iRNzNeBdsesEXzRUQUs3tat0ggOIur6n2AMxka6CasTq80lMsGe7cxqsaCLTJO/pX J+hnhb7gqZ8V2OTrvkohkyAqU+FNG5zZo+4asq/huuiSC2h7tNEopaRaHBRoxQ8zVX stygorc/5r9XrWjIfCl819wwdcCzKMnxLFc5lwcVZVieJm3/a4ev8VKh1LfTsaskuH m20vFfL7AL0AQCCP/YQtC1KDas8NyCAygt0Mki3P21hocDgtmjlWAKEx5Sz/k8edRs fwWYFpFSORqHNKboCDkd4HJwc05uJizmdZcX2kHL/9V6Mj6B1bRmQyY3htov3Aln7A m4kmzBWNBTMbg== From: Kai-Heng Feng To: jdelvare@suse.com, linux@roeck-us.net Cc: Kai-Heng Feng , "Rafael J. Wysocki" , Len Brown , Robert Moore , linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, acpica-devel@lists.linux.dev Subject: [PATCH v4 1/2] ACPI: IPMI: Add helper to wait for when SMI is selected Date: Tue, 9 Jan 2024 12:12:16 +0800 Message-Id: <20240109041218.980674-1-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787584664571979877 X-GMAIL-MSGID: 1787584664571979877 On Dell servers, many APCI methods of acpi_power_meter module evaluate variables inside IPMI region, so the region handler needs to be installed. In addition to that, the handler needs to be fully functional, and that depends on SMI being selected. So add a helper to let acpi_power_meter know when the handler is installed and ready to be used. Signed-off-by: Kai-Heng Feng Acked-by: Rafael J. Wysocki --- v4: - Wording. - Define and comment on timeout value. - Move the completion to driver_data. - Remove the tenary operator. v3: - New patch. drivers/acpi/acpi_ipmi.c | 23 ++++++++++++++++++++++- include/acpi/acpi_bus.h | 5 +++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/acpi_ipmi.c b/drivers/acpi/acpi_ipmi.c index 0555f68c2dfd..5fba4dab5d08 100644 --- a/drivers/acpi/acpi_ipmi.c +++ b/drivers/acpi/acpi_ipmi.c @@ -22,6 +22,8 @@ MODULE_LICENSE("GPL"); /* the IPMI timeout is 5s */ #define IPMI_TIMEOUT (5000) #define ACPI_IPMI_MAX_MSG_LENGTH 64 +/* 2s should be suffient for SMI being selected */ +#define ACPI_IPMI_SMI_SELECTION_TIMEOUT (2 * HZ) struct acpi_ipmi_device { /* the device list attached to driver_data.ipmi_devices */ @@ -54,6 +56,7 @@ struct ipmi_driver_data { * to this selected global IPMI system interface. */ struct acpi_ipmi_device *selected_smi; + struct completion smi_selection_done; }; struct acpi_ipmi_msg { @@ -463,8 +466,10 @@ static void ipmi_register_bmc(int iface, struct device *dev) if (temp->handle == handle) goto err_lock; } - if (!driver_data.selected_smi) + if (!driver_data.selected_smi) { driver_data.selected_smi = ipmi_device; + complete(&driver_data.smi_selection_done); + } list_add_tail(&ipmi_device->head, &driver_data.ipmi_devices); mutex_unlock(&driver_data.ipmi_lock); @@ -578,6 +583,20 @@ acpi_ipmi_space_handler(u32 function, acpi_physical_address address, return status; } +int acpi_wait_for_acpi_ipmi(void) +{ + long ret; + + ret = wait_for_completion_interruptible_timeout(&driver_data.smi_selection_done, + ACPI_IPMI_SMI_SELECTION_TIMEOUT); + + if (ret <= 0) + return -ETIMEDOUT; + + return 0; +} +EXPORT_SYMBOL_GPL(acpi_wait_for_acpi_ipmi); + static int __init acpi_ipmi_init(void) { int result; @@ -586,6 +605,8 @@ static int __init acpi_ipmi_init(void) if (acpi_disabled) return 0; + init_completion(&driver_data.smi_selection_done); + status = acpi_install_address_space_handler(ACPI_ROOT_OBJECT, ACPI_ADR_SPACE_IPMI, &acpi_ipmi_space_handler, diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 1216d72c650f..afa6e4d4bf46 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -821,11 +821,16 @@ static inline void acpi_put_acpi_dev(struct acpi_device *adev) { acpi_dev_put(adev); } + +int acpi_wait_for_acpi_ipmi(void); + #else /* CONFIG_ACPI */ static inline int register_acpi_bus_type(void *bus) { return 0; } static inline int unregister_acpi_bus_type(void *bus) { return 0; } +static inline int acpi_wait_for_acpi_ipmi(void) { return 0; } + #endif /* CONFIG_ACPI */ #endif /*__ACPI_BUS_H__*/ From patchwork Tue Jan 9 04:12:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kai-Heng Feng X-Patchwork-Id: 186209 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:37c1:b0:101:2151:f287 with SMTP id y1csp1433200dyq; Mon, 8 Jan 2024 20:13:08 -0800 (PST) X-Google-Smtp-Source: AGHT+IGDiIFSF8AifkuIlqHwsMPzvghkzGZF7GaQ0ZcTOv76C4D0rhwNcFwVZF+iymK/dA67eNrt X-Received: by 2002:a05:6830:1516:b0:6db:fee6:ebfc with SMTP id k22-20020a056830151600b006dbfee6ebfcmr3871171otp.49.1704773587717; Mon, 08 Jan 2024 20:13:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704773587; cv=none; d=google.com; s=arc-20160816; b=B1+F1e5y6Z6ZAQUs0oZvvpEX+9IQwqWvi78RmawwODZ3oYxA8i2lMghH7dBpSO1UtS g6zqXx31xy63JyOxf+wbQQJWB9yeplZL9PSclQUTnJT+8G4tY52rnZSoeSpMK4UtHQ5X yFKm5Sy4/o3cp8FQeinw8EjgqCHyFGgVCJfCXnuHGGgZD2tsw4G2Bv82KCOxW9MKDN9r aToF5umDO3rfFvDWBcPLTfywqFUH1faZkJjq8bSX/Xo3YWCMCLQ3nh4CEJ0C1KHm/xqr VjRJVL/d9oLe9a6qajwRnk84tGovKvdFvRmZMqTzLtpdqKDQ52uqTeW+kpLC5Usmzufs Rong== ARC-Message-Signature: i=1; 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=D/WDV5fXgOpgS9EEKmedByWQnN4+GBubzNwhkbzIl/g=; fh=SzCKdFOxLTr6GR1lmw6aNzdbV1Tq9k5ZyfqOVVuDMX0=; b=Vzh2tzybdP7aY0tYcnfrcHaxrY2Ii9bUgoEXPaLGxpStYWUb2ZttzWMOe6hWZ2NwMN NGoKTyPQHpH3mteQAzaix2G6DY9/rbKWUBfqnBYd/Ff/XAo3BfvsgIXzxoDtyyEU4EuE iq7n0Xc/1XnqyFlVBGust28mO6NcQnZRX2XfXfEiWchiOi2FJQTQmw3ILspRlfyZbtS0 J4/17UfYpC83qiIAgNorkf5PnLdyTVOUt6QdeKHH2T+ZvCo2cBbgRiP71MVjTOAUasSF OUULw5IeKfBzs64znrWub5QRvnW+tUig3v0/uFt6aT8k+4QEWLZUAnZrd1m+Sf/acV7X WZlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=MQD8Opn4; spf=pass (google.com: domain of linux-kernel+bounces-20369-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-20369-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id f11-20020a63510b000000b005c65d0dd9a0si827564pgb.503.2024.01.08.20.13.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 20:13:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-20369-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=MQD8Opn4; spf=pass (google.com: domain of linux-kernel+bounces-20369-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-20369-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com 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 7865228580A for ; Tue, 9 Jan 2024 04:13:07 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DB3C321374; Tue, 9 Jan 2024 04:12:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b="MQD8Opn4" Received: from smtp-relay-canonical-0.canonical.com (smtp-relay-canonical-0.canonical.com [185.125.188.120]) (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 6E2E3568B; Tue, 9 Jan 2024 04:12:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=canonical.com Received: from HP-EliteBook-x360-830-G8-Notebook-PC.. (unknown [10.101.196.174]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-0.canonical.com (Postfix) with ESMTPSA id 8C5F64211A; Tue, 9 Jan 2024 04:12:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1704773549; bh=D/WDV5fXgOpgS9EEKmedByWQnN4+GBubzNwhkbzIl/g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=MQD8Opn4BoX1DQLdeIyZYT9H2qhb7uaZAYoX+WESIF6w57wdv/sKTYYyadV1OEbH0 5Bzw5KTa7k2IIBtRum3feVZkzIc7RWNL3sTpGGHzSIxWXkigdJQ6Y1aA2z+Pjkn4bd 419G7Tb2ynBbsQtQpYRYfFSSZ81G5PmXOHxvZevgjZL3YY9pkjqxURxN8fb5HoNwYz sckkvJWsGlyGaY4gYk8cXptpaoqXfp0Zua4lV14C691xHGGmSyiWHfIh1W5y8lyCt2 QGLi3nXmRZxU5xsSvEFoFTtKGLneb1mnk73RlAA7rhLx60lcd0tLvcc96xNpdOY/rT 9e52RZGaEkLxA== From: Kai-Heng Feng To: jdelvare@suse.com, linux@roeck-us.net Cc: Kai-Heng Feng , linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/2] hwmon: (acpi_power_meter) Ensure IPMI space handler is ready on Dell systems Date: Tue, 9 Jan 2024 12:12:17 +0800 Message-Id: <20240109041218.980674-2-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240109041218.980674-1-kai.heng.feng@canonical.com> References: <20240109041218.980674-1-kai.heng.feng@canonical.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787584669690983290 X-GMAIL-MSGID: 1787584669690983290 The following error can be observed at boot: [ 3.717920] ACPI Error: No handler for Region [SYSI] (00000000ab9e62c5) [IPMI] (20230628/evregion-130) [ 3.717928] ACPI Error: Region IPMI (ID=7) has no handler (20230628/exfldio-261) [ 3.717936] No Local Variables are initialized for Method [_GHL] [ 3.717938] No Arguments are initialized for method [_GHL] [ 3.717940] ACPI Error: Aborting method \_SB.PMI0._GHL due to previous error (AE_NOT_EXIST) (20230628/psparse-529) [ 3.717949] ACPI Error: Aborting method \_SB.PMI0._PMC due to previous error (AE_NOT_EXIST) (20230628/psparse-529) [ 3.717957] ACPI: \_SB_.PMI0: _PMC evaluation failed: AE_NOT_EXIST On Dell systems several methods of acpi_power_meter access variables in IPMI region [0], so wait until IPMI space handler is installed by acpi_ipmi and also wait until SMI is selected to make the space handler fully functional. [0] https://www.dell.com/support/manuals/en-us/redhat-enterprise-linux-v8.0/rhel8_rn_pub/advanced-configuration-and-power-interface-acpi-error-messages-displayed-in-dmesg?guid=guid-0d5ae482-1977-42cf-b417-3ed5c3f5ee62 Signed-off-by: Kai-Heng Feng --- v4: - No change. v3: - Use helper. - Use return value to print warning message. v2: - Use completion instead of request_module(). drivers/hwmon/acpi_power_meter.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c index 703666b95bf4..33fb9626633d 100644 --- a/drivers/hwmon/acpi_power_meter.c +++ b/drivers/hwmon/acpi_power_meter.c @@ -883,6 +883,12 @@ static int acpi_power_meter_add(struct acpi_device *device) strcpy(acpi_device_class(device), ACPI_POWER_METER_CLASS); device->driver_data = resource; + if (dmi_match(DMI_SYS_VENDOR, "Dell Inc.") && + acpi_dev_get_first_match_dev("IPI0001", NULL, -1)) { + if (acpi_wait_for_acpi_ipmi()) + dev_warn(&device->dev, "Waiting for ACPI IPMI timeout"); + } + res = read_capabilities(resource); if (res) goto exit_free;