mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
Merge tag 'platform-drivers-x86-v6.18-4' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86
Pull x86 platform driver fixes from Ilpo Järvinen:
"This one has lots of new HW entries which adds to the size in diffstat
but the individual changes are simple.
Fixes
- acer-wmi: Ignore backlight event
- alienware-wmi-wmax: Fix quirk match table order & drop redundant
entries
- amd/pmc:
- Add Xbox Ally to spurious 8042 quirk list
- Quirk list Lenovo Legion Go 2 NVMe resume
- msi-wmi-platform:
- Correct GUID to uppercase
- GUID is uncleverly copy-pasted from an example so add a DMI
whitelist
- intel/speed_select_if: PCIBIOS_* return code conversion
- intel-uncore-freq & ISST: Fix kernel doc warnings
New HW support
- alienware-wmi-wmax:
- Alienware 16 Aurora support
- Alienware M support
- Alienware X support
- Dell G support
- amd/pmc:
- ROG Xbox Ally (non-X) support
- huaway-wmi: HONOR MagicBoox X16/X14 PrintScreen & YOYO keys
- hp-wmi:
- Omen 16-wf1xxx fan support
- Omen MAX 16-ah0xx fan + thermal profile support
- Victus 16-r0 and 16-s0 fan + thermal profile support
- intel/hid: Intel Nova Lake support
- intel-uncore-freq:
- Intel Panther Lake support
- Intel Wildcat Lake support
- Intel Nova Lake support"
* tag 'platform-drivers-x86-v6.18-4' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86: (21 commits)
platform/x86: intel-uncore-freq: fix all header kernel-doc warnings
platform/x86: acer-wmi: Ignore backlight event
platform/x86/intel/speed_select_if: Convert PCIBIOS_* return codes to errnos
platform/x86/intel/hid: Add Nova Lake support
platform/x86: alienware-wmi-wmax: Add AWCC support to Alienware 16 Aurora
platform/x86: hp-wmi: Add Omen MAX 16-ah0xx fan support and thermal profile
platform/x86: msi-wmi-platform: Fix typo in WMI GUID
platform/x86: msi-wmi-platform: Only load on MSI devices
platform/x86/amd: pmc: Add Lenovo Legion Go 2 to pmc quirk list
platform/x86/amd/pmc: Add spurious_8042 to Xbox Ally
platform/x86/amd/pmc: Add support for Van Gogh SoC
platform/x86: alienware-wmi-wmax: Add support for the whole "G" family
platform/x86: alienware-wmi-wmax: Add support for the whole "X" family
platform/x86: alienware-wmi-wmax: Add support for the whole "M" family
platform/x86: alienware-wmi-wmax: Drop redundant DMI entries
platform/x86: alienware-wmi-wmax: Fix "Alienware m16 R1 AMD" quirk order
platform/x86: ISST: isst_if.h: fix all kernel-doc warnings
platform/x86: intel-uncore-freq: Add additional client processors
platform/x86: hp-wmi: Add Omen 16-wf1xxx fan support
platform/x86: huawei-wmi: add keys for HONOR models
...
This commit is contained in:
@@ -54,6 +54,7 @@ to matching WMI devices using a struct wmi_device_id table:
|
||||
::
|
||||
|
||||
static const struct wmi_device_id foo_id_table[] = {
|
||||
/* Only use uppercase letters! */
|
||||
{ "936DA01F-9ABD-4D9D-80C7-02AF85C822A8", NULL },
|
||||
{ }
|
||||
};
|
||||
|
||||
@@ -545,6 +545,7 @@ config MSI_WMI
|
||||
config MSI_WMI_PLATFORM
|
||||
tristate "MSI WMI Platform features"
|
||||
depends on ACPI_WMI
|
||||
depends on DMI
|
||||
depends on HWMON
|
||||
help
|
||||
Say Y here if you want to have support for WMI-based platform features
|
||||
|
||||
@@ -102,6 +102,7 @@ MODULE_ALIAS("wmi:676AA15E-6A47-4D9F-A2CC-1E6D18D14026");
|
||||
|
||||
enum acer_wmi_event_ids {
|
||||
WMID_HOTKEY_EVENT = 0x1,
|
||||
WMID_BACKLIGHT_EVENT = 0x4,
|
||||
WMID_ACCEL_OR_KBD_DOCK_EVENT = 0x5,
|
||||
WMID_GAMING_TURBO_KEY_EVENT = 0x7,
|
||||
WMID_AC_EVENT = 0x8,
|
||||
@@ -2369,6 +2370,9 @@ static void acer_wmi_notify(union acpi_object *obj, void *context)
|
||||
sparse_keymap_report_event(acer_wmi_input_dev, scancode, 1, true);
|
||||
}
|
||||
break;
|
||||
case WMID_BACKLIGHT_EVENT:
|
||||
/* Already handled by acpi-video */
|
||||
break;
|
||||
case WMID_ACCEL_OR_KBD_DOCK_EVENT:
|
||||
acer_gsensor_event();
|
||||
acer_kbd_dock_event(&return_value);
|
||||
|
||||
@@ -122,6 +122,14 @@ static const struct dmi_system_id fwbug_list[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21A1"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.ident = "ROG Xbox Ally RC73YA",
|
||||
.driver_data = &quirk_spurious_8042,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "RC73YA"),
|
||||
}
|
||||
},
|
||||
/* https://bugzilla.kernel.org/show_bug.cgi?id=218024 */
|
||||
{
|
||||
.ident = "V14 G4 AMN",
|
||||
@@ -204,6 +212,23 @@ static const struct dmi_system_id fwbug_list[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "82ND"),
|
||||
}
|
||||
},
|
||||
/* https://gitlab.freedesktop.org/drm/amd/-/issues/4618 */
|
||||
{
|
||||
.ident = "Lenovo Legion Go 2",
|
||||
.driver_data = &quirk_s2idle_bug,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "83N0"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo Legion Go 2",
|
||||
.driver_data = &quirk_s2idle_bug,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "83N1"),
|
||||
}
|
||||
},
|
||||
/* https://gitlab.freedesktop.org/drm/amd/-/issues/2684 */
|
||||
{
|
||||
.ident = "HP Laptop 15s-eq2xxx",
|
||||
|
||||
@@ -106,6 +106,7 @@ static void amd_pmc_get_ip_info(struct amd_pmc_dev *dev)
|
||||
switch (dev->cpu_id) {
|
||||
case AMD_CPU_ID_PCO:
|
||||
case AMD_CPU_ID_RN:
|
||||
case AMD_CPU_ID_VG:
|
||||
case AMD_CPU_ID_YC:
|
||||
case AMD_CPU_ID_CB:
|
||||
dev->num_ips = 12;
|
||||
@@ -517,6 +518,7 @@ static int amd_pmc_get_os_hint(struct amd_pmc_dev *dev)
|
||||
case AMD_CPU_ID_PCO:
|
||||
return MSG_OS_HINT_PCO;
|
||||
case AMD_CPU_ID_RN:
|
||||
case AMD_CPU_ID_VG:
|
||||
case AMD_CPU_ID_YC:
|
||||
case AMD_CPU_ID_CB:
|
||||
case AMD_CPU_ID_PS:
|
||||
@@ -717,6 +719,7 @@ static const struct pci_device_id pmc_pci_ids[] = {
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_RV) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_SP) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_SHP) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_VG) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_ROOT) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_ROOT) },
|
||||
{ }
|
||||
|
||||
@@ -156,6 +156,7 @@ void amd_mp2_stb_deinit(struct amd_pmc_dev *dev);
|
||||
#define AMD_CPU_ID_RN 0x1630
|
||||
#define AMD_CPU_ID_PCO AMD_CPU_ID_RV
|
||||
#define AMD_CPU_ID_CZN AMD_CPU_ID_RN
|
||||
#define AMD_CPU_ID_VG 0x1645
|
||||
#define AMD_CPU_ID_YC 0x14B5
|
||||
#define AMD_CPU_ID_CB 0x14D8
|
||||
#define AMD_CPU_ID_PS 0x14E8
|
||||
|
||||
@@ -89,6 +89,14 @@ static struct awcc_quirks generic_quirks = {
|
||||
static struct awcc_quirks empty_quirks;
|
||||
|
||||
static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
||||
{
|
||||
.ident = "Alienware 16 Aurora",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware 16 Aurora"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware Area-51m",
|
||||
.matches = {
|
||||
@@ -98,26 +106,18 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware Area-51m R2",
|
||||
.ident = "Alienware m15",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware Area-51m R2"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m15 R5",
|
||||
.ident = "Alienware m16 R1 AMD",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15 R5"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m15 R7",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15 R7"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
@@ -129,14 +129,6 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m16 R1 AMD",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m16 R2",
|
||||
.matches = {
|
||||
@@ -146,114 +138,66 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m17 R5",
|
||||
.ident = "Alienware m17",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m18 R2",
|
||||
.ident = "Alienware m18",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware x15 R1",
|
||||
.ident = "Alienware x15",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware x15 R2",
|
||||
.ident = "Alienware x17",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R2"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware x17 R2",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G15 5510",
|
||||
.ident = "Dell Inc. G15",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G15 5511",
|
||||
.ident = "Dell Inc. G16",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G16"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G15 5515",
|
||||
.ident = "Dell Inc. G3",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G3"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G15 5530",
|
||||
.ident = "Dell Inc. G5",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5530"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G16 7630",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G16 7630"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G3 3500",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G3 3590",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G5 5500",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G5 5505",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G5 5505"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G5"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
|
||||
@@ -92,9 +92,11 @@ static const char * const victus_thermal_profile_boards[] = {
|
||||
"8A25"
|
||||
};
|
||||
|
||||
/* DMI Board names of Victus 16-r1000 and Victus 16-s1000 laptops */
|
||||
/* DMI Board names of Victus 16-r and Victus 16-s laptops */
|
||||
static const char * const victus_s_thermal_profile_boards[] = {
|
||||
"8C99", "8C9C"
|
||||
"8BBE", "8BD4", "8BD5",
|
||||
"8C78", "8C99", "8C9C",
|
||||
"8D41",
|
||||
};
|
||||
|
||||
enum hp_wmi_radio {
|
||||
|
||||
@@ -81,6 +81,10 @@ static const struct key_entry huawei_wmi_keymap[] = {
|
||||
{ KE_KEY, 0x289, { KEY_WLAN } },
|
||||
// Huawei |M| key
|
||||
{ KE_KEY, 0x28a, { KEY_CONFIG } },
|
||||
// HONOR YOYO key
|
||||
{ KE_KEY, 0x28b, { KEY_NOTIFICATION_CENTER } },
|
||||
// HONOR print screen
|
||||
{ KE_KEY, 0x28e, { KEY_PRINT } },
|
||||
// Keyboard backlit
|
||||
{ KE_IGNORE, 0x293, { KEY_KBDILLUMTOGGLE } },
|
||||
{ KE_IGNORE, 0x294, { KEY_KBDILLUMUP } },
|
||||
|
||||
@@ -55,6 +55,7 @@ static const struct acpi_device_id intel_hid_ids[] = {
|
||||
{ "INTC10CB" },
|
||||
{ "INTC10CC" },
|
||||
{ "INTC10F1" },
|
||||
{ "INTC10F2" },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, intel_hid_ids);
|
||||
|
||||
@@ -108,11 +108,11 @@ static int isst_if_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
||||
ret = pci_read_config_dword(pdev, 0xD0, &mmio_base);
|
||||
if (ret)
|
||||
return ret;
|
||||
return pcibios_err_to_errno(ret);
|
||||
|
||||
ret = pci_read_config_dword(pdev, 0xFC, &pcu_base);
|
||||
if (ret)
|
||||
return ret;
|
||||
return pcibios_err_to_errno(ret);
|
||||
|
||||
pcu_base &= GENMASK(10, 0);
|
||||
base_addr = (u64)mmio_base << 23 | (u64) pcu_base << 12;
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
* @agent_type_mask: Bit mask of all hardware agents for this domain
|
||||
* @uncore_attr_group: Attribute group storage
|
||||
* @max_freq_khz_kobj_attr: Storage for kobject attribute max_freq_khz
|
||||
* @mix_freq_khz_kobj_attr: Storage for kobject attribute min_freq_khz
|
||||
* @min_freq_khz_kobj_attr: Storage for kobject attribute min_freq_khz
|
||||
* @initial_max_freq_khz_kobj_attr: Storage for kobject attribute initial_max_freq_khz
|
||||
* @initial_min_freq_khz_kobj_attr: Storage for kobject attribute initial_min_freq_khz
|
||||
* @current_freq_khz_kobj_attr: Storage for kobject attribute current_freq_khz
|
||||
@@ -48,13 +48,14 @@
|
||||
* @fabric_cluster_id_kobj_attr: Storage for kobject attribute fabric_cluster_id
|
||||
* @package_id_kobj_attr: Storage for kobject attribute package_id
|
||||
* @elc_low_threshold_percent_kobj_attr:
|
||||
Storage for kobject attribute elc_low_threshold_percent
|
||||
* Storage for kobject attribute elc_low_threshold_percent
|
||||
* @elc_high_threshold_percent_kobj_attr:
|
||||
Storage for kobject attribute elc_high_threshold_percent
|
||||
* Storage for kobject attribute elc_high_threshold_percent
|
||||
* @elc_high_threshold_enable_kobj_attr:
|
||||
Storage for kobject attribute elc_high_threshold_enable
|
||||
* Storage for kobject attribute elc_high_threshold_enable
|
||||
* @elc_floor_freq_khz_kobj_attr: Storage for kobject attribute elc_floor_freq_khz
|
||||
* @agent_types_kobj_attr: Storage for kobject attribute agent_type
|
||||
* @die_id_kobj_attr: Attribute storage for die_id information
|
||||
* @uncore_attrs: Attribute storage for group creation
|
||||
*
|
||||
* This structure is used to encapsulate all data related to uncore sysfs
|
||||
|
||||
@@ -256,6 +256,10 @@ static const struct x86_cpu_id intel_uncore_cpu_ids[] = {
|
||||
X86_MATCH_VFM(INTEL_ARROWLAKE, NULL),
|
||||
X86_MATCH_VFM(INTEL_ARROWLAKE_H, NULL),
|
||||
X86_MATCH_VFM(INTEL_LUNARLAKE_M, NULL),
|
||||
X86_MATCH_VFM(INTEL_PANTHERLAKE_L, NULL),
|
||||
X86_MATCH_VFM(INTEL_WILDCATLAKE_L, NULL),
|
||||
X86_MATCH_VFM(INTEL_NOVALAKE, NULL),
|
||||
X86_MATCH_VFM(INTEL_NOVALAKE_L, NULL),
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(x86cpu, intel_uncore_cpu_ids);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/device/driver.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/hwmon.h>
|
||||
#include <linux/kernel.h>
|
||||
@@ -28,7 +29,7 @@
|
||||
|
||||
#define DRIVER_NAME "msi-wmi-platform"
|
||||
|
||||
#define MSI_PLATFORM_GUID "ABBC0F6E-8EA1-11d1-00A0-C90629100000"
|
||||
#define MSI_PLATFORM_GUID "ABBC0F6E-8EA1-11D1-00A0-C90629100000"
|
||||
|
||||
#define MSI_WMI_PLATFORM_INTERFACE_VERSION 2
|
||||
|
||||
@@ -448,7 +449,45 @@ static struct wmi_driver msi_wmi_platform_driver = {
|
||||
.probe = msi_wmi_platform_probe,
|
||||
.no_singleton = true,
|
||||
};
|
||||
module_wmi_driver(msi_wmi_platform_driver);
|
||||
|
||||
/*
|
||||
* MSI reused the WMI GUID from the WMI-ACPI sample code provided by Microsoft,
|
||||
* so other manufacturers might use it as well for their WMI-ACPI implementations.
|
||||
*/
|
||||
static const struct dmi_system_id msi_wmi_platform_whitelist[] __initconst = {
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "MICRO-STAR INT"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int __init msi_wmi_platform_module_init(void)
|
||||
{
|
||||
if (!dmi_check_system(msi_wmi_platform_whitelist)) {
|
||||
if (!force)
|
||||
return -ENODEV;
|
||||
|
||||
pr_warn("Ignoring DMI whitelist\n");
|
||||
}
|
||||
|
||||
return wmi_driver_register(&msi_wmi_platform_driver);
|
||||
}
|
||||
|
||||
static void __exit msi_wmi_platform_module_exit(void)
|
||||
{
|
||||
wmi_driver_unregister(&msi_wmi_platform_driver);
|
||||
}
|
||||
|
||||
module_init(msi_wmi_platform_module_init);
|
||||
module_exit(msi_wmi_platform_module_exit);
|
||||
|
||||
|
||||
MODULE_AUTHOR("Armin Wolf <W_Armin@gmx.de>");
|
||||
MODULE_DESCRIPTION("MSI WMI platform features");
|
||||
|
||||
@@ -52,7 +52,7 @@ struct isst_if_cpu_map {
|
||||
/**
|
||||
* struct isst_if_cpu_maps - structure for CPU map IOCTL
|
||||
* @cmd_count: Number of CPU mapping command in cpu_map[]
|
||||
* @cpu_map[]: Holds one or more CPU map data structure
|
||||
* @cpu_map: Holds one or more CPU map data structure
|
||||
*
|
||||
* This structure used with ioctl ISST_IF_GET_PHY_ID to send
|
||||
* one or more CPU mapping commands. Here IOCTL return value indicates
|
||||
@@ -82,8 +82,8 @@ struct isst_if_io_reg {
|
||||
|
||||
/**
|
||||
* struct isst_if_io_regs - structure for IO register commands
|
||||
* @cmd_count: Number of io reg commands in io_reg[]
|
||||
* @io_reg[]: Holds one or more io_reg command structure
|
||||
* @req_count: Number of io reg commands in io_reg[]
|
||||
* @io_reg: Holds one or more io_reg command structure
|
||||
*
|
||||
* This structure used with ioctl ISST_IF_IO_CMD to send
|
||||
* one or more read/write commands to PUNIT. Here IOCTL return value
|
||||
@@ -120,7 +120,7 @@ struct isst_if_mbox_cmd {
|
||||
/**
|
||||
* struct isst_if_mbox_cmds - structure for mailbox commands
|
||||
* @cmd_count: Number of mailbox commands in mbox_cmd[]
|
||||
* @mbox_cmd[]: Holds one or more mbox commands
|
||||
* @mbox_cmd: Holds one or more mbox commands
|
||||
*
|
||||
* This structure used with ioctl ISST_IF_MBOX_COMMAND to send
|
||||
* one or more mailbox commands to PUNIT. Here IOCTL return value
|
||||
@@ -152,7 +152,7 @@ struct isst_if_msr_cmd {
|
||||
/**
|
||||
* struct isst_if_msr_cmds - structure for msr commands
|
||||
* @cmd_count: Number of mailbox commands in msr_cmd[]
|
||||
* @msr_cmd[]: Holds one or more msr commands
|
||||
* @msr_cmd: Holds one or more msr commands
|
||||
*
|
||||
* This structure used with ioctl ISST_IF_MSR_COMMAND to send
|
||||
* one or more MSR commands. IOCTL return value indicates number of
|
||||
@@ -167,8 +167,9 @@ struct isst_if_msr_cmds {
|
||||
* struct isst_core_power - Structure to get/set core_power feature
|
||||
* @get_set: 0: Get, 1: Set
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @enable: Feature enable status
|
||||
* @supported: Power domain supports SST_CP interface
|
||||
* @priority_type: Priority type for the feature (ordered/proportional)
|
||||
*
|
||||
* Structure to get/set core_power feature state using IOCTL
|
||||
@@ -187,11 +188,11 @@ struct isst_core_power {
|
||||
* struct isst_clos_param - Structure to get/set clos praram
|
||||
* @get_set: 0: Get, 1: Set
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* clos: Clos ID for the parameters
|
||||
* min_freq_mhz: Minimum frequency in MHz
|
||||
* max_freq_mhz: Maximum frequency in MHz
|
||||
* prop_prio: Proportional priority from 0-15
|
||||
* @power_domain_id: Power Domain id
|
||||
* @clos: Clos ID for the parameters
|
||||
* @min_freq_mhz: Minimum frequency in MHz
|
||||
* @max_freq_mhz: Maximum frequency in MHz
|
||||
* @prop_prio: Proportional priority from 0-15
|
||||
*
|
||||
* Structure to get/set per clos property using IOCTL
|
||||
* ISST_IF_CLOS_PARAM.
|
||||
@@ -209,7 +210,7 @@ struct isst_clos_param {
|
||||
/**
|
||||
* struct isst_if_clos_assoc - Structure to assign clos to a CPU
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @logical_cpu: CPU number
|
||||
* @clos: Clos ID to assign to the logical CPU
|
||||
*
|
||||
@@ -228,6 +229,7 @@ struct isst_if_clos_assoc {
|
||||
* @get_set: Request is for get or set
|
||||
* @punit_cpu_map: Set to 1 if the CPU number is punit numbering not
|
||||
* Linux CPU number
|
||||
* @assoc_info: CLOS data for this CPU
|
||||
*
|
||||
* Structure used to get/set associate CPUs to clos using IOCTL
|
||||
* ISST_IF_CLOS_ASSOC.
|
||||
@@ -257,7 +259,7 @@ struct isst_tpmi_instance_count {
|
||||
/**
|
||||
* struct isst_perf_level_info - Structure to get information on SST-PP levels
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @logical_cpu: CPU number
|
||||
* @clos: Clos ID to assign to the logical CPU
|
||||
* @max_level: Maximum performance level supported by the platform
|
||||
@@ -267,8 +269,8 @@ struct isst_tpmi_instance_count {
|
||||
* @feature_state: SST-BF and SST-TF (enabled/disabled) status at current level
|
||||
* @locked: SST-PP performance level change is locked/unlocked
|
||||
* @enabled: SST-PP feature is enabled or not
|
||||
* @sst-tf_support: SST-TF support status at this level
|
||||
* @sst-bf_support: SST-BF support status at this level
|
||||
* @sst_tf_support: SST-TF support status at this level
|
||||
* @sst_bf_support: SST-BF support status at this level
|
||||
*
|
||||
* Structure to get SST-PP details using IOCTL ISST_IF_PERF_LEVELS.
|
||||
*/
|
||||
@@ -289,7 +291,7 @@ struct isst_perf_level_info {
|
||||
/**
|
||||
* struct isst_perf_level_control - Structure to set SST-PP level
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @level: level to set
|
||||
*
|
||||
* Structure used change SST-PP level using IOCTL ISST_IF_PERF_SET_LEVEL.
|
||||
@@ -303,7 +305,7 @@ struct isst_perf_level_control {
|
||||
/**
|
||||
* struct isst_perf_feature_control - Structure to activate SST-BF/SST-TF
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @feature: bit 0 = SST-BF state, bit 1 = SST-TF state
|
||||
*
|
||||
* Structure used to enable SST-BF/SST-TF using IOCTL ISST_IF_PERF_SET_FEATURE.
|
||||
@@ -320,7 +322,7 @@ struct isst_perf_feature_control {
|
||||
/**
|
||||
* struct isst_perf_level_data_info - Structure to get SST-PP level details
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @level: SST-PP level for which caller wants to get information
|
||||
* @tdp_ratio: TDP Ratio
|
||||
* @base_freq_mhz: Base frequency in MHz
|
||||
@@ -341,8 +343,8 @@ struct isst_perf_feature_control {
|
||||
* @pm_fabric_freq_mhz: Fabric (Uncore) minimum frequency
|
||||
* @max_buckets: Maximum trl buckets
|
||||
* @max_trl_levels: Maximum trl levels
|
||||
* @bucket_core_counts[TRL_MAX_BUCKETS]: Number of cores per bucket
|
||||
* @trl_freq_mhz[TRL_MAX_LEVELS][TRL_MAX_BUCKETS]: maximum frequency
|
||||
* @bucket_core_counts: Number of cores per bucket
|
||||
* @trl_freq_mhz: maximum frequency
|
||||
* for a bucket and trl level
|
||||
*
|
||||
* Structure used to get information on frequencies and TDP for a SST-PP
|
||||
@@ -402,7 +404,7 @@ struct isst_perf_level_fabric_info {
|
||||
/**
|
||||
* struct isst_perf_level_cpu_mask - Structure to get SST-PP level CPU mask
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @level: SST-PP level for which caller wants to get information
|
||||
* @punit_cpu_map: Set to 1 if the CPU number is punit numbering not
|
||||
* Linux CPU number. If 0 CPU buffer is copied to user space
|
||||
@@ -430,7 +432,7 @@ struct isst_perf_level_cpu_mask {
|
||||
/**
|
||||
* struct isst_base_freq_info - Structure to get SST-BF frequencies
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @level: SST-PP level for which caller wants to get information
|
||||
* @high_base_freq_mhz: High priority CPU base frequency
|
||||
* @low_base_freq_mhz: Low priority CPU base frequency
|
||||
@@ -453,9 +455,11 @@ struct isst_base_freq_info {
|
||||
/**
|
||||
* struct isst_turbo_freq_info - Structure to get SST-TF frequencies
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @level: SST-PP level for which caller wants to get information
|
||||
* @max_clip_freqs: Maximum number of low priority core clipping frequencies
|
||||
* @max_buckets: Maximum trl buckets
|
||||
* @max_trl_levels: Maximum trl levels
|
||||
* @lp_clip_freq_mhz: Clip frequencies per trl level
|
||||
* @bucket_core_counts: Maximum number of cores for a bucket
|
||||
* @trl_freq_mhz: Frequencies per trl level for each bucket
|
||||
|
||||
Reference in New Issue
Block a user