Merge tag 'platform-drivers-x86-v6.16-1' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 29 May 2025 17:19:22 +0000 (10:19 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 29 May 2025 17:19:22 +0000 (10:19 -0700)
Pull x86 platform drivers updates from Ilpo Järvinen:
 "The changes are mostly business as usual. Besides pdx86 changes, there
  are a few power supply changes needed for related pdx86 features, move
  of oxpec driver from hwmon (oxp-sensors) to pdx86, and one FW version
  warning to hid-asus.

  Highlights:

   - alienware-wmi-wmax:
       - Add HWMON support
       - Add ABI and admin-guide documentation
       - Expose GPIO debug methods through debug FS
       - Support manual fan control and "custom" thermal profile

   - amd/hsmp:
       - Add sysfs files to show HSMP telemetry
       - Report power readings and limits via hwmon

   - amd/isp4: Add AMD ISP platform config for OV05C10

   - asus-wmi:
       - Refactor Ally suspend/resume to work better with older FW
       - hid-asus: check ROG Ally MCU version and warn about old FW versions

   - dasharo-acpi:
       - Add driver for Dasharo devices supporting fans and temperatures
         monitoring

   - dell-ddv:
       - Expose the battery health and manufacture date to userspace
         using power supply extensions
       - Implement the battery matching algorithm

   - dell-pc:
       - Improve error propagation
       - Use faux device

   - int3472:
       - Add delays to avoid GPIO regulator spikes
       - Add handshake pin support
       - Make regulator supply name configurable and allow registering
         more than 1 GPIO regulator
       - Map mt9m114 powerdown pin to powerenable

   - intel/pmc: Add separate SSRAM Telemetry driver

   - intel-uncore-freq: Add attributes to show agent types and die ID

   - ISST:
       - Support SST-TF revision 2 (allows more cores per bucket)
       - Support SST-PP revision 2 (fabric 1 frequencies)
       - Remove unnecessary SST MSRs restore (the package retains MSRs
         despite CPU offlining)

   - mellanox: Add support for SN2201, SN4280, SN5610, and SN5640

   - mellanox: mlxbf-pmc: Support additional PMC blocks

   - oxpec:
       - Add OneXFly variants
       - Add support for charge limit, charge thresholds, and turbo LED
       - Distinguish current X1 variants to avoid unwanted matching to
         new variants
       - Follow hwmon conventions
       - Move from hwmon/oxp-sensors to platform/x86 to match the
         enlarged scope

   - power supply:
       - Add inhibit-charge-awake (needed by oxpec)
       - Add additional battery health status values ("blown fuse" and
         "cell imbalance") (needed by dell-ddv)

   - powerwell-ec: Add driver for Portwell EC supporting GPIO and watchdog

   - thinkpad-acpi: Support camera shutter switch hotkey

   - tuxedo: Add virtual LampArray for TUXEDO NB04 devices

   - tools/power/x86/intel-speed-select:
       - Support displaying SST-PP revision 2 fields
       - Skip uncore frequency update on newer generations of CPUs

   - Miscellaneous cleanups / refactoring / improvements"

* tag 'platform-drivers-x86-v6.16-1' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86: (112 commits)
  thermal/drivers/acerhdf: Constify struct thermal_zone_device_ops
  platform/x86/amd/hsmp: fix building with CONFIG_HWMON=m
  platform/x86: asus-wmi: fix build without CONFIG_SUSPEND
  docs: ABI: Fix "aassociated" to "associated"
  platform/x86: Add AMD ISP platform config for OV05C10
  Documentation: admin-guide: pm: Add documentation for die_id
  platform/x86/intel-uncore-freq: Add attributes to show die_id
  platform/x86/intel: power-domains: Add interface to get Linux die ID
  Documentation: admin-guide: pm: Add documentation for agent_types
  platform/x86/intel-uncore-freq: Add attributes to show agent types
  platform/x86/tuxedo: Prevent invalid Kconfig state
  platform/x86: dell-ddv: Expose the battery health to userspace
  platform/x86: dell-ddv: Expose the battery manufacture date to userspace
  platform/x86: dell-ddv: Implement the battery matching algorithm
  power: supply: core: Add additional health status values
  platform/x86/amd/hsmp: acpi: Add sysfs files to display HSMP telemetry
  platform/x86/amd/hsmp: Report power via hwmon sensors
  platform/x86/amd/hsmp: Use a single DRIVER_VERSION for all hsmp modules
  platform/mellanox: mlxreg-dpu: Fix smatch warnings
  platform: mellanox: nvsw-sn2200: Fix .items in nvsw_sn2201_busbar_hotplug
  ...

16 files changed:
1  2 
Documentation/ABI/testing/sysfs-class-power
MAINTAINERS
drivers/platform/x86/amd/hsmp/acpi.c
drivers/platform/x86/amd/hsmp/hsmp.c
drivers/platform/x86/amd/hsmp/hwmon.c
drivers/platform/x86/amd/hsmp/plat.c
drivers/platform/x86/intel/int0002_vgpio.c
drivers/platform/x86/intel/pmc/arl.c
drivers/platform/x86/intel/pmc/core.c
drivers/platform/x86/intel/speed_select_if/isst_if_common.c
drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
drivers/platform/x86/intel/tpmi_power_domains.c
drivers/platform/x86/thinkpad_acpi.c
drivers/power/supply/power_supply_sysfs.c
drivers/power/supply/test_power.c
include/linux/power_supply.h

diff --cc MAINTAINERS
Simple merge
@@@ -9,9 -9,12 +9,12 @@@
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  
 -#include <asm/amd_hsmp.h>
 +#include <asm/amd/hsmp.h>
  
  #include <linux/acpi.h>
+ #include <linux/array_size.h>
+ #include <linux/bits.h>
+ #include <linux/bitfield.h>
  #include <linux/device.h>
  #include <linux/dev_printk.h>
  #include <linux/ioport.h>
Simple merge
index 0000000,7ffb61e..0cc9a74
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,121 +1,121 @@@
 -#include <asm/amd_hsmp.h>
+ // SPDX-License-Identifier: GPL-2.0
+ /*
+  * AMD HSMP hwmon support
+  * Copyright (c) 2025, AMD.
+  * All Rights Reserved.
+  *
+  * This file provides hwmon implementation for HSMP interface.
+  */
++#include <asm/amd/hsmp.h>
+ #include <linux/device.h>
+ #include <linux/err.h>
+ #include <linux/hwmon.h>
+ #include <linux/types.h>
+ #include <linux/units.h>
+ #include "hsmp.h"
+ #define HSMP_HWMON_NAME               "amd_hsmp_hwmon"
+ static int hsmp_hwmon_write(struct device *dev, enum hwmon_sensor_types type,
+                           u32 attr, int channel, long val)
+ {
+       u16 sock_ind = (uintptr_t)dev_get_drvdata(dev);
+       struct hsmp_message msg = {};
+       if (type != hwmon_power)
+               return -EOPNOTSUPP;
+       if (attr != hwmon_power_cap)
+               return -EOPNOTSUPP;
+       msg.num_args = 1;
+       msg.args[0] = val / MICROWATT_PER_MILLIWATT;
+       msg.msg_id = HSMP_SET_SOCKET_POWER_LIMIT;
+       msg.sock_ind = sock_ind;
+       return hsmp_send_message(&msg);
+ }
+ static int hsmp_hwmon_read(struct device *dev,
+                          enum hwmon_sensor_types type,
+                          u32 attr, int channel, long *val)
+ {
+       u16 sock_ind = (uintptr_t)dev_get_drvdata(dev);
+       struct hsmp_message msg = {};
+       int ret;
+       if (type != hwmon_power)
+               return -EOPNOTSUPP;
+       msg.sock_ind = sock_ind;
+       msg.response_sz = 1;
+       switch (attr) {
+       case hwmon_power_input:
+               msg.msg_id = HSMP_GET_SOCKET_POWER;
+               break;
+       case hwmon_power_cap:
+               msg.msg_id = HSMP_GET_SOCKET_POWER_LIMIT;
+               break;
+       case hwmon_power_cap_max:
+               msg.msg_id = HSMP_GET_SOCKET_POWER_LIMIT_MAX;
+               break;
+       default:
+               return -EOPNOTSUPP;
+       }
+       ret = hsmp_send_message(&msg);
+       if (!ret)
+               *val = msg.args[0] * MICROWATT_PER_MILLIWATT;
+       return ret;
+ }
+ static umode_t hsmp_hwmon_is_visble(const void *data,
+                                   enum hwmon_sensor_types type,
+                                   u32 attr, int channel)
+ {
+       if (type != hwmon_power)
+               return 0;
+       switch (attr) {
+       case hwmon_power_input:
+               return 0444;
+       case hwmon_power_cap:
+               return 0644;
+       case hwmon_power_cap_max:
+               return 0444;
+       default:
+               return 0;
+       }
+ }
+ static const struct hwmon_ops hsmp_hwmon_ops = {
+       .read = hsmp_hwmon_read,
+       .is_visible = hsmp_hwmon_is_visble,
+       .write  = hsmp_hwmon_write,
+ };
+ static const struct hwmon_channel_info * const hsmp_info[] = {
+       HWMON_CHANNEL_INFO(power, HWMON_P_INPUT | HWMON_P_CAP | HWMON_P_CAP_MAX),
+       NULL
+ };
+ static const struct hwmon_chip_info hsmp_chip_info = {
+       .ops = &hsmp_hwmon_ops,
+       .info = hsmp_info,
+ };
+ int hsmp_create_sensor(struct device *dev, u16 sock_ind)
+ {
+       struct device *hwmon_dev;
+       hwmon_dev = devm_hwmon_device_register_with_info(dev, HSMP_HWMON_NAME,
+                                                        (void *)(uintptr_t)sock_ind,
+                                                        &hsmp_chip_info,
+                                                        NULL);
+       return PTR_ERR_OR_ZERO(hwmon_dev);
+ }
+ EXPORT_SYMBOL_NS(hsmp_create_sensor, "AMD_HSMP");
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -228,9 -214,8 +228,10 @@@ static const struct power_supply_desc t
                .property_is_writeable = test_power_battery_property_is_writeable,
                .charge_behaviours = BIT(POWER_SUPPLY_CHARGE_BEHAVIOUR_AUTO)
                                   | BIT(POWER_SUPPLY_CHARGE_BEHAVIOUR_INHIBIT_CHARGE)
+                                  | BIT(POWER_SUPPLY_CHARGE_BEHAVIOUR_INHIBIT_CHARGE_AWAKE)
                                   | BIT(POWER_SUPPLY_CHARGE_BEHAVIOUR_FORCE_DISCHARGE),
 +              .charge_types = BIT(POWER_SUPPLY_CHARGE_TYPE_STANDARD)
 +                                 | BIT(POWER_SUPPLY_CHARGE_TYPE_LONGLIFE)
        },
        [TEST_USB] = {
                .name = "test_usb",
Simple merge