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 ...
Unified · Split
| @@ -54,6 +54,7 @@ to matching WMI devices using a struct wmi_device_id table: · 53 unmodified lines | ||
| 54 | 54 | :: |
| 55 | 55 | |
| 56 | 56 | static const struct wmi_device_id foo_id_table[] = { |
| 57 | + /* Only use uppercase letters! */ | |
| 57 | 58 | { "936DA01F-9ABD-4D9D-80C7-02AF85C822A8", NULL }, |
| 58 | 59 | { } |
| 59 | 60 | }; |
| @@ -545,6 +545,7 @@ config MSI_WMI · 544 unmodified lines | ||
| 545 | 545 | config MSI_WMI_PLATFORM |
| 546 | 546 | tristate "MSI WMI Platform features" |
| 547 | 547 | depends on ACPI_WMI |
| 548 | + depends on DMI | |
| 548 | 549 | depends on HWMON |
| 549 | 550 | help |
| 550 | 551 | 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"); · 101 unmodified lines | ||
| 102 | 102 | |
| 103 | 103 | enum acer_wmi_event_ids { |
| 104 | 104 | WMID_HOTKEY_EVENT = 0x1, |
| 105 | + WMID_BACKLIGHT_EVENT = 0x4, | |
| 105 | 106 | WMID_ACCEL_OR_KBD_DOCK_EVENT = 0x5, |
| 106 | 107 | WMID_GAMING_TURBO_KEY_EVENT = 0x7, |
| 107 | 108 | WMID_AC_EVENT = 0x8, |
| @@ -2369,6 +2370,9 @@ static void acer_wmi_notify(union acpi_object *obj, void *context) · 2261 unmodified lines | ||
| 2369 | 2370 | sparse_keymap_report_event(acer_wmi_input_dev, scancode, 1, true); |
| 2370 | 2371 | } |
| 2371 | 2372 | break; |
| 2373 | + case WMID_BACKLIGHT_EVENT: | |
| 2374 | + /* Already handled by acpi-video */ | |
| 2375 | + break; | |
| 2372 | 2376 | case WMID_ACCEL_OR_KBD_DOCK_EVENT: |
| 2373 | 2377 | acer_gsensor_event(); |
| 2374 | 2378 | acer_kbd_dock_event(&return_value); |
| @@ -122,6 +122,14 @@ static const struct dmi_system_id fwbug_list[] = { · 121 unmodified lines | ||
| 122 | 122 | DMI_MATCH(DMI_PRODUCT_NAME, "21A1"), |
| 123 | 123 | } |
| 124 | 124 | }, |
| 125 | + { | |
| 126 | + .ident = "ROG Xbox Ally RC73YA", | |
| 127 | + .driver_data = &quirk_spurious_8042, | |
| 128 | + .matches = { | |
| 129 | + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), | |
| 130 | + DMI_MATCH(DMI_BOARD_NAME, "RC73YA"), | |
| 131 | + } | |
| 132 | + }, | |
| 125 | 133 | /* https://bugzilla.kernel.org/show_bug.cgi?id=218024 */ |
| 126 | 134 | { |
| 127 | 135 | .ident = "V14 G4 AMN", |
| @@ -204,6 +212,23 @@ static const struct dmi_system_id fwbug_list[] = { · 76 unmodified lines | ||
| 204 | 212 | DMI_MATCH(DMI_PRODUCT_NAME, "82ND"), |
| 205 | 213 | } |
| 206 | 214 | }, |
| 215 | + /* https://gitlab.freedesktop.org/drm/amd/-/issues/4618 */ | |
| 216 | + { | |
| 217 | + .ident = "Lenovo Legion Go 2", | |
| 218 | + .driver_data = &quirk_s2idle_bug, | |
| 219 | + .matches = { | |
| 220 | + DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), | |
| 221 | + DMI_MATCH(DMI_PRODUCT_NAME, "83N0"), | |
| 222 | + } | |
| 223 | + }, | |
| 224 | + { | |
| 225 | + .ident = "Lenovo Legion Go 2", | |
| 226 | + .driver_data = &quirk_s2idle_bug, | |
| 227 | + .matches = { | |
| 228 | + DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), | |
| 229 | + DMI_MATCH(DMI_PRODUCT_NAME, "83N1"), | |
| 230 | + } | |
| 231 | + }, | |
| 207 | 232 | /* https://gitlab.freedesktop.org/drm/amd/-/issues/2684 */ |
| 208 | 233 | { |
| 209 | 234 | .ident = "HP Laptop 15s-eq2xxx", |
| @@ -106,6 +106,7 @@ static void amd_pmc_get_ip_info(struct amd_pmc_dev *dev) · 105 unmodified lines | ||
| 106 | 106 | switch (dev->cpu_id) { |
| 107 | 107 | case AMD_CPU_ID_PCO: |
| 108 | 108 | case AMD_CPU_ID_RN: |
| 109 | + case AMD_CPU_ID_VG: | |
| 109 | 110 | case AMD_CPU_ID_YC: |
| 110 | 111 | case AMD_CPU_ID_CB: |
| 111 | 112 | dev->num_ips = 12; |
| @@ -517,6 +518,7 @@ static int amd_pmc_get_os_hint(struct amd_pmc_dev *dev) · 405 unmodified lines | ||
| 517 | 518 | case AMD_CPU_ID_PCO: |
| 518 | 519 | return MSG_OS_HINT_PCO; |
| 519 | 520 | case AMD_CPU_ID_RN: |
| 521 | + case AMD_CPU_ID_VG: | |
| 520 | 522 | case AMD_CPU_ID_YC: |
| 521 | 523 | case AMD_CPU_ID_CB: |
| 522 | 524 | case AMD_CPU_ID_PS: |
| @@ -717,6 +719,7 @@ static const struct pci_device_id pmc_pci_ids[] = { · 194 unmodified lines | ||
| 717 | 719 | { PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_RV) }, |
| 718 | 720 | { PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_SP) }, |
| 719 | 721 | { PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_SHP) }, |
| 722 | + { PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_VG) }, | |
| 720 | 723 | { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_ROOT) }, |
| 721 | 724 | { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_ROOT) }, |
| 722 | 725 | { } |
| @@ -156,6 +156,7 @@ void amd_mp2_stb_deinit(struct amd_pmc_dev *dev); · 155 unmodified lines | ||
| 156 | 156 | #define AMD_CPU_ID_RN 0x1630 |
| 157 | 157 | #define AMD_CPU_ID_PCO AMD_CPU_ID_RV |
| 158 | 158 | #define AMD_CPU_ID_CZN AMD_CPU_ID_RN |
| 159 | +#define AMD_CPU_ID_VG 0x1645 | |
| 159 | 160 | #define AMD_CPU_ID_YC 0x14B5 |
| 160 | 161 | #define AMD_CPU_ID_CB 0x14D8 |
| 161 | 162 | #define AMD_CPU_ID_PS 0x14E8 |
| @@ -90,34 +90,34 @@ static struct awcc_quirks empty_quirks; · 89 unmodified lines | ||
| 90 | 90 | |
| 91 | 91 | static const struct dmi_system_id awcc_dmi_table[] __initconst = { |
| 92 | 92 | { |
| 93 | − .ident = "Alienware Area-51m", | |
| 93 | + .ident = "Alienware 16 Aurora", | |
| 94 | 94 | .matches = { |
| 95 | 95 | DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), |
| 96 | − DMI_MATCH(DMI_PRODUCT_NAME, "Alienware Area-51m"), | |
| 96 | + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware 16 Aurora"), | |
| 97 | 97 | }, |
| 98 | − .driver_data = &generic_quirks, | |
| 98 | + .driver_data = &g_series_quirks, | |
| 99 | 99 | }, |
| 100 | 100 | { |
| 101 | − .ident = "Alienware Area-51m R2", | |
| 101 | + .ident = "Alienware Area-51m", | |
| 102 | 102 | .matches = { |
| 103 | 103 | DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), |
| 104 | − DMI_MATCH(DMI_PRODUCT_NAME, "Alienware Area-51m R2"), | |
| 104 | + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware Area-51m"), | |
| 105 | 105 | }, |
| 106 | 106 | .driver_data = &generic_quirks, |
| 107 | 107 | }, |
| 108 | 108 | { |
| 109 | − .ident = "Alienware m15 R5", | |
| 109 | + .ident = "Alienware m15", | |
| 110 | 110 | .matches = { |
| 111 | 111 | DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), |
| 112 | − DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15 R5"), | |
| 112 | + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15"), | |
| 113 | 113 | }, |
| 114 | 114 | .driver_data = &generic_quirks, |
| 115 | 115 | }, |
| 116 | 116 | { |
| 117 | − .ident = "Alienware m15 R7", | |
| 117 | + .ident = "Alienware m16 R1 AMD", | |
| 118 | 118 | .matches = { |
| 119 | 119 | DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), |
| 120 | − DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15 R7"), | |
| 120 | + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"), | |
| 121 | 121 | }, |
| 122 | 122 | .driver_data = &generic_quirks, |
| 123 | 123 | }, |
| @@ -129,14 +129,6 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = { · 5 unmodified lines | ||
| 129 | 129 | }, |
| 130 | 130 | .driver_data = &g_series_quirks, |
| 131 | 131 | }, |
| 132 | − { | |
| 133 | − .ident = "Alienware m16 R1 AMD", | |
| 134 | − .matches = { | |
| 135 | − DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), | |
| 136 | − DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"), | |
| 137 | − }, | |
| 138 | − .driver_data = &generic_quirks, | |
| 139 | − }, | |
| 140 | 132 | { |
| 141 | 133 | .ident = "Alienware m16 R2", |
| 142 | 134 | .matches = { |
| @@ -146,114 +138,66 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = { · 3 unmodified lines | ||
| 146 | 138 | .driver_data = &generic_quirks, |
| 147 | 139 | }, |
| 148 | 140 | { |
| 149 | − .ident = "Alienware m17 R5", | |
| 141 | + .ident = "Alienware m17", | |
| 150 | 142 | .matches = { |
| 151 | 143 | DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), |
| 152 | − DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), | |
| 144 | + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17"), | |
| 153 | 145 | }, |
| 154 | 146 | .driver_data = &generic_quirks, |
| 155 | 147 | }, |
| 156 | 148 | { |
| 157 | − .ident = "Alienware m18 R2", | |
| 149 | + .ident = "Alienware m18", | |
| 158 | 150 | .matches = { |
| 159 | 151 | DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), |
| 160 | − DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), | |
| 152 | + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18"), | |
| 161 | 153 | }, |
| 162 | 154 | .driver_data = &generic_quirks, |
| 163 | 155 | }, |
| 164 | 156 | { |
| 165 | − .ident = "Alienware x15 R1", | |
| 157 | + .ident = "Alienware x15", | |
| 166 | 158 | .matches = { |
| 167 | 159 | DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), |
| 168 | − DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), | |
| 160 | + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15"), | |
| 169 | 161 | }, |
| 170 | 162 | .driver_data = &generic_quirks, |
| 171 | 163 | }, |
| 172 | 164 | { |
| 173 | − .ident = "Alienware x15 R2", | |
| 165 | + .ident = "Alienware x17", | |
| 174 | 166 | .matches = { |
| 175 | 167 | DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), |
| 176 | − DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R2"), | |
| 168 | + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17"), | |
| 177 | 169 | }, |
| 178 | 170 | .driver_data = &generic_quirks, |
| 179 | 171 | }, |
| 180 | 172 | { |
| 181 | − .ident = "Alienware x17 R2", | |
| 182 | − .matches = { | |
| 183 | − DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), | |
| 184 | − DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), | |
| 185 | − }, | |
| 186 | − .driver_data = &generic_quirks, | |
| 187 | − }, | |
| 188 | − { | |
| 189 | − .ident = "Dell Inc. G15 5510", | |
| 190 | − .matches = { | |
| 191 | − DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
| 192 | − DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), | |
| 193 | − }, | |
| 194 | − .driver_data = &g_series_quirks, | |
| 195 | − }, | |
| 196 | − { | |
| 197 | − .ident = "Dell Inc. G15 5511", | |
| 198 | − .matches = { | |
| 199 | − DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
| 200 | − DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), | |
| 201 | − }, | |
| 202 | − .driver_data = &g_series_quirks, | |
| 203 | − }, | |
| 204 | − { | |
| 205 | − .ident = "Dell Inc. G15 5515", | |
| 206 | − .matches = { | |
| 207 | − DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
| 208 | − DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), | |
| 209 | − }, | |
| 210 | − .driver_data = &g_series_quirks, | |
| 211 | − }, | |
| 212 | − { | |
| 213 | − .ident = "Dell Inc. G15 5530", | |
| 214 | − .matches = { | |
| 215 | − DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
| 216 | − DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5530"), | |
| 217 | − }, | |
| 218 | − .driver_data = &g_series_quirks, | |
| 219 | − }, | |
| 220 | − { | |
| 221 | − .ident = "Dell Inc. G16 7630", | |
| 222 | − .matches = { | |
| 223 | − DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
| 224 | − DMI_MATCH(DMI_PRODUCT_NAME, "Dell G16 7630"), | |
| 225 | − }, | |
| 226 | − .driver_data = &g_series_quirks, | |
| 227 | − }, | |
| 228 | − { | |
| 229 | − .ident = "Dell Inc. G3 3500", | |
| 173 | + .ident = "Dell Inc. G15", | |
| 230 | 174 | .matches = { |
| 231 | 175 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
| 232 | − DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), | |
| 176 | + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15"), | |
| 233 | 177 | }, |
| 234 | 178 | .driver_data = &g_series_quirks, |
| 235 | 179 | }, |
| 236 | 180 | { |
| 237 | − .ident = "Dell Inc. G3 3590", | |
| 181 | + .ident = "Dell Inc. G16", | |
| 238 | 182 | .matches = { |
| 239 | 183 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
| 240 | − DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), | |
| 184 | + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G16"), | |
| 241 | 185 | }, |
| 242 | 186 | .driver_data = &g_series_quirks, |
| 243 | 187 | }, |
| 244 | 188 | { |
| 245 | − .ident = "Dell Inc. G5 5500", | |
| 189 | + .ident = "Dell Inc. G3", | |
| 246 | 190 | .matches = { |
| 247 | 191 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
| 248 | − DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), | |
| 192 | + DMI_MATCH(DMI_PRODUCT_NAME, "G3"), | |
| 249 | 193 | }, |
| 250 | 194 | .driver_data = &g_series_quirks, |
| 251 | 195 | }, |
| 252 | 196 | { |
| 253 | − .ident = "Dell Inc. G5 5505", | |
| 197 | + .ident = "Dell Inc. G5", | |
| 254 | 198 | .matches = { |
| 255 | 199 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
| 256 | − DMI_MATCH(DMI_PRODUCT_NAME, "G5 5505"), | |
| 200 | + DMI_MATCH(DMI_PRODUCT_NAME, "G5"), | |
| 257 | 201 | }, |
| 258 | 202 | .driver_data = &g_series_quirks, |
| 259 | 203 | }, |
| @@ -92,9 +92,11 @@ static const char * const victus_thermal_profile_boards[] = { · 91 unmodified lines | ||
| 92 | 92 | "8A25" |
| 93 | 93 | }; |
| 94 | 94 | |
| 95 | −/* DMI Board names of Victus 16-r1000 and Victus 16-s1000 laptops */ | |
| 95 | +/* DMI Board names of Victus 16-r and Victus 16-s laptops */ | |
| 96 | 96 | static const char * const victus_s_thermal_profile_boards[] = { |
| 97 | − "8C99", "8C9C" | |
| 97 | + "8BBE", "8BD4", "8BD5", | |
| 98 | + "8C78", "8C99", "8C9C", | |
| 99 | + "8D41", | |
| 98 | 100 | }; |
| 99 | 101 | |
| 100 | 102 | enum hp_wmi_radio { |
| @@ -81,6 +81,10 @@ static const struct key_entry huawei_wmi_keymap[] = { · 80 unmodified lines | ||
| 81 | 81 | { KE_KEY, 0x289, { KEY_WLAN } }, |
| 82 | 82 | // Huawei |M| key |
| 83 | 83 | { KE_KEY, 0x28a, { KEY_CONFIG } }, |
| 84 | + // HONOR YOYO key | |
| 85 | + { KE_KEY, 0x28b, { KEY_NOTIFICATION_CENTER } }, | |
| 86 | + // HONOR print screen | |
| 87 | + { KE_KEY, 0x28e, { KEY_PRINT } }, | |
| 84 | 88 | // Keyboard backlit |
| 85 | 89 | { KE_IGNORE, 0x293, { KEY_KBDILLUMTOGGLE } }, |
| 86 | 90 | { KE_IGNORE, 0x294, { KEY_KBDILLUMUP } }, |
| @@ -55,6 +55,7 @@ static const struct acpi_device_id intel_hid_ids[] = { · 54 unmodified lines | ||
| 55 | 55 | { "INTC10CB" }, |
| 56 | 56 | { "INTC10CC" }, |
| 57 | 57 | { "INTC10F1" }, |
| 58 | + { "INTC10F2" }, | |
| 58 | 59 | { } |
| 59 | 60 | }; |
| 60 | 61 | 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) · 107 unmodified lines | ||
| 108 | 108 | |
| 109 | 109 | ret = pci_read_config_dword(pdev, 0xD0, &mmio_base); |
| 110 | 110 | if (ret) |
| 111 | − return ret; | |
| 111 | + return pcibios_err_to_errno(ret); | |
| 112 | 112 | |
| 113 | 113 | ret = pci_read_config_dword(pdev, 0xFC, &pcu_base); |
| 114 | 114 | if (ret) |
| 115 | − return ret; | |
| 115 | + return pcibios_err_to_errno(ret); | |
| 116 | 116 | |
| 117 | 117 | pcu_base &= GENMASK(10, 0); |
| 118 | 118 | base_addr = (u64)mmio_base << 23 | (u64) pcu_base << 12; |
| @@ -40,7 +40,7 @@ · 39 unmodified lines | ||
| 40 | 40 | * @agent_type_mask: Bit mask of all hardware agents for this domain |
| 41 | 41 | * @uncore_attr_group: Attribute group storage |
| 42 | 42 | * @max_freq_khz_kobj_attr: Storage for kobject attribute max_freq_khz |
| 43 | − * @mix_freq_khz_kobj_attr: Storage for kobject attribute min_freq_khz | |
| 43 | + * @min_freq_khz_kobj_attr: Storage for kobject attribute min_freq_khz | |
| 44 | 44 | * @initial_max_freq_khz_kobj_attr: Storage for kobject attribute initial_max_freq_khz |
| 45 | 45 | * @initial_min_freq_khz_kobj_attr: Storage for kobject attribute initial_min_freq_khz |
| 46 | 46 | * @current_freq_khz_kobj_attr: Storage for kobject attribute current_freq_khz |
| @@ -48,13 +48,14 @@ · 1 unmodified line | ||
| 48 | 48 | * @fabric_cluster_id_kobj_attr: Storage for kobject attribute fabric_cluster_id |
| 49 | 49 | * @package_id_kobj_attr: Storage for kobject attribute package_id |
| 50 | 50 | * @elc_low_threshold_percent_kobj_attr: |
| 51 | − Storage for kobject attribute elc_low_threshold_percent | |
| 51 | + * Storage for kobject attribute elc_low_threshold_percent | |
| 52 | 52 | * @elc_high_threshold_percent_kobj_attr: |
| 53 | − Storage for kobject attribute elc_high_threshold_percent | |
| 53 | + * Storage for kobject attribute elc_high_threshold_percent | |
| 54 | 54 | * @elc_high_threshold_enable_kobj_attr: |
| 55 | − Storage for kobject attribute elc_high_threshold_enable | |
| 55 | + * Storage for kobject attribute elc_high_threshold_enable | |
| 56 | 56 | * @elc_floor_freq_khz_kobj_attr: Storage for kobject attribute elc_floor_freq_khz |
| 57 | 57 | * @agent_types_kobj_attr: Storage for kobject attribute agent_type |
| 58 | + * @die_id_kobj_attr: Attribute storage for die_id information | |
| 58 | 59 | * @uncore_attrs: Attribute storage for group creation |
| 59 | 60 | * |
| 60 | 61 | * 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[] = { · 255 unmodified lines | ||
| 256 | 256 | X86_MATCH_VFM(INTEL_ARROWLAKE, NULL), |
| 257 | 257 | X86_MATCH_VFM(INTEL_ARROWLAKE_H, NULL), |
| 258 | 258 | X86_MATCH_VFM(INTEL_LUNARLAKE_M, NULL), |
| 259 | + X86_MATCH_VFM(INTEL_PANTHERLAKE_L, NULL), | |
| 260 | + X86_MATCH_VFM(INTEL_WILDCATLAKE_L, NULL), | |
| 261 | + X86_MATCH_VFM(INTEL_NOVALAKE, NULL), | |
| 262 | + X86_MATCH_VFM(INTEL_NOVALAKE_L, NULL), | |
| 259 | 263 | {} |
| 260 | 264 | }; |
| 261 | 265 | MODULE_DEVICE_TABLE(x86cpu, intel_uncore_cpu_ids); |
| @@ -14,6 +14,7 @@ · 13 unmodified lines | ||
| 14 | 14 | #include <linux/debugfs.h> |
| 15 | 15 | #include <linux/device.h> |
| 16 | 16 | #include <linux/device/driver.h> |
| 17 | +#include <linux/dmi.h> | |
| 17 | 18 | #include <linux/errno.h> |
| 18 | 19 | #include <linux/hwmon.h> |
| 19 | 20 | #include <linux/kernel.h> |
| @@ -28,7 +29,7 @@ · 8 unmodified lines | ||
| 28 | 29 | |
| 29 | 30 | #define DRIVER_NAME "msi-wmi-platform" |
| 30 | 31 | |
| 31 | −#define MSI_PLATFORM_GUID "ABBC0F6E-8EA1-11d1-00A0-C90629100000" | |
| 32 | +#define MSI_PLATFORM_GUID "ABBC0F6E-8EA1-11D1-00A0-C90629100000" | |
| 32 | 33 | |
| 33 | 34 | #define MSI_WMI_PLATFORM_INTERFACE_VERSION 2 |
| 34 | 35 | |
| @@ -448,7 +449,45 @@ static struct wmi_driver msi_wmi_platform_driver = { · 413 unmodified lines | ||
| 448 | 449 | .probe = msi_wmi_platform_probe, |
| 449 | 450 | .no_singleton = true, |
| 450 | 451 | }; |
| 451 | −module_wmi_driver(msi_wmi_platform_driver); | |
| 452 | + | |
| 453 | +/* | |
| 454 | + * MSI reused the WMI GUID from the WMI-ACPI sample code provided by Microsoft, | |
| 455 | + * so other manufacturers might use it as well for their WMI-ACPI implementations. | |
| 456 | + */ | |
| 457 | +static const struct dmi_system_id msi_wmi_platform_whitelist[] __initconst = { | |
| 458 | + { | |
| 459 | + .matches = { | |
| 460 | + DMI_MATCH(DMI_SYS_VENDOR, "MICRO-STAR INT"), | |
| 461 | + }, | |
| 462 | + }, | |
| 463 | + { | |
| 464 | + .matches = { | |
| 465 | + DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"), | |
| 466 | + }, | |
| 467 | + }, | |
| 468 | + { } | |
| 469 | +}; | |
| 470 | + | |
| 471 | +static int __init msi_wmi_platform_module_init(void) | |
| 472 | +{ | |
| 473 | + if (!dmi_check_system(msi_wmi_platform_whitelist)) { | |
| 474 | + if (!force) | |
| 475 | + return -ENODEV; | |
| 476 | + | |
| 477 | + pr_warn("Ignoring DMI whitelist\n"); | |
| 478 | + } | |
| 479 | + | |
| 480 | + return wmi_driver_register(&msi_wmi_platform_driver); | |
| 481 | +} | |
| 482 | + | |
| 483 | +static void __exit msi_wmi_platform_module_exit(void) | |
| 484 | +{ | |
| 485 | + wmi_driver_unregister(&msi_wmi_platform_driver); | |
| 486 | +} | |
| 487 | + | |
| 488 | +module_init(msi_wmi_platform_module_init); | |
| 489 | +module_exit(msi_wmi_platform_module_exit); | |
| 490 | + | |
| 452 | 491 | |
| 453 | 492 | MODULE_AUTHOR("Armin Wolf <W_Armin@gmx.de>"); |
| 454 | 493 | MODULE_DESCRIPTION("MSI WMI platform features"); |
| @@ -52,7 +52,7 @@ struct isst_if_cpu_map { · 51 unmodified lines | ||
| 52 | 52 | /** |
| 53 | 53 | * struct isst_if_cpu_maps - structure for CPU map IOCTL |
| 54 | 54 | * @cmd_count: Number of CPU mapping command in cpu_map[] |
| 55 | − * @cpu_map[]: Holds one or more CPU map data structure | |
| 55 | + * @cpu_map: Holds one or more CPU map data structure | |
| 56 | 56 | * |
| 57 | 57 | * This structure used with ioctl ISST_IF_GET_PHY_ID to send |
| 58 | 58 | * one or more CPU mapping commands. Here IOCTL return value indicates |
| @@ -82,8 +82,8 @@ struct isst_if_io_reg { · 23 unmodified lines | ||
| 82 | 82 | |
| 83 | 83 | /** |
| 84 | 84 | * struct isst_if_io_regs - structure for IO register commands |
| 85 | − * @cmd_count: Number of io reg commands in io_reg[] | |
| 86 | − * @io_reg[]: Holds one or more io_reg command structure | |
| 85 | + * @req_count: Number of io reg commands in io_reg[] | |
| 86 | + * @io_reg: Holds one or more io_reg command structure | |
| 87 | 87 | * |
| 88 | 88 | * This structure used with ioctl ISST_IF_IO_CMD to send |
| 89 | 89 | * one or more read/write commands to PUNIT. Here IOCTL return value |
| @@ -120,7 +120,7 @@ struct isst_if_mbox_cmd { · 30 unmodified lines | ||
| 120 | 120 | /** |
| 121 | 121 | * struct isst_if_mbox_cmds - structure for mailbox commands |
| 122 | 122 | * @cmd_count: Number of mailbox commands in mbox_cmd[] |
| 123 | − * @mbox_cmd[]: Holds one or more mbox commands | |
| 123 | + * @mbox_cmd: Holds one or more mbox commands | |
| 124 | 124 | * |
| 125 | 125 | * This structure used with ioctl ISST_IF_MBOX_COMMAND to send |
| 126 | 126 | * one or more mailbox commands to PUNIT. Here IOCTL return value |
| @@ -152,7 +152,7 @@ struct isst_if_msr_cmd { · 25 unmodified lines | ||
| 152 | 152 | /** |
| 153 | 153 | * struct isst_if_msr_cmds - structure for msr commands |
| 154 | 154 | * @cmd_count: Number of mailbox commands in msr_cmd[] |
| 155 | − * @msr_cmd[]: Holds one or more msr commands | |
| 155 | + * @msr_cmd: Holds one or more msr commands | |
| 156 | 156 | * |
| 157 | 157 | * This structure used with ioctl ISST_IF_MSR_COMMAND to send |
| 158 | 158 | * one or more MSR commands. IOCTL return value indicates number of |
| @@ -167,8 +167,9 @@ struct isst_if_msr_cmds { · 8 unmodified lines | ||
| 167 | 167 | * struct isst_core_power - Structure to get/set core_power feature |
| 168 | 168 | * @get_set: 0: Get, 1: Set |
| 169 | 169 | * @socket_id: Socket/package id |
| 170 | − * @power_domain: Power Domain id | |
| 170 | + * @power_domain_id: Power Domain id | |
| 171 | 171 | * @enable: Feature enable status |
| 172 | + * @supported: Power domain supports SST_CP interface | |
| 172 | 173 | * @priority_type: Priority type for the feature (ordered/proportional) |
| 173 | 174 | * |
| 174 | 175 | * Structure to get/set core_power feature state using IOCTL |
| @@ -187,11 +188,11 @@ struct isst_core_power { · 12 unmodified lines | ||
| 187 | 188 | * struct isst_clos_param - Structure to get/set clos praram |
| 188 | 189 | * @get_set: 0: Get, 1: Set |
| 189 | 190 | * @socket_id: Socket/package id |
| 190 | − * @power_domain: Power Domain id | |
| 191 | − * clos: Clos ID for the parameters | |
| 192 | − * min_freq_mhz: Minimum frequency in MHz | |
| 193 | − * max_freq_mhz: Maximum frequency in MHz | |
| 194 | − * prop_prio: Proportional priority from 0-15 | |
| 191 | + * @power_domain_id: Power Domain id | |
| 192 | + * @clos: Clos ID for the parameters | |
| 193 | + * @min_freq_mhz: Minimum frequency in MHz | |
| 194 | + * @max_freq_mhz: Maximum frequency in MHz | |
| 195 | + * @prop_prio: Proportional priority from 0-15 | |
| 195 | 196 | * |
| 196 | 197 | * Structure to get/set per clos property using IOCTL |
| 197 | 198 | * ISST_IF_CLOS_PARAM. |
| @@ -209,7 +210,7 @@ struct isst_clos_param { · 11 unmodified lines | ||
| 209 | 210 | /** |
| 210 | 211 | * struct isst_if_clos_assoc - Structure to assign clos to a CPU |
| 211 | 212 | * @socket_id: Socket/package id |
| 212 | − * @power_domain: Power Domain id | |
| 213 | + * @power_domain_id: Power Domain id | |
| 213 | 214 | * @logical_cpu: CPU number |
| 214 | 215 | * @clos: Clos ID to assign to the logical CPU |
| 215 | 216 | * |
| @@ -228,6 +229,7 @@ struct isst_if_clos_assoc { · 12 unmodified lines | ||
| 228 | 229 | * @get_set: Request is for get or set |
| 229 | 230 | * @punit_cpu_map: Set to 1 if the CPU number is punit numbering not |
| 230 | 231 | * Linux CPU number |
| 232 | + * @assoc_info: CLOS data for this CPU | |
| 231 | 233 | * |
| 232 | 234 | * Structure used to get/set associate CPUs to clos using IOCTL |
| 233 | 235 | * ISST_IF_CLOS_ASSOC. |
| @@ -257,7 +259,7 @@ struct isst_tpmi_instance_count { · 23 unmodified lines | ||
| 257 | 259 | /** |
| 258 | 260 | * struct isst_perf_level_info - Structure to get information on SST-PP levels |
| 259 | 261 | * @socket_id: Socket/package id |
| 260 | − * @power_domain: Power Domain id | |
| 262 | + * @power_domain_id: Power Domain id | |
| 261 | 263 | * @logical_cpu: CPU number |
| 262 | 264 | * @clos: Clos ID to assign to the logical CPU |
| 263 | 265 | * @max_level: Maximum performance level supported by the platform |
| @@ -267,8 +269,8 @@ struct isst_tpmi_instance_count { · 3 unmodified lines | ||
| 267 | 269 | * @feature_state: SST-BF and SST-TF (enabled/disabled) status at current level |
| 268 | 270 | * @locked: SST-PP performance level change is locked/unlocked |
| 269 | 271 | * @enabled: SST-PP feature is enabled or not |
| 270 | − * @sst-tf_support: SST-TF support status at this level | |
| 271 | − * @sst-bf_support: SST-BF support status at this level | |
| 272 | + * @sst_tf_support: SST-TF support status at this level | |
| 273 | + * @sst_bf_support: SST-BF support status at this level | |
| 272 | 274 | * |
| 273 | 275 | * Structure to get SST-PP details using IOCTL ISST_IF_PERF_LEVELS. |
| 274 | 276 | */ |
| @@ -289,7 +291,7 @@ struct isst_perf_level_info { · 14 unmodified lines | ||
| 289 | 291 | /** |
| 290 | 292 | * struct isst_perf_level_control - Structure to set SST-PP level |
| 291 | 293 | * @socket_id: Socket/package id |
| 292 | − * @power_domain: Power Domain id | |
| 294 | + * @power_domain_id: Power Domain id | |
| 293 | 295 | * @level: level to set |
| 294 | 296 | * |
| 295 | 297 | * Structure used change SST-PP level using IOCTL ISST_IF_PERF_SET_LEVEL. |
| @@ -303,7 +305,7 @@ struct isst_perf_level_control { · 7 unmodified lines | ||
| 303 | 305 | /** |
| 304 | 306 | * struct isst_perf_feature_control - Structure to activate SST-BF/SST-TF |
| 305 | 307 | * @socket_id: Socket/package id |
| 306 | − * @power_domain: Power Domain id | |
| 308 | + * @power_domain_id: Power Domain id | |
| 307 | 309 | * @feature: bit 0 = SST-BF state, bit 1 = SST-TF state |
| 308 | 310 | * |
| 309 | 311 | * Structure used to enable SST-BF/SST-TF using IOCTL ISST_IF_PERF_SET_FEATURE. |
| @@ -320,7 +322,7 @@ struct isst_perf_feature_control { · 10 unmodified lines | ||
| 320 | 322 | /** |
| 321 | 323 | * struct isst_perf_level_data_info - Structure to get SST-PP level details |
| 322 | 324 | * @socket_id: Socket/package id |
| 323 | − * @power_domain: Power Domain id | |
| 325 | + * @power_domain_id: Power Domain id | |
| 324 | 326 | * @level: SST-PP level for which caller wants to get information |
| 325 | 327 | * @tdp_ratio: TDP Ratio |
| 326 | 328 | * @base_freq_mhz: Base frequency in MHz |
| @@ -341,8 +343,8 @@ struct isst_perf_feature_control { · 14 unmodified lines | ||
| 341 | 343 | * @pm_fabric_freq_mhz: Fabric (Uncore) minimum frequency |
| 342 | 344 | * @max_buckets: Maximum trl buckets |
| 343 | 345 | * @max_trl_levels: Maximum trl levels |
| 344 | − * @bucket_core_counts[TRL_MAX_BUCKETS]: Number of cores per bucket | |
| 345 | − * @trl_freq_mhz[TRL_MAX_LEVELS][TRL_MAX_BUCKETS]: maximum frequency | |
| 346 | + * @bucket_core_counts: Number of cores per bucket | |
| 347 | + * @trl_freq_mhz: maximum frequency | |
| 346 | 348 | * for a bucket and trl level |
| 347 | 349 | * |
| 348 | 350 | * Structure used to get information on frequencies and TDP for a SST-PP |
| @@ -402,7 +404,7 @@ struct isst_perf_level_fabric_info { · 53 unmodified lines | ||
| 402 | 404 | /** |
| 403 | 405 | * struct isst_perf_level_cpu_mask - Structure to get SST-PP level CPU mask |
| 404 | 406 | * @socket_id: Socket/package id |
| 405 | − * @power_domain: Power Domain id | |
| 407 | + * @power_domain_id: Power Domain id | |
| 406 | 408 | * @level: SST-PP level for which caller wants to get information |
| 407 | 409 | * @punit_cpu_map: Set to 1 if the CPU number is punit numbering not |
| 408 | 410 | * Linux CPU number. If 0 CPU buffer is copied to user space |
| @@ -430,7 +432,7 @@ struct isst_perf_level_cpu_mask { · 21 unmodified lines | ||
| 430 | 432 | /** |
| 431 | 433 | * struct isst_base_freq_info - Structure to get SST-BF frequencies |
| 432 | 434 | * @socket_id: Socket/package id |
| 433 | − * @power_domain: Power Domain id | |
| 435 | + * @power_domain_id: Power Domain id | |
| 434 | 436 | * @level: SST-PP level for which caller wants to get information |
| 435 | 437 | * @high_base_freq_mhz: High priority CPU base frequency |
| 436 | 438 | * @low_base_freq_mhz: Low priority CPU base frequency |
| @@ -453,9 +455,11 @@ struct isst_base_freq_info { · 16 unmodified lines | ||
| 453 | 455 | /** |
| 454 | 456 | * struct isst_turbo_freq_info - Structure to get SST-TF frequencies |
| 455 | 457 | * @socket_id: Socket/package id |
| 456 | − * @power_domain: Power Domain id | |
| 458 | + * @power_domain_id: Power Domain id | |
| 457 | 459 | * @level: SST-PP level for which caller wants to get information |
| 458 | 460 | * @max_clip_freqs: Maximum number of low priority core clipping frequencies |
| 461 | + * @max_buckets: Maximum trl buckets | |
| 462 | + * @max_trl_levels: Maximum trl levels | |
| 459 | 463 | * @lp_clip_freq_mhz: Clip frequencies per trl level |
| 460 | 464 | * @bucket_core_counts: Maximum number of cores for a bucket |
| 461 | 465 | * @trl_freq_mhz: Frequencies per trl level for each bucket |