hwmon: (acpi_power_meter) Ensure IPMI space handler is ready on Dell systems
BugLink: https://bugs.launchpad.net/bugs/2059263 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. Since the dependency is inside BIOS's ASL code and it's not discoverable, so use this fixup is a hack to workaround BIOS issue. [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 <kai.heng.feng@canonical.com> Link: https://lore.kernel.org/r/20240320084317.366853-2-kai.heng.feng@canonical.com [groeck: Simplified added code] Signed-off-by: Guenter Roeck <linux@roeck-us.net> (cherry picked from commit 265e8328eeb3ca1215aa56a558358b0b7471a95f linux-next) Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
This commit is contained in:
committed by
Roxana Nicolescu
parent
55307af25a
commit
c6a1079833
@@ -883,6 +883,22 @@ static int acpi_power_meter_add(struct acpi_device *device)
|
||||
strcpy(acpi_device_class(device), ACPI_POWER_METER_CLASS);
|
||||
device->driver_data = resource;
|
||||
|
||||
#if IS_REACHABLE(CONFIG_ACPI_IPMI)
|
||||
/*
|
||||
* On Dell systems several methods of acpi_power_meter access
|
||||
* variables in IPMI region, 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.
|
||||
*/
|
||||
if (dmi_match(DMI_SYS_VENDOR, "Dell Inc.")) {
|
||||
struct acpi_device *ipi_device = acpi_dev_get_first_match_dev("IPI0001", NULL, -1);
|
||||
|
||||
if (ipi_device && acpi_wait_for_acpi_ipmi())
|
||||
dev_warn(&device->dev, "Waiting for ACPI IPMI timeout");
|
||||
acpi_dev_put(ipi_device);
|
||||
}
|
||||
#endif
|
||||
|
||||
res = read_capabilities(resource);
|
||||
if (res)
|
||||
goto exit_free;
|
||||
|
||||
Reference in New Issue
Block a user