Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'fixes' of into for-next

+519 -47
+1 -1
Documentation/admin-guide/laptops/alienware-wmi.rst
··· 105 105 106 106 Manual fan control on the other hand, is not exposed directly by the AWCC 107 107 interface. Instead it let's us control a fan `boost` value. This `boost` value 108 - has the following aproximate behavior over the fan pwm: 108 + has the following approximate behavior over the fan pwm: 109 109 110 110 :: 111 111
+2 -2
Documentation/arch/x86/amd_hsmp.rst
··· 14 14 15 15 More details on the interface can be found in chapter 16 16 "7 Host System Management Port (HSMP)" of the family/model PPR 17 - Eg: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip 17 + Eg: https://docs.amd.com/v/u/en-US/55898_B1_pub_0_50 18 18 19 19 20 20 HSMP interface is supported on EPYC line of server CPUs and MI300A (APU). ··· 185 185 186 186 More details on the interface and message definitions can be found in chapter 187 187 "7 Host System Management Port (HSMP)" of the respective family/model PPR 188 - eg: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip 188 + eg: https://docs.amd.com/v/u/en-US/55898_B1_pub_0_50 189 189 190 190 User space C-APIs are made available by linking against the esmi library, 191 191 which is provided by the E-SMS project https://www.amd.com/en/developer/e-sms.html.
+1 -1
Documentation/misc-devices/amd-sbi.rst
··· 15 15 More details on the interface can be found in chapter 16 16 "5 Advanced Platform Management Link (APML)" of the family/model PPR [1]_. 17 17 18 - .. [1] https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip 18 + .. [1] https://docs.amd.com/v/u/en-US/55898_B1_pub_0_50 19 19 20 20 21 21 SBRMI device
+1 -1
drivers/platform/mellanox/mlx-platform.c
··· 7381 7381 mlxplat_hotplug = &mlxplat_mlxcpld_ng800_hi171_data; 7382 7382 mlxplat_hotplug->deferred_nr = 7383 7383 mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 7384 - mlxplat_led = &mlxplat_default_ng_led_data; 7384 + mlxplat_led = &mlxplat_xdr_led_data; 7385 7385 mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; 7386 7386 mlxplat_fan = &mlxplat_xdr_fan_data; 7387 7387
+7 -7
drivers/platform/mellanox/mlxbf-pmc.c
··· 801 801 {11, "GDC_MISS_MACHINE_CHI_TXDAT"}, 802 802 {12, "GDC_MISS_MACHINE_CHI_RXDAT"}, 803 803 {13, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_0"}, 804 - {14, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_1 "}, 804 + {14, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_1"}, 805 805 {15, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_2"}, 806 - {16, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_3 "}, 807 - {17, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_0 "}, 808 - {18, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_1 "}, 809 - {19, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_2 "}, 810 - {20, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_3 "}, 806 + {16, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_3"}, 807 + {17, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_0"}, 808 + {18, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_1"}, 809 + {19, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_2"}, 810 + {20, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_3"}, 811 811 {21, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_0"}, 812 812 {22, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_1"}, 813 813 {23, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_2"}, 814 814 {24, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_3"}, 815 - {25, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_0 "}, 815 + {25, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_0"}, 816 816 {26, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_1"}, 817 817 {27, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_2"}, 818 818 {28, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_3"},
+10 -3
drivers/platform/x86/acer-wmi.c
··· 455 455 .mailled = 1, 456 456 }; 457 457 458 + static struct quirk_entry quirk_acer_nitro_an515_58 = { 459 + .predator_v4 = 1, 460 + .pwm = 1, 461 + }; 462 + 458 463 static struct quirk_entry quirk_acer_predator_ph315_53 = { 459 464 .turbo = 1, 460 465 .cpu_fans = 1, ··· 660 655 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 661 656 DMI_MATCH(DMI_PRODUCT_NAME, "Nitro AN515-58"), 662 657 }, 663 - .driver_data = &quirk_acer_predator_v4, 658 + .driver_data = &quirk_acer_nitro_an515_58, 664 659 }, 665 660 { 666 661 .callback = dmi_matched, ··· 2070 2065 WMID_gaming_set_u64(0x1, ACER_CAP_TURBO_LED); 2071 2066 2072 2067 /* Set FAN mode to auto */ 2073 - WMID_gaming_set_fan_mode(ACER_WMID_FAN_MODE_AUTO); 2068 + if (has_cap(ACER_CAP_TURBO_FAN)) 2069 + WMID_gaming_set_fan_mode(ACER_WMID_FAN_MODE_AUTO); 2074 2070 2075 2071 /* Set OC to normal */ 2076 2072 if (has_cap(ACER_CAP_TURBO_OC)) { ··· 2085 2079 WMID_gaming_set_u64(0x10001, ACER_CAP_TURBO_LED); 2086 2080 2087 2081 /* Set FAN mode to turbo */ 2088 - WMID_gaming_set_fan_mode(ACER_WMID_FAN_MODE_TURBO); 2082 + if (has_cap(ACER_CAP_TURBO_FAN)) 2083 + WMID_gaming_set_fan_mode(ACER_WMID_FAN_MODE_TURBO); 2089 2084 2090 2085 /* Set OC to turbo mode */ 2091 2086 if (has_cap(ACER_CAP_TURBO_OC)) {
+3 -1
drivers/platform/x86/amd/wbrf.c
··· 104 104 obj = acpi_evaluate_dsm(adev->handle, &wifi_acpi_dsm_guid, 105 105 WBRF_REVISION, WBRF_RECORD, &argv4); 106 106 107 - if (!obj) 107 + if (!obj) { 108 + kfree(tmp); 108 109 return -EINVAL; 110 + } 109 111 110 112 if (obj->type != ACPI_TYPE_INTEGER) { 111 113 ret = -EINVAL;
+392 -4
drivers/platform/x86/asus-armoury.h
··· 348 348 static const struct dmi_system_id power_limits[] = { 349 349 { 350 350 .matches = { 351 + DMI_MATCH(DMI_BOARD_NAME, "FA401UV"), 352 + }, 353 + .driver_data = &(struct power_data) { 354 + .ac_data = &(struct power_limits) { 355 + .ppt_pl1_spl_min = 15, 356 + .ppt_pl1_spl_max = 80, 357 + .ppt_pl2_sppt_min = 35, 358 + .ppt_pl2_sppt_max = 80, 359 + .ppt_pl3_fppt_min = 35, 360 + .ppt_pl3_fppt_max = 80, 361 + .nv_dynamic_boost_min = 5, 362 + .nv_dynamic_boost_max = 25, 363 + .nv_temp_target_min = 75, 364 + .nv_temp_target_max = 87, 365 + .nv_tgp_min = 55, 366 + .nv_tgp_max = 75, 367 + }, 368 + .dc_data = &(struct power_limits) { 369 + .ppt_pl1_spl_min = 25, 370 + .ppt_pl1_spl_max = 35, 371 + .ppt_pl2_sppt_min = 31, 372 + .ppt_pl2_sppt_max = 44, 373 + .ppt_pl3_fppt_min = 45, 374 + .ppt_pl3_fppt_max = 65, 375 + .nv_temp_target_min = 75, 376 + .nv_temp_target_max = 87, 377 + }, 378 + }, 379 + }, 380 + { 381 + .matches = { 351 382 DMI_MATCH(DMI_BOARD_NAME, "FA401W"), 352 383 }, 353 384 .driver_data = &(struct power_data) { ··· 480 449 .ac_data = &(struct power_limits) { 481 450 .ppt_pl1_spl_min = 15, 482 451 .ppt_pl1_spl_max = 80, 483 - .ppt_pl2_sppt_min = 25, 452 + .ppt_pl2_sppt_min = 35, 484 453 .ppt_pl2_sppt_max = 80, 485 454 .ppt_pl3_fppt_min = 35, 486 - .ppt_pl3_fppt_max = 80 455 + .ppt_pl3_fppt_max = 80, 456 + .nv_dynamic_boost_min = 5, 457 + .nv_dynamic_boost_max = 25, 458 + .nv_temp_target_min = 75, 459 + .nv_temp_target_max = 87, 487 460 }, 488 - .dc_data = NULL, 461 + .dc_data = &(struct power_limits) { 462 + .ppt_pl1_spl_min = 15, 463 + .ppt_pl1_spl_def = 45, 464 + .ppt_pl1_spl_max = 65, 465 + .ppt_pl2_sppt_min = 35, 466 + .ppt_pl2_sppt_def = 54, 467 + .ppt_pl2_sppt_max = 65, 468 + .ppt_pl3_fppt_min = 35, 469 + .ppt_pl3_fppt_max = 65, 470 + .nv_temp_target_min = 75, 471 + .nv_temp_target_max = 87, 472 + }, 489 473 }, 490 474 }, 491 475 { ··· 593 547 .ppt_pl2_sppt_max = 80, 594 548 .ppt_pl3_fppt_min = 25, 595 549 .ppt_pl3_fppt_max = 80, 550 + .nv_temp_target_min = 75, 551 + .nv_temp_target_max = 87, 552 + }, 553 + }, 554 + }, 555 + { 556 + .matches = { 557 + DMI_MATCH(DMI_BOARD_NAME, "FA608UM"), 558 + }, 559 + .driver_data = &(struct power_data) { 560 + .ac_data = &(struct power_limits) { 561 + .ppt_pl1_spl_min = 15, 562 + .ppt_pl1_spl_def = 45, 563 + .ppt_pl1_spl_max = 90, 564 + .ppt_pl2_sppt_min = 35, 565 + .ppt_pl2_sppt_def = 54, 566 + .ppt_pl2_sppt_max = 90, 567 + .ppt_pl3_fppt_min = 35, 568 + .ppt_pl3_fppt_def = 65, 569 + .ppt_pl3_fppt_max = 90, 570 + .nv_dynamic_boost_min = 10, 571 + .nv_dynamic_boost_max = 15, 572 + .nv_temp_target_min = 75, 573 + .nv_temp_target_max = 87, 574 + .nv_tgp_min = 55, 575 + .nv_tgp_max = 100, 576 + }, 577 + .dc_data = &(struct power_limits) { 578 + .ppt_pl1_spl_min = 15, 579 + .ppt_pl1_spl_def = 45, 580 + .ppt_pl1_spl_max = 65, 581 + .ppt_pl2_sppt_min = 35, 582 + .ppt_pl2_sppt_def = 54, 583 + .ppt_pl2_sppt_max = 65, 584 + .ppt_pl3_fppt_min = 35, 585 + .ppt_pl3_fppt_max = 65, 596 586 .nv_temp_target_min = 75, 597 587 .nv_temp_target_max = 87, 598 588 }, ··· 729 647 .ppt_platform_sppt_max = 100, 730 648 .nv_temp_target_min = 75, 731 649 .nv_temp_target_max = 87, 650 + }, 651 + }, 652 + }, 653 + { 654 + .matches = { 655 + DMI_MATCH(DMI_BOARD_NAME, "FA617XT"), 656 + }, 657 + .driver_data = &(struct power_data) { 658 + .ac_data = &(struct power_limits) { 659 + .ppt_apu_sppt_min = 15, 660 + .ppt_apu_sppt_max = 80, 661 + .ppt_platform_sppt_min = 30, 662 + .ppt_platform_sppt_max = 145, 663 + }, 664 + .dc_data = &(struct power_limits) { 665 + .ppt_apu_sppt_min = 25, 666 + .ppt_apu_sppt_max = 35, 667 + .ppt_platform_sppt_min = 45, 668 + .ppt_platform_sppt_max = 100, 732 669 }, 733 670 }, 734 671 }, ··· 893 792 }, 894 793 { 895 794 .matches = { 896 - DMI_MATCH(DMI_BOARD_NAME, "GA403U"), 795 + DMI_MATCH(DMI_BOARD_NAME, "GA403UI"), 897 796 }, 898 797 .driver_data = &(struct power_data) { 899 798 .ac_data = &(struct power_limits) { ··· 909 808 .nv_temp_target_max = 87, 910 809 .nv_tgp_min = 55, 911 810 .nv_tgp_max = 65, 811 + }, 812 + .dc_data = &(struct power_limits) { 813 + .ppt_pl1_spl_min = 15, 814 + .ppt_pl1_spl_max = 35, 815 + .ppt_pl2_sppt_min = 25, 816 + .ppt_pl2_sppt_max = 35, 817 + .ppt_pl3_fppt_min = 35, 818 + .ppt_pl3_fppt_max = 65, 819 + .nv_temp_target_min = 75, 820 + .nv_temp_target_max = 87, 821 + }, 822 + .requires_fan_curve = true, 823 + }, 824 + }, 825 + { 826 + .matches = { 827 + DMI_MATCH(DMI_BOARD_NAME, "GA403UV"), 828 + }, 829 + .driver_data = &(struct power_data) { 830 + .ac_data = &(struct power_limits) { 831 + .ppt_pl1_spl_min = 15, 832 + .ppt_pl1_spl_max = 80, 833 + .ppt_pl2_sppt_min = 25, 834 + .ppt_pl2_sppt_max = 80, 835 + .ppt_pl3_fppt_min = 35, 836 + .ppt_pl3_fppt_max = 80, 837 + .nv_dynamic_boost_min = 5, 838 + .nv_dynamic_boost_max = 25, 839 + .nv_temp_target_min = 75, 840 + .nv_temp_target_max = 87, 841 + .nv_tgp_min = 55, 842 + .nv_tgp_max = 65, 843 + }, 844 + .dc_data = &(struct power_limits) { 845 + .ppt_pl1_spl_min = 15, 846 + .ppt_pl1_spl_max = 35, 847 + .ppt_pl2_sppt_min = 25, 848 + .ppt_pl2_sppt_max = 35, 849 + .ppt_pl3_fppt_min = 35, 850 + .ppt_pl3_fppt_max = 65, 851 + .nv_temp_target_min = 75, 852 + .nv_temp_target_max = 87, 853 + }, 854 + .requires_fan_curve = true, 855 + }, 856 + }, 857 + { 858 + .matches = { 859 + DMI_MATCH(DMI_BOARD_NAME, "GA403WM"), 860 + }, 861 + .driver_data = &(struct power_data) { 862 + .ac_data = &(struct power_limits) { 863 + .ppt_pl1_spl_min = 15, 864 + .ppt_pl1_spl_max = 80, 865 + .ppt_pl2_sppt_min = 25, 866 + .ppt_pl2_sppt_max = 80, 867 + .ppt_pl3_fppt_min = 35, 868 + .ppt_pl3_fppt_max = 80, 869 + .nv_dynamic_boost_min = 0, 870 + .nv_dynamic_boost_max = 15, 871 + .nv_temp_target_min = 75, 872 + .nv_temp_target_max = 87, 873 + .nv_tgp_min = 55, 874 + .nv_tgp_max = 85, 875 + }, 876 + .dc_data = &(struct power_limits) { 877 + .ppt_pl1_spl_min = 15, 878 + .ppt_pl1_spl_max = 35, 879 + .ppt_pl2_sppt_min = 25, 880 + .ppt_pl2_sppt_max = 35, 881 + .ppt_pl3_fppt_min = 35, 882 + .ppt_pl3_fppt_max = 65, 883 + .nv_temp_target_min = 75, 884 + .nv_temp_target_max = 87, 885 + }, 886 + .requires_fan_curve = true, 887 + }, 888 + }, 889 + { 890 + .matches = { 891 + DMI_MATCH(DMI_BOARD_NAME, "GA403WR"), 892 + }, 893 + .driver_data = &(struct power_data) { 894 + .ac_data = &(struct power_limits) { 895 + .ppt_pl1_spl_min = 15, 896 + .ppt_pl1_spl_max = 80, 897 + .ppt_pl2_sppt_min = 25, 898 + .ppt_pl2_sppt_max = 80, 899 + .ppt_pl3_fppt_min = 35, 900 + .ppt_pl3_fppt_max = 80, 901 + .nv_dynamic_boost_min = 0, 902 + .nv_dynamic_boost_max = 25, 903 + .nv_temp_target_min = 75, 904 + .nv_temp_target_max = 87, 905 + .nv_tgp_min = 80, 906 + .nv_tgp_max = 95, 907 + }, 908 + .dc_data = &(struct power_limits) { 909 + .ppt_pl1_spl_min = 15, 910 + .ppt_pl1_spl_max = 35, 911 + .ppt_pl2_sppt_min = 25, 912 + .ppt_pl2_sppt_max = 35, 913 + .ppt_pl3_fppt_min = 35, 914 + .ppt_pl3_fppt_max = 65, 915 + .nv_temp_target_min = 75, 916 + .nv_temp_target_max = 87, 917 + }, 918 + .requires_fan_curve = true, 919 + }, 920 + }, 921 + { 922 + .matches = { 923 + DMI_MATCH(DMI_BOARD_NAME, "GA403WW"), 924 + }, 925 + .driver_data = &(struct power_data) { 926 + .ac_data = &(struct power_limits) { 927 + .ppt_pl1_spl_min = 15, 928 + .ppt_pl1_spl_max = 80, 929 + .ppt_pl2_sppt_min = 25, 930 + .ppt_pl2_sppt_max = 80, 931 + .ppt_pl3_fppt_min = 35, 932 + .ppt_pl3_fppt_max = 80, 933 + .nv_dynamic_boost_min = 0, 934 + .nv_dynamic_boost_max = 25, 935 + .nv_temp_target_min = 75, 936 + .nv_temp_target_max = 87, 937 + .nv_tgp_min = 80, 938 + .nv_tgp_max = 95, 912 939 }, 913 940 .dc_data = &(struct power_limits) { 914 941 .ppt_pl1_spl_min = 15, ··· 1181 952 }, 1182 953 { 1183 954 .matches = { 955 + DMI_MATCH(DMI_BOARD_NAME, "GU605CR"), 956 + }, 957 + .driver_data = &(struct power_data) { 958 + .ac_data = &(struct power_limits) { 959 + .ppt_pl1_spl_min = 30, 960 + .ppt_pl1_spl_max = 85, 961 + .ppt_pl2_sppt_min = 38, 962 + .ppt_pl2_sppt_max = 110, 963 + .nv_dynamic_boost_min = 5, 964 + .nv_dynamic_boost_max = 20, 965 + .nv_temp_target_min = 75, 966 + .nv_temp_target_max = 87, 967 + .nv_tgp_min = 80, 968 + .nv_tgp_def = 90, 969 + .nv_tgp_max = 105, 970 + }, 971 + .dc_data = &(struct power_limits) { 972 + .ppt_pl1_spl_min = 30, 973 + .ppt_pl1_spl_max = 85, 974 + .ppt_pl2_sppt_min = 38, 975 + .ppt_pl2_sppt_max = 110, 976 + .nv_temp_target_min = 75, 977 + .nv_temp_target_max = 87, 978 + }, 979 + .requires_fan_curve = true, 980 + }, 981 + }, 982 + { 983 + .matches = { 1184 984 DMI_MATCH(DMI_BOARD_NAME, "GU605CW"), 1185 985 }, 1186 986 .driver_data = &(struct power_data) { ··· 1316 1058 .ppt_pl1_spl_max = 45, 1317 1059 .ppt_pl2_sppt_min = 25, 1318 1060 .ppt_pl2_sppt_max = 54, 1061 + .ppt_pl3_fppt_min = 35, 1062 + .ppt_pl3_fppt_max = 65, 1063 + .nv_temp_target_min = 75, 1064 + .nv_temp_target_max = 87, 1065 + }, 1066 + .dc_data = &(struct power_limits) { 1067 + .ppt_pl1_spl_min = 15, 1068 + .ppt_pl1_spl_max = 35, 1069 + .ppt_pl2_sppt_min = 25, 1070 + .ppt_pl2_sppt_max = 35, 1071 + .ppt_pl3_fppt_min = 35, 1072 + .ppt_pl3_fppt_max = 65, 1073 + .nv_temp_target_min = 75, 1074 + .nv_temp_target_max = 87, 1075 + }, 1076 + }, 1077 + }, 1078 + { 1079 + .matches = { 1080 + DMI_MATCH(DMI_BOARD_NAME, "GV302XV"), 1081 + }, 1082 + .driver_data = &(struct power_data) { 1083 + .ac_data = &(struct power_limits) { 1084 + .ppt_pl1_spl_min = 15, 1085 + .ppt_pl1_spl_max = 55, 1086 + .ppt_pl2_sppt_min = 25, 1087 + .ppt_pl2_sppt_max = 60, 1319 1088 .ppt_pl3_fppt_min = 35, 1320 1089 .ppt_pl3_fppt_max = 65, 1321 1090 .nv_temp_target_min = 75, ··· 1491 1206 }, 1492 1207 { 1493 1208 .matches = { 1209 + DMI_MATCH(DMI_BOARD_NAME, "G513QY"), 1210 + }, 1211 + .driver_data = &(struct power_data) { 1212 + .ac_data = &(struct power_limits) { 1213 + /* Advantage Edition Laptop, no PL1 or PL2 limits */ 1214 + .ppt_apu_sppt_min = 15, 1215 + .ppt_apu_sppt_max = 100, 1216 + .ppt_platform_sppt_min = 70, 1217 + .ppt_platform_sppt_max = 190, 1218 + }, 1219 + .dc_data = NULL, 1220 + .requires_fan_curve = true, 1221 + }, 1222 + }, 1223 + { 1224 + .matches = { 1494 1225 DMI_MATCH(DMI_BOARD_NAME, "G513R"), 1495 1226 }, 1496 1227 .driver_data = &(struct power_data) { ··· 1549 1248 .nv_temp_target_max = 87, 1550 1249 .nv_dynamic_boost_min = 5, 1551 1250 .nv_dynamic_boost_max = 25, 1251 + }, 1252 + .dc_data = &(struct power_limits) { 1253 + .ppt_pl1_spl_min = 25, 1254 + .ppt_pl1_spl_max = 55, 1255 + .ppt_pl2_sppt_min = 25, 1256 + .ppt_pl2_sppt_max = 70, 1257 + .nv_temp_target_min = 75, 1258 + .nv_temp_target_max = 87, 1259 + }, 1260 + .requires_fan_curve = true, 1261 + }, 1262 + }, 1263 + { 1264 + .matches = { 1265 + DMI_MATCH(DMI_BOARD_NAME, "G615LR"), 1266 + }, 1267 + .driver_data = &(struct power_data) { 1268 + .ac_data = &(struct power_limits) { 1269 + .ppt_pl1_spl_min = 28, 1270 + .ppt_pl1_spl_def = 140, 1271 + .ppt_pl1_spl_max = 175, 1272 + .ppt_pl2_sppt_min = 28, 1273 + .ppt_pl2_sppt_max = 175, 1274 + .nv_temp_target_min = 75, 1275 + .nv_temp_target_max = 87, 1276 + .nv_dynamic_boost_min = 5, 1277 + .nv_dynamic_boost_max = 25, 1278 + .nv_tgp_min = 65, 1279 + .nv_tgp_max = 115, 1552 1280 }, 1553 1281 .dc_data = &(struct power_limits) { 1554 1282 .ppt_pl1_spl_min = 25, ··· 1744 1414 .nv_dynamic_boost_max = 25, 1745 1415 .nv_temp_target_min = 75, 1746 1416 .nv_temp_target_max = 87, 1417 + }, 1418 + .dc_data = &(struct power_limits) { 1419 + .ppt_pl1_spl_min = 25, 1420 + .ppt_pl1_spl_max = 55, 1421 + .ppt_pl2_sppt_min = 25, 1422 + .ppt_pl2_sppt_max = 70, 1423 + .nv_temp_target_min = 75, 1424 + .nv_temp_target_max = 87, 1425 + }, 1426 + .requires_fan_curve = true, 1427 + }, 1428 + }, 1429 + { 1430 + .matches = { 1431 + DMI_MATCH(DMI_BOARD_NAME, "G835LR"), 1432 + }, 1433 + .driver_data = &(struct power_data) { 1434 + .ac_data = &(struct power_limits) { 1435 + .ppt_pl1_spl_min = 28, 1436 + .ppt_pl1_spl_def = 140, 1437 + .ppt_pl1_spl_max = 175, 1438 + .ppt_pl2_sppt_min = 28, 1439 + .ppt_pl2_sppt_max = 175, 1440 + .nv_dynamic_boost_min = 5, 1441 + .nv_dynamic_boost_max = 25, 1442 + .nv_temp_target_min = 75, 1443 + .nv_temp_target_max = 87, 1444 + .nv_tgp_min = 65, 1445 + .nv_tgp_max = 115, 1446 + }, 1447 + .dc_data = &(struct power_limits) { 1448 + .ppt_pl1_spl_min = 25, 1449 + .ppt_pl1_spl_max = 55, 1450 + .ppt_pl2_sppt_min = 25, 1451 + .ppt_pl2_sppt_max = 70, 1452 + .nv_temp_target_min = 75, 1453 + .nv_temp_target_max = 87, 1454 + }, 1455 + .requires_fan_curve = true, 1456 + }, 1457 + }, 1458 + { 1459 + .matches = { 1460 + DMI_MATCH(DMI_BOARD_NAME, "G835LW"), 1461 + }, 1462 + .driver_data = &(struct power_data) { 1463 + .ac_data = &(struct power_limits) { 1464 + .ppt_pl1_spl_min = 28, 1465 + .ppt_pl1_spl_def = 140, 1466 + .ppt_pl1_spl_max = 175, 1467 + .ppt_pl2_sppt_min = 28, 1468 + .ppt_pl2_sppt_max = 175, 1469 + .nv_dynamic_boost_min = 5, 1470 + .nv_dynamic_boost_max = 25, 1471 + .nv_temp_target_min = 75, 1472 + .nv_temp_target_max = 87, 1473 + .nv_tgp_min = 80, 1474 + .nv_tgp_max = 150, 1747 1475 }, 1748 1476 .dc_data = &(struct power_limits) { 1749 1477 .ppt_pl1_spl_min = 25,
+1
drivers/platform/x86/asus-nb-wmi.c
··· 580 580 { KE_KEY, 0x2a, { KEY_SELECTIVE_SCREENSHOT } }, 581 581 { KE_IGNORE, 0x2b, }, /* PrintScreen (also send via PS/2) on newer models */ 582 582 { KE_IGNORE, 0x2c, }, /* CapsLock (also send via PS/2) on newer models */ 583 + { KE_KEY, 0x2d, { KEY_DISPLAYTOGGLE } }, 583 584 { KE_KEY, 0x30, { KEY_VOLUMEUP } }, 584 585 { KE_KEY, 0x31, { KEY_VOLUMEDOWN } }, 585 586 { KE_KEY, 0x32, { KEY_MUTE } },
+2 -1
drivers/platform/x86/asus-wmi.c
··· 4889 4889 asus->egpu_enable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU); 4890 4890 asus->dgpu_disable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_DGPU); 4891 4891 asus->kbd_rgb_state_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_STATE); 4892 - asus->oobe_state_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_OOBE); 4893 4892 4894 4893 if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_MINI_LED_MODE)) 4895 4894 asus->mini_led_dev_id = ASUS_WMI_DEVID_MINI_LED_MODE; ··· 4900 4901 else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_GPU_MUX_VIVO)) 4901 4902 asus->gpu_mux_dev = ASUS_WMI_DEVID_GPU_MUX_VIVO; 4902 4903 #endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */ 4904 + 4905 + asus->oobe_state_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_OOBE); 4903 4906 4904 4907 if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY)) 4905 4908 asus->throttle_thermal_policy_dev = ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY;
+32
drivers/platform/x86/dell/alienware-wmi-wmax.c
··· 90 90 91 91 static const struct dmi_system_id awcc_dmi_table[] __initconst = { 92 92 { 93 + .ident = "Alienware 16 Area-51", 94 + .matches = { 95 + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), 96 + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware 16 Area-51"), 97 + }, 98 + .driver_data = &g_series_quirks, 99 + }, 100 + { 101 + .ident = "Alienware 16X Aurora", 102 + .matches = { 103 + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), 104 + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware 16X Aurora"), 105 + }, 106 + .driver_data = &g_series_quirks, 107 + }, 108 + { 109 + .ident = "Alienware 18 Area-51", 110 + .matches = { 111 + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), 112 + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware 18 Area-51"), 113 + }, 114 + .driver_data = &g_series_quirks, 115 + }, 116 + { 93 117 .ident = "Alienware 16 Aurora", 94 118 .matches = { 95 119 DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), ··· 184 160 DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15"), 185 161 }, 186 162 .driver_data = &generic_quirks, 163 + }, 164 + { 165 + .ident = "Alienware x16", 166 + .matches = { 167 + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), 168 + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x16"), 169 + }, 170 + .driver_data = &g_series_quirks, 187 171 }, 188 172 { 189 173 .ident = "Alienware x17",
+1
drivers/platform/x86/dell/dell-lis3lv02d.c
··· 44 44 /* 45 45 * Additional individual entries were added after verification. 46 46 */ 47 + DELL_LIS3LV02D_DMI_ENTRY("Latitude 5400", 0x29), 47 48 DELL_LIS3LV02D_DMI_ENTRY("Latitude 5480", 0x29), 48 49 DELL_LIS3LV02D_DMI_ENTRY("Latitude 5500", 0x29), 49 50 DELL_LIS3LV02D_DMI_ENTRY("Latitude E6330", 0x29),
+8
drivers/platform/x86/hp/hp-bioscfg/bioscfg.c
··· 10 10 #include <linux/fs.h> 11 11 #include <linux/module.h> 12 12 #include <linux/kernel.h> 13 + #include <linux/printk.h> 14 + #include <linux/string.h> 13 15 #include <linux/wmi.h> 14 16 #include "bioscfg.h" 15 17 #include "../../firmware_attributes_class.h" ··· 782 780 783 781 if (ret < 0) 784 782 goto buff_attr_exit; 783 + 784 + if (strlen(str) == 0) { 785 + pr_debug("Ignoring attribute with empty name\n"); 786 + ret = 0; 787 + goto buff_attr_exit; 788 + } 785 789 786 790 if (attr_type == HPWMI_PASSWORD_TYPE || 787 791 attr_type == HPWMI_SECURE_PLATFORM_TYPE)
+7 -5
drivers/platform/x86/hp/hp-bioscfg/bioscfg.h
··· 10 10 11 11 #include <linux/wmi.h> 12 12 #include <linux/types.h> 13 + #include <linux/string.h> 13 14 #include <linux/device.h> 14 15 #include <linux/module.h> 15 16 #include <linux/kernel.h> ··· 57 56 58 57 #define PASSWD_MECHANISM_TYPES "password" 59 58 60 - #define HP_WMI_BIOS_GUID "5FB7F034-2C63-45e9-BE91-3D44E2C707E4" 59 + #define HP_WMI_BIOS_GUID "5FB7F034-2C63-45E9-BE91-3D44E2C707E4" 61 60 62 - #define HP_WMI_BIOS_STRING_GUID "988D08E3-68F4-4c35-AF3E-6A1B8106F83C" 61 + #define HP_WMI_BIOS_STRING_GUID "988D08E3-68F4-4C35-AF3E-6A1B8106F83C" 63 62 #define HP_WMI_BIOS_INTEGER_GUID "8232DE3D-663D-4327-A8F4-E293ADB9BF05" 64 63 #define HP_WMI_BIOS_ENUMERATION_GUID "2D114B49-2DFB-4130-B8FE-4A3C09E75133" 65 64 #define HP_WMI_BIOS_ORDERED_LIST_GUID "14EA9746-CE1F-4098-A0E0-7045CB4DA745" 66 65 #define HP_WMI_BIOS_PASSWORD_GUID "322F2028-0F84-4901-988E-015176049E2D" 67 - #define HP_WMI_SET_BIOS_SETTING_GUID "1F4C91EB-DC5C-460b-951D-C7CB9B4B8D5E" 66 + #define HP_WMI_SET_BIOS_SETTING_GUID "1F4C91EB-DC5C-460B-951D-C7CB9B4B8D5E" 68 67 69 68 enum hp_wmi_spm_commandtype { 70 69 HPWMI_SECUREPLATFORM_GET_STATE = 0x10, ··· 286 285 { \ 287 286 int i; \ 288 287 \ 289 - for (i = 0; i <= bioscfg_drv.type##_instances_count; i++) { \ 290 - if (!strcmp(kobj->name, bioscfg_drv.type##_data[i].attr_name_kobj->name)) \ 288 + for (i = 0; i < bioscfg_drv.type##_instances_count; i++) { \ 289 + if (bioscfg_drv.type##_data[i].attr_name_kobj && \ 290 + !strcmp(kobj->name, bioscfg_drv.type##_data[i].attr_name_kobj->name)) \ 291 291 return i; \ 292 292 } \ 293 293 return -EIO; \
+2 -2
drivers/platform/x86/hp/hp-bioscfg/enum-attributes.c
··· 207 207 case PREREQUISITES: 208 208 size = min_t(u32, enum_data->common.prerequisites_size, MAX_PREREQUISITES_SIZE); 209 209 for (reqs = 0; reqs < size; reqs++) { 210 - if (elem >= enum_obj_count) { 210 + if (elem + reqs >= enum_obj_count) { 211 211 pr_err("Error enum-objects package is too small\n"); 212 212 return -EINVAL; 213 213 } ··· 255 255 256 256 for (pos_values = 0; pos_values < size && pos_values < MAX_VALUES_SIZE; 257 257 pos_values++) { 258 - if (elem >= enum_obj_count) { 258 + if (elem + pos_values >= enum_obj_count) { 259 259 pr_err("Error enum-objects package is too small\n"); 260 260 return -EINVAL; 261 261 }
+1 -1
drivers/platform/x86/hp/hp-bioscfg/int-attributes.c
··· 227 227 size = min_t(u32, integer_data->common.prerequisites_size, MAX_PREREQUISITES_SIZE); 228 228 229 229 for (reqs = 0; reqs < size; reqs++) { 230 - if (elem >= integer_obj_count) { 230 + if (elem + reqs >= integer_obj_count) { 231 231 pr_err("Error elem-objects package is too small\n"); 232 232 return -EINVAL; 233 233 }
+5
drivers/platform/x86/hp/hp-bioscfg/order-list-attributes.c
··· 216 216 size = min_t(u32, ordered_list_data->common.prerequisites_size, 217 217 MAX_PREREQUISITES_SIZE); 218 218 for (reqs = 0; reqs < size; reqs++) { 219 + if (elem + reqs >= order_obj_count) { 220 + pr_err("Error elem-objects package is too small\n"); 221 + return -EINVAL; 222 + } 223 + 219 224 ret = hp_convert_hexstr_to_str(order_obj[elem + reqs].string.pointer, 220 225 order_obj[elem + reqs].string.length, 221 226 &str_value, &value_len);
+5
drivers/platform/x86/hp/hp-bioscfg/passwdobj-attributes.c
··· 303 303 MAX_PREREQUISITES_SIZE); 304 304 305 305 for (reqs = 0; reqs < size; reqs++) { 306 + if (elem + reqs >= password_obj_count) { 307 + pr_err("Error elem-objects package is too small\n"); 308 + return -EINVAL; 309 + } 310 + 306 311 ret = hp_convert_hexstr_to_str(password_obj[elem + reqs].string.pointer, 307 312 password_obj[elem + reqs].string.length, 308 313 &str_value, &value_len);
+1 -1
drivers/platform/x86/hp/hp-bioscfg/string-attributes.c
··· 217 217 MAX_PREREQUISITES_SIZE); 218 218 219 219 for (reqs = 0; reqs < size; reqs++) { 220 - if (elem >= string_obj_count) { 220 + if (elem + reqs >= string_obj_count) { 221 221 pr_err("Error elem-objects package is too small\n"); 222 222 return -EINVAL; 223 223 }
+1 -1
drivers/platform/x86/ibm_rtl.c
··· 273 273 /* search for the _RTL_ signature at the start of the table */ 274 274 for (i = 0 ; i < ebda_size/sizeof(unsigned int); i++) { 275 275 struct ibm_rtl_table __iomem * tmp; 276 - tmp = (struct ibm_rtl_table __iomem *) (ebda_map+i); 276 + tmp = (struct ibm_rtl_table __iomem *) (ebda_map + i*sizeof(unsigned int)); 277 277 if ((readq(&tmp->signature) & RTL_MASK) == RTL_SIGNATURE) { 278 278 phys_addr_t addr; 279 279 unsigned int plen;
+5 -3
drivers/platform/x86/intel/pmt/discovery.c
··· 503 503 504 504 ret = kobject_init_and_add(&feature->kobj, ktype, &priv->dev->kobj, 505 505 "%s", pmt_feature_names[feature->id]); 506 - if (ret) 506 + if (ret) { 507 + kobject_put(&feature->kobj); 507 508 return ret; 509 + } 508 510 509 511 kobject_uevent(&feature->kobj, KOBJ_ADD); 510 512 pmt_features_add_feat(feature); ··· 548 546 priv->dev = device_create(&intel_pmt_class, &auxdev->dev, MKDEV(0, 0), priv, 549 547 "%s-%s", "features", dev_name(priv->parent)); 550 548 if (IS_ERR(priv->dev)) 551 - return dev_err_probe(priv->dev, PTR_ERR(priv->dev), 549 + return dev_err_probe(&auxdev->dev, PTR_ERR(priv->dev), 552 550 "Could not create %s-%s device node\n", 553 - "features", dev_name(priv->dev)); 551 + "features", dev_name(priv->parent)); 554 552 555 553 /* Initialize each feature */ 556 554 for (i = 0; i < ivdev->num_resources; i++) {
+1 -1
drivers/platform/x86/lenovo/ideapad-laptop.c
··· 1361 1361 /* Performance toggle also Fn+Q, handled inside ideapad_wmi_notify() */ 1362 1362 { KE_KEY, 0x3d | IDEAPAD_WMI_KEY, { KEY_PROG4 } }, 1363 1363 /* shift + prtsc */ 1364 - { KE_KEY, 0x2d | IDEAPAD_WMI_KEY, { KEY_CUT } }, 1364 + { KE_KEY, 0x2d | IDEAPAD_WMI_KEY, { KEY_SELECTIVE_SCREENSHOT } }, 1365 1365 { KE_KEY, 0x29 | IDEAPAD_WMI_KEY, { KEY_TOUCHPAD_TOGGLE } }, 1366 1366 { KE_KEY, 0x2a | IDEAPAD_WMI_KEY, { KEY_ROOT_MENU } }, 1367 1367
+5 -1
drivers/platform/x86/lenovo/think-lmi.c
··· 195 195 }; 196 196 197 197 static const struct tlmi_cert_guids thinkcenter_cert_guid = { 198 - .thumbprint = NULL, 198 + .thumbprint = LENOVO_CERT_THUMBPRINT_GUID, /* Same GUID as TP */ 199 199 .set_bios_setting = LENOVO_TC_SET_BIOS_SETTING_CERT_GUID, 200 200 .save_bios_setting = LENOVO_TC_SAVE_BIOS_SETTING_CERT_GUID, 201 201 .cert_to_password = LENOVO_TC_CERT_TO_PASSWORD_GUID, ··· 707 707 acpi_status status; 708 708 709 709 if (!tlmi_priv.cert_guid->thumbprint) 710 + return -EOPNOTSUPP; 711 + 712 + /* Older ThinkCenter BIOS may not have support */ 713 + if (!wmi_has_guid(tlmi_priv.cert_guid->thumbprint)) 710 714 return -EOPNOTSUPP; 711 715 712 716 status = wmi_evaluate_method(tlmi_priv.cert_guid->thumbprint, 0, 0, &input, &output);
+3
drivers/platform/x86/msi-laptop.c
··· 1130 1130 sysfs_remove_group(&msipf_device->dev.kobj, &msipf_attribute_group); 1131 1131 if (!quirks->old_ec_model && threeg_exists) 1132 1132 device_remove_file(&msipf_device->dev, &dev_attr_threeg); 1133 + if (quirks->old_ec_model) 1134 + sysfs_remove_group(&msipf_device->dev.kobj, 1135 + &msipf_old_attribute_group); 1133 1136 platform_device_unregister(msipf_device); 1134 1137 platform_driver_unregister(&msipf_driver); 1135 1138 backlight_device_unregister(msibl_device);
+6 -3
drivers/platform/x86/samsung-galaxybook.c
··· 442 442 union power_supply_propval *val) 443 443 { 444 444 struct samsung_galaxybook *galaxybook = ext_data; 445 + u8 value; 445 446 int err; 446 447 447 448 if (psp != POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD) 448 449 return -EINVAL; 449 450 450 - err = charge_control_end_threshold_acpi_get(galaxybook, (u8 *)&val->intval); 451 + err = charge_control_end_threshold_acpi_get(galaxybook, &value); 451 452 if (err) 452 453 return err; 453 454 ··· 456 455 * device stores "no end threshold" as 0 instead of 100; 457 456 * if device has 0, report 100 458 457 */ 459 - if (val->intval == 0) 460 - val->intval = 100; 458 + if (value == 0) 459 + value = 100; 460 + 461 + val->intval = value; 461 462 462 463 return 0; 463 464 }
+7
drivers/platform/x86/uniwill/uniwill-acpi.c
··· 1845 1845 }, 1846 1846 }, 1847 1847 { 1848 + .ident = "TUXEDO Book BA15 Gen10 AMD", 1849 + .matches = { 1850 + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), 1851 + DMI_EXACT_MATCH(DMI_BOARD_NAME, "PF5PU1G"), 1852 + }, 1853 + }, 1854 + { 1848 1855 .ident = "TUXEDO Pulse 14 Gen1 AMD", 1849 1856 .matches = { 1850 1857 DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
+9 -8
include/linux/intel_vsec.h
··· 80 80 81 81 /** 82 82 * struct pmt_callbacks - Callback infrastructure for PMT devices 83 - * ->read_telem() when specified, called by client driver to access PMT data (instead 84 - * of direct copy). 85 - * @pdev: PCI device reference for the callback's use 86 - * @guid: ID of data to acccss 87 - * @data: buffer for the data to be copied 88 - * @off: offset into the requested buffer 89 - * @count: size of buffer 83 + * @read_telem: when specified, called by client driver to access PMT 84 + * data (instead of direct copy). 85 + * * pdev: PCI device reference for the callback's use 86 + * * guid: ID of data to acccss 87 + * * data: buffer for the data to be copied 88 + * * off: offset into the requested buffer 89 + * * count: size of buffer 90 90 */ 91 91 struct pmt_callbacks { 92 92 int (*read_telem)(struct pci_dev *pdev, u32 guid, u64 *data, loff_t off, u32 count); ··· 120 120 }; 121 121 122 122 /** 123 - * struct intel_sec_device - Auxbus specific device information 123 + * struct intel_vsec_device - Auxbus specific device information 124 124 * @auxdev: auxbus device struct for auxbus access 125 125 * @pcidev: pci device associated with the device 126 126 * @resource: any resources shared by the parent ··· 128 128 * @num_resources: number of resources 129 129 * @id: xarray id 130 130 * @priv_data: any private data needed 131 + * @priv_data_size: size of private data area 131 132 * @quirks: specified quirks 132 133 * @base_addr: base address of entries (if specified) 133 134 * @cap_id: the enumerated id of the vsec feature