Hi Timur, kernel test robot noticed the following build warnings: [auto build test WARNING on drm-intel/for-linux-next-fixes] [also build test WARNING on drm-tip/drm-tip linus/master v6.8-rc4 next-20240213] [cannot apply to drm-misc/drm-misc-next drm/drm-next drm-exynos/exynos-drm-next drm-intel/for-linux-next] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Timur-Tabi/nouveau-add-command-line-GSP-RM-registry-support/20240213-051852 base: git://anongit.freedesktop.org/drm-intel for-linux-next-fixes patch link: https://lore.kernel.org/r/20240212211548.1094496-2-ttabi%40nvidia.com patch subject: [PATCH 1/2] [v3] nouveau: add command-line GSP-RM registry support config: parisc-defconfig (https://download.01.org/0day-ci/archive/20240214/202402141030.X3uj4YDf-lkp@xxxxxxxxx/config) compiler: hppa-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240214/202402141030.X3uj4YDf-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/202402141030.X3uj4YDf-lkp@xxxxxxxxx/ All warnings (new ones prefixed by >>): drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c: In function 'r535_gsp_rpc_set_registry': >> drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:1317:24: warning: variable 'length' set but not used [-Wunused-but-set-variable] 1317 | size_t length; | ^~~~~~ -- >> drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:1246: warning: cannot understand function prototype: 'const struct nv_gsp_registry_entries r535_registry_entries[] = ' drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:1673: warning: Function parameter or struct member 'priv' not described in 'r535_gsp_msg_run_cpu_sequencer' drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:1673: warning: Function parameter or struct member 'fn' not described in 'r535_gsp_msg_run_cpu_sequencer' drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:1673: warning: Function parameter or struct member 'repv' not described in 'r535_gsp_msg_run_cpu_sequencer' drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:1673: warning: Function parameter or struct member 'repc' not described in 'r535_gsp_msg_run_cpu_sequencer' drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:2046: warning: Function parameter or struct member 'gsp' not described in 'r535_gsp_libos_init' drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:2186: warning: Function parameter or struct member 'gsp' not described in 'nvkm_gsp_radix3_sg' drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:2186: warning: Function parameter or struct member 'sgt' not described in 'nvkm_gsp_radix3_sg' drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:2186: warning: Function parameter or struct member 'size' not described in 'nvkm_gsp_radix3_sg' drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:2186: warning: Function parameter or struct member 'rx3' not described in 'nvkm_gsp_radix3_sg' vim +/length +1317 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c 1235 1236 /** 1237 * r535_registry_entries - required registry entries for GSP-RM 1238 * 1239 * This array lists registry entries that are required for GSP-RM to 1240 * function correctly. 1241 * 1242 * RMSecBusResetEnable - enables PCI secondary bus reset 1243 * RMForcePcieConfigSave - forces GSP-RM to preserve PCI configuration 1244 * registers on any PCI reset. 1245 */ > 1246 static const struct nv_gsp_registry_entries r535_registry_entries[] = { 1247 { "RMSecBusResetEnable", 1 }, 1248 { "RMForcePcieConfigSave", 1 }, 1249 }; 1250 #define NV_GSP_REG_NUM_ENTRIES ARRAY_SIZE(r535_registry_entries) 1251 1252 /** 1253 * strip - strips all characters in 'reject' from 's' 1254 * @s: string to strip 1255 * @reject: string of characters to remove 1256 * 1257 * 's' is modified. 1258 * 1259 * Returns the length of the new string. 1260 */ 1261 static size_t strip(char *s, const char *reject) 1262 { 1263 char *p = s, *p2 = s; 1264 size_t length = 0; 1265 char c; 1266 1267 do { 1268 while ((c = *p2) && strchr(reject, c)) 1269 p2++; 1270 1271 *p++ = c = *p2++; 1272 length++; 1273 } while (c); 1274 1275 return length; 1276 } 1277 1278 /** 1279 * r535_gsp_rpc_set_registry - build registry RPC and call GSP-RM 1280 * @gsp: gsp pointer 1281 * 1282 * The GSP-RM registry is a set of key/value pairs that configure some aspects 1283 * of GSP-RM. The keys are strings, and the values are 32-bit integers. 1284 * 1285 * The registry is built from a combination of a static hard-coded list (see 1286 * above) and entries passed on the driver's command line. 1287 */ 1288 static int 1289 r535_gsp_rpc_set_registry(struct nvkm_gsp *gsp) 1290 { 1291 PACKED_REGISTRY_TABLE *rpc; 1292 unsigned int i; 1293 int ret; 1294 1295 INIT_LIST_HEAD(&gsp->registry_list); 1296 gsp->registry_rpc_size = sizeof(PACKED_REGISTRY_TABLE); 1297 1298 /* Add the required registry entries first */ 1299 for (i = 0; i < NV_GSP_REG_NUM_ENTRIES; i++) { 1300 ret = add_registry_num(gsp, r535_registry_entries[i].name, 1301 r535_registry_entries[i].value); 1302 if (ret) { 1303 clean_registry(gsp); 1304 return ret; 1305 } 1306 } 1307 1308 /* 1309 * The NVreg_RegistryDwords parameter is a string of key=value 1310 * pairs separated by semicolons. We need to extract and trim each 1311 * substring, and then parse the substring to extract the key and 1312 * value. 1313 */ 1314 if (NVreg_RegistryDwords) { 1315 char *p = kstrdup(NVreg_RegistryDwords, GFP_KERNEL); 1316 char *start, *next = p, *equal; > 1317 size_t length; 1318 1319 /* Remove any whitespace from the parameter string */ 1320 length = strip(p, " \t\n"); 1321 1322 while ((start = strsep(&next, ";"))) { 1323 long value; 1324 1325 equal = strchr(start, '='); 1326 if (!equal || (equal == start) || !isdigit(equal[1])) { 1327 nvkm_error(&gsp->subdev, 1328 "ignoring invalid registry string '%s'\n", start); 1329 continue; 1330 } 1331 1332 ret = kstrtol(equal + 1, 0, &value); 1333 if (ret) { 1334 nvkm_error(&gsp->subdev, 1335 "ignoring invalid registry value in '%s'\n", start); 1336 continue; 1337 } 1338 1339 /* Truncate the key=value string to just key */ 1340 *equal = 0; 1341 1342 ret = add_registry_num(gsp, start, value); 1343 if (ret) { 1344 nvkm_error(&gsp->subdev, 1345 "ignoring invalid registry key/value '%s=%lu'\n", 1346 start, value); 1347 continue; 1348 } 1349 } 1350 1351 kfree(p); 1352 } 1353 1354 rpc = nvkm_gsp_rpc_get(gsp, NV_VGPU_MSG_FUNCTION_SET_REGISTRY, gsp->registry_rpc_size); 1355 if (IS_ERR(rpc)) { 1356 clean_registry(gsp); 1357 return PTR_ERR(rpc); 1358 } 1359 1360 build_registry(gsp, rpc); 1361 1362 return nvkm_gsp_rpc_wr(gsp, rpc, false); 1363 } 1364 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki