Commit c8d9f2c7 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'platform-drivers-x86-v6.12-2' of...

Merge tag 'platform-drivers-x86-v6.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86

Pull x86 platform driver fixes from Hans de Goede:

 - Intel PMC fix for suspend/resume issues on some Sky and Kaby Lake
   laptops

 - Intel Diamond Rapids hw-id additions

 - Documentation and MAINTAINERS fixes

 - Some other small fixes

* tag 'platform-drivers-x86-v6.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86:
  platform/x86: x86-android-tablets: Fix use after free on platform_device_register() errors
  platform/x86: wmi: Update WMI driver API documentation
  platform/x86: dell-ddv: Fix typo in documentation
  platform/x86: dell-sysman: add support for alienware products
  platform/x86/intel: power-domains: Add Diamond Rapids support
  platform/x86: ISST: Add Diamond Rapids to support list
  platform/x86:intel/pmc: Disable ACPI PM Timer disabling on Sky and Kaby Lake
  platform/x86: dell-laptop: Do not fail when encountering unsupported batteries
  MAINTAINERS: Update Intel In Field Scan(IFS) entry
  platform/x86: ISST: Fix the KASAN report slab-out-of-bounds bug
parents 4563243e 2fae3129
...@@ -7,12 +7,11 @@ WMI Driver API ...@@ -7,12 +7,11 @@ WMI Driver API
The WMI driver core supports a more modern bus-based interface for interacting The WMI driver core supports a more modern bus-based interface for interacting
with WMI devices, and an older GUID-based interface. The latter interface is with WMI devices, and an older GUID-based interface. The latter interface is
considered to be deprecated, so new WMI drivers should generally avoid it since considered to be deprecated, so new WMI drivers should generally avoid it since
it has some issues with multiple WMI devices and events sharing the same GUIDs it has some issues with multiple WMI devices sharing the same GUID.
and/or notification IDs. The modern bus-based interface instead maps each The modern bus-based interface instead maps each WMI device to a
WMI device to a :c:type:`struct wmi_device <wmi_device>`, so it supports :c:type:`struct wmi_device <wmi_device>`, so it supports WMI devices sharing the
WMI devices sharing GUIDs and/or notification IDs. Drivers can then register same GUID. Drivers can then register a :c:type:`struct wmi_driver <wmi_driver>`
a :c:type:`struct wmi_driver <wmi_driver>`, which will be bound to compatible which will be bound to compatible WMI devices by the driver core.
WMI devices by the driver core.
.. kernel-doc:: include/linux/wmi.h .. kernel-doc:: include/linux/wmi.h
:internal: :internal:
......
...@@ -8,7 +8,7 @@ Introduction ...@@ -8,7 +8,7 @@ Introduction
============ ============
Many Dell notebooks made after ~2020 support a WMI-based interface for Many Dell notebooks made after ~2020 support a WMI-based interface for
retrieving various system data like battery temperature, ePPID, diagostic data retrieving various system data like battery temperature, ePPID, diagnostic data
and fan/thermal sensor data. and fan/thermal sensor data.
This interface is likely used by the `Dell Data Vault` software on Windows, This interface is likely used by the `Dell Data Vault` software on Windows,
...@@ -277,7 +277,7 @@ Reverse-Engineering the DDV WMI interface ...@@ -277,7 +277,7 @@ Reverse-Engineering the DDV WMI interface
4. Try to deduce the meaning of a certain WMI method by comparing the control 4. Try to deduce the meaning of a certain WMI method by comparing the control
flow with other ACPI methods (_BIX or _BIF for battery related methods flow with other ACPI methods (_BIX or _BIF for battery related methods
for example). for example).
5. Use the built-in UEFI diagostics to view sensor types/values for fan/thermal 5. Use the built-in UEFI diagnostics to view sensor types/values for fan/thermal
related methods (sometimes overwriting static ACPI data fields can be used related methods (sometimes overwriting static ACPI data fields can be used
to test different sensor type values, since on some machines this data is to test different sensor type values, since on some machines this data is
not reinitialized upon a warm reset). not reinitialized upon a warm reset).
......
...@@ -11499,7 +11499,7 @@ F: include/uapi/linux/idxd.h ...@@ -11499,7 +11499,7 @@ F: include/uapi/linux/idxd.h
INTEL IN FIELD SCAN (IFS) DEVICE INTEL IN FIELD SCAN (IFS) DEVICE
M: Jithu Joseph <jithu.joseph@intel.com> M: Jithu Joseph <jithu.joseph@intel.com>
R: Ashok Raj <ashok.raj@intel.com> R: Ashok Raj <ashok.raj.linux@gmail.com>
R: Tony Luck <tony.luck@intel.com> R: Tony Luck <tony.luck@intel.com>
S: Maintained S: Maintained
F: drivers/platform/x86/intel/ifs F: drivers/platform/x86/intel/ifs
......
...@@ -2391,12 +2391,18 @@ static struct attribute *dell_battery_attrs[] = { ...@@ -2391,12 +2391,18 @@ static struct attribute *dell_battery_attrs[] = {
}; };
ATTRIBUTE_GROUPS(dell_battery); ATTRIBUTE_GROUPS(dell_battery);
static bool dell_battery_supported(struct power_supply *battery)
{
/* We currently only support the primary battery */
return strcmp(battery->desc->name, "BAT0") == 0;
}
static int dell_battery_add(struct power_supply *battery, static int dell_battery_add(struct power_supply *battery,
struct acpi_battery_hook *hook) struct acpi_battery_hook *hook)
{ {
/* this currently only supports the primary battery */ /* Return 0 instead of an error to avoid being unloaded */
if (strcmp(battery->desc->name, "BAT0") != 0) if (!dell_battery_supported(battery))
return -ENODEV; return 0;
return device_add_groups(&battery->dev, dell_battery_groups); return device_add_groups(&battery->dev, dell_battery_groups);
} }
...@@ -2404,6 +2410,9 @@ static int dell_battery_add(struct power_supply *battery, ...@@ -2404,6 +2410,9 @@ static int dell_battery_add(struct power_supply *battery,
static int dell_battery_remove(struct power_supply *battery, static int dell_battery_remove(struct power_supply *battery,
struct acpi_battery_hook *hook) struct acpi_battery_hook *hook)
{ {
if (!dell_battery_supported(battery))
return 0;
device_remove_groups(&battery->dev, dell_battery_groups); device_remove_groups(&battery->dev, dell_battery_groups);
return 0; return 0;
} }
......
...@@ -521,6 +521,7 @@ static int __init sysman_init(void) ...@@ -521,6 +521,7 @@ static int __init sysman_init(void)
int ret = 0; int ret = 0;
if (!dmi_find_device(DMI_DEV_TYPE_OEM_STRING, "Dell System", NULL) && if (!dmi_find_device(DMI_DEV_TYPE_OEM_STRING, "Dell System", NULL) &&
!dmi_find_device(DMI_DEV_TYPE_OEM_STRING, "Alienware", NULL) &&
!dmi_find_device(DMI_DEV_TYPE_OEM_STRING, "www.dell.com", NULL)) { !dmi_find_device(DMI_DEV_TYPE_OEM_STRING, "www.dell.com", NULL)) {
pr_err("Unable to run on non-Dell system\n"); pr_err("Unable to run on non-Dell system\n");
return -ENODEV; return -ENODEV;
......
...@@ -130,8 +130,6 @@ const struct pmc_reg_map spt_reg_map = { ...@@ -130,8 +130,6 @@ const struct pmc_reg_map spt_reg_map = {
.ppfear_buckets = SPT_PPFEAR_NUM_ENTRIES, .ppfear_buckets = SPT_PPFEAR_NUM_ENTRIES,
.pm_cfg_offset = SPT_PMC_PM_CFG_OFFSET, .pm_cfg_offset = SPT_PMC_PM_CFG_OFFSET,
.pm_read_disable_bit = SPT_PMC_READ_DISABLE_BIT, .pm_read_disable_bit = SPT_PMC_READ_DISABLE_BIT,
.acpi_pm_tmr_ctl_offset = SPT_PMC_ACPI_PM_TMR_CTL_OFFSET,
.acpi_pm_tmr_disable_bit = SPT_PMC_BIT_ACPI_PM_TMR_DISABLE,
.ltr_ignore_max = SPT_NUM_IP_IGN_ALLOWED, .ltr_ignore_max = SPT_NUM_IP_IGN_ALLOWED,
.pm_vric1_offset = SPT_PMC_VRIC1_OFFSET, .pm_vric1_offset = SPT_PMC_VRIC1_OFFSET,
}; };
......
...@@ -316,7 +316,9 @@ static struct pci_dev *_isst_if_get_pci_dev(int cpu, int bus_no, int dev, int fn ...@@ -316,7 +316,9 @@ static struct pci_dev *_isst_if_get_pci_dev(int cpu, int bus_no, int dev, int fn
cpu >= nr_cpu_ids || cpu >= num_possible_cpus()) cpu >= nr_cpu_ids || cpu >= num_possible_cpus())
return NULL; return NULL;
pkg_id = topology_physical_package_id(cpu); pkg_id = topology_logical_package_id(cpu);
if (pkg_id >= topology_max_packages())
return NULL;
bus_number = isst_cpu_info[cpu].bus_info[bus_no]; bus_number = isst_cpu_info[cpu].bus_info[bus_no];
if (bus_number < 0) if (bus_number < 0)
...@@ -807,6 +809,7 @@ static const struct x86_cpu_id isst_cpu_ids[] = { ...@@ -807,6 +809,7 @@ static const struct x86_cpu_id isst_cpu_ids[] = {
X86_MATCH_VFM(INTEL_GRANITERAPIDS_X, SST_HPM_SUPPORTED), X86_MATCH_VFM(INTEL_GRANITERAPIDS_X, SST_HPM_SUPPORTED),
X86_MATCH_VFM(INTEL_ICELAKE_D, 0), X86_MATCH_VFM(INTEL_ICELAKE_D, 0),
X86_MATCH_VFM(INTEL_ICELAKE_X, 0), X86_MATCH_VFM(INTEL_ICELAKE_X, 0),
X86_MATCH_VFM(INTEL_PANTHERCOVE_X, SST_HPM_SUPPORTED),
X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X, 0), X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X, 0),
X86_MATCH_VFM(INTEL_SKYLAKE_X, SST_MBOX_SUPPORTED), X86_MATCH_VFM(INTEL_SKYLAKE_X, SST_MBOX_SUPPORTED),
{} {}
......
...@@ -82,6 +82,7 @@ static const struct x86_cpu_id tpmi_cpu_ids[] = { ...@@ -82,6 +82,7 @@ static const struct x86_cpu_id tpmi_cpu_ids[] = {
X86_MATCH_VFM(INTEL_ATOM_CRESTMONT_X, NULL), X86_MATCH_VFM(INTEL_ATOM_CRESTMONT_X, NULL),
X86_MATCH_VFM(INTEL_ATOM_CRESTMONT, NULL), X86_MATCH_VFM(INTEL_ATOM_CRESTMONT, NULL),
X86_MATCH_VFM(INTEL_GRANITERAPIDS_D, NULL), X86_MATCH_VFM(INTEL_GRANITERAPIDS_D, NULL),
X86_MATCH_VFM(INTEL_PANTHERCOVE_X, NULL),
{} {}
}; };
MODULE_DEVICE_TABLE(x86cpu, tpmi_cpu_ids); MODULE_DEVICE_TABLE(x86cpu, tpmi_cpu_ids);
......
...@@ -390,8 +390,9 @@ static __init int x86_android_tablet_probe(struct platform_device *pdev) ...@@ -390,8 +390,9 @@ static __init int x86_android_tablet_probe(struct platform_device *pdev)
for (i = 0; i < pdev_count; i++) { for (i = 0; i < pdev_count; i++) {
pdevs[i] = platform_device_register_full(&dev_info->pdev_info[i]); pdevs[i] = platform_device_register_full(&dev_info->pdev_info[i]);
if (IS_ERR(pdevs[i])) { if (IS_ERR(pdevs[i])) {
ret = PTR_ERR(pdevs[i]);
x86_android_tablet_remove(pdev); x86_android_tablet_remove(pdev);
return PTR_ERR(pdevs[i]); return ret;
} }
} }
...@@ -443,8 +444,9 @@ static __init int x86_android_tablet_probe(struct platform_device *pdev) ...@@ -443,8 +444,9 @@ static __init int x86_android_tablet_probe(struct platform_device *pdev)
PLATFORM_DEVID_AUTO, PLATFORM_DEVID_AUTO,
&pdata, sizeof(pdata)); &pdata, sizeof(pdata));
if (IS_ERR(pdevs[pdev_count])) { if (IS_ERR(pdevs[pdev_count])) {
ret = PTR_ERR(pdevs[pdev_count]);
x86_android_tablet_remove(pdev); x86_android_tablet_remove(pdev);
return PTR_ERR(pdevs[pdev_count]); return ret;
} }
pdev_count++; pdev_count++;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment