]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
platform/x86: intel-wmi-sbl-fw-update: Use new buffer-based WMI API
authorArmin Wolf <W_Armin@gmx.de>
Fri, 16 Jan 2026 20:41:12 +0000 (21:41 +0100)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tue, 20 Jan 2026 13:47:54 +0000 (15:47 +0200)
Use the new buffer-based WMI API to also support ACPI firmware
implementations that return a ACPI buffer instead of a ACPI integer.

Signed-off-by: Armin Wolf <W_Armin@gmx.de>
Link: https://patch.msgid.link/20260116204116.4030-6-W_Armin@gmx.de
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/intel/wmi/sbl-fw-update.c

index 75c82c08117f5c2a7701bf95706f2030eb3467b5..3716ccaaed6a5ab6e74ffe45f2e1c7de057908c2 100644 (file)
@@ -14,7 +14,6 @@
  * https://slimbootloader.github.io/security/firmware-update.html
  */
 
-#include <linux/acpi.h>
 #include <linux/device.h>
 #include <linux/module.h>
 #include <linux/slab.h>
 
 static int get_fwu_request(struct device *dev, u32 *out)
 {
-       union acpi_object *obj;
+       struct wmi_buffer buffer;
+       __le32 *result;
+       int ret;
 
-       obj = wmidev_block_query(to_wmi_device(dev), 0);
-       if (!obj)
-               return -ENODEV;
+       ret = wmidev_query_block(to_wmi_device(dev), 0, &buffer);
+       if (ret < 0)
+               return ret;
 
-       if (obj->type != ACPI_TYPE_INTEGER) {
-               dev_warn(dev, "wmidev_block_query returned invalid value\n");
-               kfree(obj);
-               return -EINVAL;
+       if (buffer.length < sizeof(*result)) {
+               kfree(buffer.data);
+               return -ENODATA;
        }
 
-       *out = obj->integer.value;
-       kfree(obj);
+       result = buffer.data;
+       *out = le32_to_cpu(*result);
+       kfree(result);
 
        return 0;
 }
 
 static int set_fwu_request(struct device *dev, u32 in)
 {
-       struct acpi_buffer input;
-       acpi_status status;
-       u32 value;
-
-       value = in;
-       input.length = sizeof(u32);
-       input.pointer = &value;
-
-       status = wmidev_block_set(to_wmi_device(dev), 0, &input);
-       if (ACPI_FAILURE(status)) {
-               dev_err(dev, "wmidev_block_set failed\n");
-               return -ENODEV;
-       }
+       __le32 value = cpu_to_le32(in);
+       struct wmi_buffer buffer = {
+               .length = sizeof(value),
+               .data = &value,
+       };
 
-       return 0;
+       return wmidev_set_block(to_wmi_device(dev), 0, &buffer);
 }
 
 static ssize_t firmware_update_request_show(struct device *dev,