Re: [PATCH v2 07/10] platform/x86: alienware-wmi-wmax: Add HWMON support
From: kernel test robot
Date: Wed Mar 05 2025 - 06:12:12 EST
Hi Kurt,
kernel test robot noticed the following build errors:
[auto build test ERROR on c86e269c4da6dca2beaf99bdc6fd9f0a9f69035f]
url: https://github.com/intel-lab-lkp/linux/commits/Kurt-Borja/platform-x86-alienware-wmi-wmax-Rename-thermal-related-symbols/20250226-063232
base: c86e269c4da6dca2beaf99bdc6fd9f0a9f69035f
patch link: https://lore.kernel.org/r/20250225222500.23535-8-kuurtb%40gmail.com
patch subject: [PATCH v2 07/10] platform/x86: alienware-wmi-wmax: Add HWMON support
config: x86_64-randconfig-074-20250305 (https://download.01.org/0day-ci/archive/20250305/202503051819.bQ9P70Og-lkp@xxxxxxxxx/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250305/202503051819.bQ9P70Og-lkp@xxxxxxxxx/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503051819.bQ9P70Og-lkp@xxxxxxxxx/
All errors (new ones prefixed by >>):
ld: vmlinux.o: in function `awcc_platform_profile_init':
>> drivers/platform/x86/dell/alienware-wmi-wmax.c:1096: undefined reference to `devm_platform_profile_register'
ld: vmlinux.o: in function `awcc_hwmon_init':
>> drivers/platform/x86/dell/alienware-wmi-wmax.c:951: undefined reference to `devm_hwmon_device_register_with_info'
vim +1096 drivers/platform/x86/dell/alienware-wmi-wmax.c
d29a9de20be84d Kurt Borja 2025-02-25 932
d29a9de20be84d Kurt Borja 2025-02-25 933 static int awcc_hwmon_init(struct wmi_device *wdev)
d29a9de20be84d Kurt Borja 2025-02-25 934 {
d29a9de20be84d Kurt Borja 2025-02-25 935 struct awcc_priv *priv = dev_get_drvdata(&wdev->dev);
d29a9de20be84d Kurt Borja 2025-02-25 936 int ret;
d29a9de20be84d Kurt Borja 2025-02-25 937
d29a9de20be84d Kurt Borja 2025-02-25 938 priv->fan_data = devm_kcalloc(&wdev->dev, priv->fan_count,
d29a9de20be84d Kurt Borja 2025-02-25 939 sizeof(*priv->fan_data), GFP_KERNEL);
d29a9de20be84d Kurt Borja 2025-02-25 940 if (!priv->fan_data)
d29a9de20be84d Kurt Borja 2025-02-25 941 return -ENOMEM;
d29a9de20be84d Kurt Borja 2025-02-25 942
d29a9de20be84d Kurt Borja 2025-02-25 943 ret = awcc_hwmon_temps_init(wdev);
d29a9de20be84d Kurt Borja 2025-02-25 944 if (ret)
d29a9de20be84d Kurt Borja 2025-02-25 945 return ret;
d29a9de20be84d Kurt Borja 2025-02-25 946
d29a9de20be84d Kurt Borja 2025-02-25 947 ret = awcc_hwmon_fans_init(wdev);
d29a9de20be84d Kurt Borja 2025-02-25 948 if (ret)
d29a9de20be84d Kurt Borja 2025-02-25 949 return ret;
d29a9de20be84d Kurt Borja 2025-02-25 950
d29a9de20be84d Kurt Borja 2025-02-25 @951 priv->hwdev = devm_hwmon_device_register_with_info(&wdev->dev, "alienware_wmi", priv,
d29a9de20be84d Kurt Borja 2025-02-25 952 &awcc_hwmon_chip_info, NULL);
d29a9de20be84d Kurt Borja 2025-02-25 953
d29a9de20be84d Kurt Borja 2025-02-25 954 return PTR_ERR_OR_ZERO(priv->hwdev);
d29a9de20be84d Kurt Borja 2025-02-25 955 }
d29a9de20be84d Kurt Borja 2025-02-25 956
404d3e186207d4 Kurt Borja 2025-02-25 957 /*
404d3e186207d4 Kurt Borja 2025-02-25 958 * Thermal Profile control
404d3e186207d4 Kurt Borja 2025-02-25 959 * - Provides thermal profile control through the Platform Profile API
404d3e186207d4 Kurt Borja 2025-02-25 960 */
94b96f340b5e25 Kurt Borja 2025-02-25 961 static int awcc_platform_profile_get(struct device *dev,
8cc2c415d092e1 Kurt Borja 2025-02-07 962 enum platform_profile_option *profile)
8cc2c415d092e1 Kurt Borja 2025-02-07 963 {
8cc2c415d092e1 Kurt Borja 2025-02-07 964 struct awcc_priv *priv = dev_get_drvdata(dev);
8cc2c415d092e1 Kurt Borja 2025-02-07 965 u32 out_data;
8cc2c415d092e1 Kurt Borja 2025-02-07 966 int ret;
8cc2c415d092e1 Kurt Borja 2025-02-07 967
94b96f340b5e25 Kurt Borja 2025-02-25 968 ret = awcc_thermal_information(priv->wdev, AWCC_OP_GET_CURRENT_PROFILE,
8cc2c415d092e1 Kurt Borja 2025-02-07 969 0, &out_data);
8cc2c415d092e1 Kurt Borja 2025-02-07 970
8cc2c415d092e1 Kurt Borja 2025-02-07 971 if (ret < 0)
8cc2c415d092e1 Kurt Borja 2025-02-07 972 return ret;
8cc2c415d092e1 Kurt Borja 2025-02-07 973
1dc40c13e81906 Kurt Borja 2025-02-25 974 switch (out_data) {
1dc40c13e81906 Kurt Borja 2025-02-25 975 case AWCC_SPECIAL_PROFILE_CUSTOM:
1dc40c13e81906 Kurt Borja 2025-02-25 976 *profile = PLATFORM_PROFILE_CUSTOM;
1dc40c13e81906 Kurt Borja 2025-02-25 977 return 0;
1dc40c13e81906 Kurt Borja 2025-02-25 978 case AWCC_SPECIAL_PROFILE_GMODE:
8cc2c415d092e1 Kurt Borja 2025-02-07 979 *profile = PLATFORM_PROFILE_PERFORMANCE;
8cc2c415d092e1 Kurt Borja 2025-02-07 980 return 0;
1dc40c13e81906 Kurt Borja 2025-02-25 981 default:
1dc40c13e81906 Kurt Borja 2025-02-25 982 break;
8cc2c415d092e1 Kurt Borja 2025-02-07 983 }
8cc2c415d092e1 Kurt Borja 2025-02-07 984
0cc2eb52fa337a Kurt Borja 2025-02-25 985 if (!is_awcc_thermal_profile_id(out_data))
8cc2c415d092e1 Kurt Borja 2025-02-07 986 return -ENODATA;
8cc2c415d092e1 Kurt Borja 2025-02-07 987
94b96f340b5e25 Kurt Borja 2025-02-25 988 out_data &= AWCC_THERMAL_MODE_MASK;
94b96f340b5e25 Kurt Borja 2025-02-25 989 *profile = awcc_mode_to_platform_profile[out_data];
8cc2c415d092e1 Kurt Borja 2025-02-07 990
8cc2c415d092e1 Kurt Borja 2025-02-07 991 return 0;
8cc2c415d092e1 Kurt Borja 2025-02-07 992 }
8cc2c415d092e1 Kurt Borja 2025-02-07 993
94b96f340b5e25 Kurt Borja 2025-02-25 994 static int awcc_platform_profile_set(struct device *dev,
8cc2c415d092e1 Kurt Borja 2025-02-07 995 enum platform_profile_option profile)
8cc2c415d092e1 Kurt Borja 2025-02-07 996 {
8cc2c415d092e1 Kurt Borja 2025-02-07 997 struct awcc_priv *priv = dev_get_drvdata(dev);
8cc2c415d092e1 Kurt Borja 2025-02-07 998
8cc2c415d092e1 Kurt Borja 2025-02-07 999 if (awcc->gmode) {
8cc2c415d092e1 Kurt Borja 2025-02-07 1000 u32 gmode_status;
8cc2c415d092e1 Kurt Borja 2025-02-07 1001 int ret;
8cc2c415d092e1 Kurt Borja 2025-02-07 1002
94b96f340b5e25 Kurt Borja 2025-02-25 1003 ret = awcc_game_shift_status(priv->wdev,
94b96f340b5e25 Kurt Borja 2025-02-25 1004 AWCC_OP_GET_GAME_SHIFT_STATUS,
8cc2c415d092e1 Kurt Borja 2025-02-07 1005 &gmode_status);
8cc2c415d092e1 Kurt Borja 2025-02-07 1006
8cc2c415d092e1 Kurt Borja 2025-02-07 1007 if (ret < 0)
8cc2c415d092e1 Kurt Borja 2025-02-07 1008 return ret;
8cc2c415d092e1 Kurt Borja 2025-02-07 1009
8cc2c415d092e1 Kurt Borja 2025-02-07 1010 if ((profile == PLATFORM_PROFILE_PERFORMANCE && !gmode_status) ||
8cc2c415d092e1 Kurt Borja 2025-02-07 1011 (profile != PLATFORM_PROFILE_PERFORMANCE && gmode_status)) {
94b96f340b5e25 Kurt Borja 2025-02-25 1012 ret = awcc_game_shift_status(priv->wdev,
94b96f340b5e25 Kurt Borja 2025-02-25 1013 AWCC_OP_TOGGLE_GAME_SHIFT,
8cc2c415d092e1 Kurt Borja 2025-02-07 1014 &gmode_status);
8cc2c415d092e1 Kurt Borja 2025-02-07 1015
8cc2c415d092e1 Kurt Borja 2025-02-07 1016 if (ret < 0)
8cc2c415d092e1 Kurt Borja 2025-02-07 1017 return ret;
8cc2c415d092e1 Kurt Borja 2025-02-07 1018 }
8cc2c415d092e1 Kurt Borja 2025-02-07 1019 }
8cc2c415d092e1 Kurt Borja 2025-02-07 1020
94b96f340b5e25 Kurt Borja 2025-02-25 1021 return awcc_thermal_control(priv->wdev,
6b90057f955757 Kurt Borja 2025-02-25 1022 priv->supported_profiles[profile]);
8cc2c415d092e1 Kurt Borja 2025-02-07 1023 }
8cc2c415d092e1 Kurt Borja 2025-02-07 1024
94b96f340b5e25 Kurt Borja 2025-02-25 1025 static int awcc_platform_profile_probe(void *drvdata, unsigned long *choices)
8cc2c415d092e1 Kurt Borja 2025-02-07 1026 {
8cc2c415d092e1 Kurt Borja 2025-02-07 1027 enum platform_profile_option profile;
8cc2c415d092e1 Kurt Borja 2025-02-07 1028 struct awcc_priv *priv = drvdata;
94b96f340b5e25 Kurt Borja 2025-02-25 1029 enum awcc_thermal_profile mode;
443362838f8842 Kurt Borja 2025-02-25 1030 u8 id, offset = 0;
8cc2c415d092e1 Kurt Borja 2025-02-07 1031 u32 out_data;
8cc2c415d092e1 Kurt Borja 2025-02-07 1032 int ret;
8cc2c415d092e1 Kurt Borja 2025-02-07 1033
443362838f8842 Kurt Borja 2025-02-25 1034 /*
443362838f8842 Kurt Borja 2025-02-25 1035 * Thermal profile IDs are listed last at offset
443362838f8842 Kurt Borja 2025-02-25 1036 * fan_count + temp_count + unknown_count
443362838f8842 Kurt Borja 2025-02-25 1037 */
443362838f8842 Kurt Borja 2025-02-25 1038 for (unsigned int i = 0; i < ARRAY_SIZE(priv->res_count) - 1; i++)
443362838f8842 Kurt Borja 2025-02-25 1039 offset += priv->res_count[i];
8cc2c415d092e1 Kurt Borja 2025-02-07 1040
443362838f8842 Kurt Borja 2025-02-25 1041 for (unsigned int i = 0; i < priv->profile_count; i++) {
443362838f8842 Kurt Borja 2025-02-25 1042 ret = awcc_op_get_resource_id(priv->wdev, i + offset, &out_data);
8cc2c415d092e1 Kurt Borja 2025-02-07 1043 if (ret == -EIO)
8cc2c415d092e1 Kurt Borja 2025-02-07 1044 return ret;
8cc2c415d092e1 Kurt Borja 2025-02-07 1045
443362838f8842 Kurt Borja 2025-02-25 1046 /*
443362838f8842 Kurt Borja 2025-02-25 1047 * Some devices report an incorrect number of thermal profiles
443362838f8842 Kurt Borja 2025-02-25 1048 * so the resource ID list may end prematurely
443362838f8842 Kurt Borja 2025-02-25 1049 */
8cc2c415d092e1 Kurt Borja 2025-02-07 1050 if (ret == -EBADRQC)
8cc2c415d092e1 Kurt Borja 2025-02-07 1051 break;
8cc2c415d092e1 Kurt Borja 2025-02-07 1052
0cc2eb52fa337a Kurt Borja 2025-02-25 1053 /* Some IDs have a BIT(8) flag that should be ignored */
0cc2eb52fa337a Kurt Borja 2025-02-25 1054 id = FIELD_GET(AWCC_RESOURCE_ID_MASK, out_data);
443362838f8842 Kurt Borja 2025-02-25 1055 if (!is_awcc_thermal_profile_id(id)) {
443362838f8842 Kurt Borja 2025-02-25 1056 dev_dbg(&priv->wdev->dev, "Unmapped thermal profile ID 0x%02x\n", id);
8cc2c415d092e1 Kurt Borja 2025-02-07 1057 continue;
443362838f8842 Kurt Borja 2025-02-25 1058 }
8cc2c415d092e1 Kurt Borja 2025-02-07 1059
0cc2eb52fa337a Kurt Borja 2025-02-25 1060 mode = FIELD_GET(AWCC_THERMAL_MODE_MASK, id);
94b96f340b5e25 Kurt Borja 2025-02-25 1061 profile = awcc_mode_to_platform_profile[mode];
6b90057f955757 Kurt Borja 2025-02-25 1062 priv->supported_profiles[profile] = id;
8cc2c415d092e1 Kurt Borja 2025-02-07 1063
443362838f8842 Kurt Borja 2025-02-25 1064 __set_bit(profile, choices);
8cc2c415d092e1 Kurt Borja 2025-02-07 1065 }
8cc2c415d092e1 Kurt Borja 2025-02-07 1066
8cc2c415d092e1 Kurt Borja 2025-02-07 1067 if (bitmap_empty(choices, PLATFORM_PROFILE_LAST))
8cc2c415d092e1 Kurt Borja 2025-02-07 1068 return -ENODEV;
8cc2c415d092e1 Kurt Borja 2025-02-07 1069
8cc2c415d092e1 Kurt Borja 2025-02-07 1070 if (awcc->gmode) {
6b90057f955757 Kurt Borja 2025-02-25 1071 priv->supported_profiles[PLATFORM_PROFILE_PERFORMANCE] =
1dc40c13e81906 Kurt Borja 2025-02-25 1072 AWCC_SPECIAL_PROFILE_GMODE;
8cc2c415d092e1 Kurt Borja 2025-02-07 1073
443362838f8842 Kurt Borja 2025-02-25 1074 __set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
8cc2c415d092e1 Kurt Borja 2025-02-07 1075 }
8cc2c415d092e1 Kurt Borja 2025-02-07 1076
1dc40c13e81906 Kurt Borja 2025-02-25 1077 /* Every model supports the "custom" profile */
1dc40c13e81906 Kurt Borja 2025-02-25 1078 priv->supported_profiles[PLATFORM_PROFILE_CUSTOM] =
1dc40c13e81906 Kurt Borja 2025-02-25 1079 AWCC_SPECIAL_PROFILE_CUSTOM;
1dc40c13e81906 Kurt Borja 2025-02-25 1080
1dc40c13e81906 Kurt Borja 2025-02-25 1081 __set_bit(PLATFORM_PROFILE_CUSTOM, choices);
1dc40c13e81906 Kurt Borja 2025-02-25 1082
8cc2c415d092e1 Kurt Borja 2025-02-07 1083 return 0;
8cc2c415d092e1 Kurt Borja 2025-02-07 1084 }
8cc2c415d092e1 Kurt Borja 2025-02-07 1085
8cc2c415d092e1 Kurt Borja 2025-02-07 1086 static const struct platform_profile_ops awcc_platform_profile_ops = {
94b96f340b5e25 Kurt Borja 2025-02-25 1087 .probe = awcc_platform_profile_probe,
94b96f340b5e25 Kurt Borja 2025-02-25 1088 .profile_get = awcc_platform_profile_get,
94b96f340b5e25 Kurt Borja 2025-02-25 1089 .profile_set = awcc_platform_profile_set,
8cc2c415d092e1 Kurt Borja 2025-02-07 1090 };
8cc2c415d092e1 Kurt Borja 2025-02-07 1091
8cc2c415d092e1 Kurt Borja 2025-02-07 1092 static int awcc_platform_profile_init(struct wmi_device *wdev)
8cc2c415d092e1 Kurt Borja 2025-02-07 1093 {
8cc2c415d092e1 Kurt Borja 2025-02-07 1094 struct awcc_priv *priv = dev_get_drvdata(&wdev->dev);
8cc2c415d092e1 Kurt Borja 2025-02-07 1095
8cc2c415d092e1 Kurt Borja 2025-02-07 @1096 priv->ppdev = devm_platform_profile_register(&wdev->dev, "alienware-wmi",
8cc2c415d092e1 Kurt Borja 2025-02-07 1097 priv, &awcc_platform_profile_ops);
8cc2c415d092e1 Kurt Borja 2025-02-07 1098
8cc2c415d092e1 Kurt Borja 2025-02-07 1099 return PTR_ERR_OR_ZERO(priv->ppdev);
8cc2c415d092e1 Kurt Borja 2025-02-07 1100 }
8cc2c415d092e1 Kurt Borja 2025-02-07 1101
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki