Re: [PATCH 3/3] usb: gadget: f_sourcesink: Addition of SSP endpoint companion for Isochronous transfers

From: kernel test robot
Date: Fri Jul 04 2025 - 23:03:28 EST


Hi Srikanth,

kernel test robot noticed the following build warnings:

[auto build test WARNING on usb/usb-testing]
[also build test WARNING on usb/usb-next usb/usb-linus linus/master v6.16-rc4 next-20250704]
[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/Srikanth-Chary-Chennoju/usb-gadget-zero-support-for-super-speed-plus/20250704-194150
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
patch link: https://lore.kernel.org/r/20250704114013.3396795-4-srikanth.chary-chennoju%40amd.com
patch subject: [PATCH 3/3] usb: gadget: f_sourcesink: Addition of SSP endpoint companion for Isochronous transfers
config: i386-randconfig-063-20250705 (https://download.01.org/0day-ci/archive/20250705/202507051018.998T0Yqk-lkp@xxxxxxxxx/config)
compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250705/202507051018.998T0Yqk-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/202507051018.998T0Yqk-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
drivers/usb/gadget/function/f_sourcesink.c:382:43: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize @@ got unsigned int @@
drivers/usb/gadget/function/f_sourcesink.c:382:43: sparse: expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize
drivers/usb/gadget/function/f_sourcesink.c:382:43: sparse: got unsigned int
drivers/usb/gadget/function/f_sourcesink.c:385:41: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize @@ got unsigned int @@
drivers/usb/gadget/function/f_sourcesink.c:385:41: sparse: expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize
drivers/usb/gadget/function/f_sourcesink.c:385:41: sparse: got unsigned int
drivers/usb/gadget/function/f_sourcesink.c:421:43: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize @@ got unsigned int isoc_maxpacket @@
drivers/usb/gadget/function/f_sourcesink.c:421:43: sparse: expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize
drivers/usb/gadget/function/f_sourcesink.c:421:43: sparse: got unsigned int isoc_maxpacket
drivers/usb/gadget/function/f_sourcesink.c:422:43: sparse: sparse: invalid assignment: |=
drivers/usb/gadget/function/f_sourcesink.c:422:43: sparse: left side has type restricted __le16
drivers/usb/gadget/function/f_sourcesink.c:422:43: sparse: right side has type unsigned int
drivers/usb/gadget/function/f_sourcesink.c:427:41: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize @@ got unsigned int isoc_maxpacket @@
drivers/usb/gadget/function/f_sourcesink.c:427:41: sparse: expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize
drivers/usb/gadget/function/f_sourcesink.c:427:41: sparse: got unsigned int isoc_maxpacket
drivers/usb/gadget/function/f_sourcesink.c:428:41: sparse: sparse: invalid assignment: |=
drivers/usb/gadget/function/f_sourcesink.c:428:41: sparse: left side has type restricted __le16
drivers/usb/gadget/function/f_sourcesink.c:428:41: sparse: right side has type unsigned int
drivers/usb/gadget/function/f_sourcesink.c:443:43: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize @@ got unsigned int isoc_maxpacket @@
drivers/usb/gadget/function/f_sourcesink.c:443:43: sparse: expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize
drivers/usb/gadget/function/f_sourcesink.c:443:43: sparse: got unsigned int isoc_maxpacket
drivers/usb/gadget/function/f_sourcesink.c:447:51: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 static [addressable] [assigned] [toplevel] [usertype] wBytesPerInterval @@ got unsigned int @@
drivers/usb/gadget/function/f_sourcesink.c:447:51: sparse: expected restricted __le16 static [addressable] [assigned] [toplevel] [usertype] wBytesPerInterval
drivers/usb/gadget/function/f_sourcesink.c:447:51: sparse: got unsigned int
drivers/usb/gadget/function/f_sourcesink.c:452:41: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize @@ got unsigned int isoc_maxpacket @@
drivers/usb/gadget/function/f_sourcesink.c:452:41: sparse: expected restricted __le16 static [addressable] [toplevel] [usertype] wMaxPacketSize
drivers/usb/gadget/function/f_sourcesink.c:452:41: sparse: got unsigned int isoc_maxpacket
drivers/usb/gadget/function/f_sourcesink.c:456:49: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 static [addressable] [assigned] [toplevel] [usertype] wBytesPerInterval @@ got unsigned int @@
drivers/usb/gadget/function/f_sourcesink.c:456:49: sparse: expected restricted __le16 static [addressable] [assigned] [toplevel] [usertype] wBytesPerInterval
drivers/usb/gadget/function/f_sourcesink.c:456:49: sparse: got unsigned int
>> drivers/usb/gadget/function/f_sourcesink.c:460:53: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 static [addressable] [toplevel] [usertype] dwBytesPerInterval @@ got unsigned int @@
drivers/usb/gadget/function/f_sourcesink.c:460:53: sparse: expected restricted __le32 static [addressable] [toplevel] [usertype] dwBytesPerInterval
drivers/usb/gadget/function/f_sourcesink.c:460:53: sparse: got unsigned int
drivers/usb/gadget/function/f_sourcesink.c:462:51: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 static [addressable] [toplevel] [usertype] dwBytesPerInterval @@ got unsigned int @@
drivers/usb/gadget/function/f_sourcesink.c:462:51: sparse: expected restricted __le32 static [addressable] [toplevel] [usertype] dwBytesPerInterval
drivers/usb/gadget/function/f_sourcesink.c:462:51: sparse: got unsigned int

vim +460 drivers/usb/gadget/function/f_sourcesink.c

330
331 static int
332 sourcesink_bind(struct usb_configuration *c, struct usb_function *f)
333 {
334 struct usb_composite_dev *cdev = c->cdev;
335 struct f_sourcesink *ss = func_to_ss(f);
336 int id;
337 int ret;
338
339 /* allocate interface ID(s) */
340 id = usb_interface_id(c, f);
341 if (id < 0)
342 return id;
343 source_sink_intf_alt0.bInterfaceNumber = id;
344 source_sink_intf_alt1.bInterfaceNumber = id;
345
346 /* sanity check the bulk module parameters */
347 if (ss->bulk_maxburst > 15)
348 ss->bulk_maxburst = 15;
349
350 /* allocate bulk endpoints */
351 ss->in_ep = usb_ep_autoconfig(cdev->gadget, &fs_source_desc);
352 if (!ss->in_ep) {
353 autoconf_fail:
354 ERROR(cdev, "%s: can't autoconfigure on %s\n",
355 f->name, cdev->gadget->name);
356 return -ENODEV;
357 }
358
359 ss->out_ep = usb_ep_autoconfig(cdev->gadget, &fs_sink_desc);
360 if (!ss->out_ep)
361 goto autoconf_fail;
362
363 /*
364 * Fill in the SS bulk descriptors from the module parameters.
365 * We assume that the user knows what they are doing and won't
366 * give parameters that their UDC doesn't support.
367 */
368 ss_source_comp_desc.bMaxBurst = ss->bulk_maxburst;
369 ss_sink_comp_desc.bMaxBurst = ss->bulk_maxburst;
370
371 /* sanity check the isoc module parameters */
372 if (ss->isoc_interval < 1)
373 ss->isoc_interval = 1;
374 if (ss->isoc_interval > 16)
375 ss->isoc_interval = 16;
376 if (ss->isoc_mult > 2)
377 ss->isoc_mult = 2;
378 if (ss->isoc_maxburst > 15)
379 ss->isoc_maxburst = 15;
380
381 /* fill in the FS isoc descriptors from the module parameters */
382 fs_iso_source_desc.wMaxPacketSize = ss->isoc_maxpacket > 1023 ?
383 1023 : ss->isoc_maxpacket;
384 fs_iso_source_desc.bInterval = ss->isoc_interval;
385 fs_iso_sink_desc.wMaxPacketSize = ss->isoc_maxpacket > 1023 ?
386 1023 : ss->isoc_maxpacket;
387 fs_iso_sink_desc.bInterval = ss->isoc_interval;
388
389 /* allocate iso endpoints */
390 ss->iso_in_ep = usb_ep_autoconfig(cdev->gadget, &fs_iso_source_desc);
391 if (!ss->iso_in_ep)
392 goto no_iso;
393
394 ss->iso_out_ep = usb_ep_autoconfig(cdev->gadget, &fs_iso_sink_desc);
395 if (!ss->iso_out_ep) {
396 usb_ep_autoconfig_release(ss->iso_in_ep);
397 ss->iso_in_ep = NULL;
398 no_iso:
399 /*
400 * We still want to work even if the UDC doesn't have isoc
401 * endpoints, so null out the alt interface that contains
402 * them and continue.
403 */
404 fs_source_sink_descs[FS_ALT_IFC_1_OFFSET] = NULL;
405 hs_source_sink_descs[HS_ALT_IFC_1_OFFSET] = NULL;
406 ss_source_sink_descs[SS_ALT_IFC_1_OFFSET] = NULL;
407 }
408
409 if (ss->isoc_maxpacket > 1024)
410 ss->isoc_maxpacket = 1024;
411
412 /* support high speed hardware */
413 hs_source_desc.bEndpointAddress = fs_source_desc.bEndpointAddress;
414 hs_sink_desc.bEndpointAddress = fs_sink_desc.bEndpointAddress;
415
416 /*
417 * Fill in the HS isoc descriptors from the module parameters.
418 * We assume that the user knows what they are doing and won't
419 * give parameters that their UDC doesn't support.
420 */
421 hs_iso_source_desc.wMaxPacketSize = ss->isoc_maxpacket;
422 hs_iso_source_desc.wMaxPacketSize |= ss->isoc_mult << 11;
423 hs_iso_source_desc.bInterval = ss->isoc_interval;
424 hs_iso_source_desc.bEndpointAddress =
425 fs_iso_source_desc.bEndpointAddress;
426
427 hs_iso_sink_desc.wMaxPacketSize = ss->isoc_maxpacket;
428 hs_iso_sink_desc.wMaxPacketSize |= ss->isoc_mult << 11;
429 hs_iso_sink_desc.bInterval = ss->isoc_interval;
430 hs_iso_sink_desc.bEndpointAddress = fs_iso_sink_desc.bEndpointAddress;
431
432 /* support super speed hardware */
433 ss_source_desc.bEndpointAddress =
434 fs_source_desc.bEndpointAddress;
435 ss_sink_desc.bEndpointAddress =
436 fs_sink_desc.bEndpointAddress;
437
438 /*
439 * Fill in the SS isoc descriptors from the module parameters.
440 * We assume that the user knows what they are doing and won't
441 * give parameters that their UDC doesn't support.
442 */
443 ss_iso_source_desc.wMaxPacketSize = ss->isoc_maxpacket;
444 ss_iso_source_desc.bInterval = ss->isoc_interval;
445 ss_iso_source_comp_desc.bmAttributes = 0x80 | ss->isoc_mult;
446 ss_iso_source_comp_desc.bMaxBurst = ss->isoc_maxburst;
447 ss_iso_source_comp_desc.wBytesPerInterval = ss->isoc_maxpacket *
448 (ss->isoc_mult + 1) * (ss->isoc_maxburst + 1);
449 ss_iso_source_desc.bEndpointAddress =
450 fs_iso_source_desc.bEndpointAddress;
451
452 ss_iso_sink_desc.wMaxPacketSize = ss->isoc_maxpacket;
453 ss_iso_sink_desc.bInterval = ss->isoc_interval;
454 ss_iso_sink_comp_desc.bmAttributes = 0x80 | ss->isoc_mult;
455 ss_iso_sink_comp_desc.bMaxBurst = ss->isoc_maxburst;
456 ss_iso_sink_comp_desc.wBytesPerInterval = ss->isoc_maxpacket *
457 (ss->isoc_mult + 1) * (ss->isoc_maxburst + 1);
458 ss_iso_sink_desc.bEndpointAddress = fs_iso_sink_desc.bEndpointAddress;
459
> 460 ssp_iso_source_comp_desc.dwBytesPerInterval = ss->isoc_maxpacket *
461 (ss->isoc_mult + 1) * (ss->isoc_maxburst + 1) * 2;
462 ssp_iso_sink_comp_desc.dwBytesPerInterval = ss->isoc_maxpacket *
463 (ss->isoc_mult + 1) * (ss->isoc_maxburst + 1) * 2;
464
465 ret = usb_assign_descriptors(f, fs_source_sink_descs,
466 hs_source_sink_descs, ss_source_sink_descs,
467 ss_source_sink_descs);
468 if (ret)
469 return ret;
470
471 DBG(cdev, "%s: IN/%s, OUT/%s, ISO-IN/%s, ISO-OUT/%s\n",
472 f->name, ss->in_ep->name, ss->out_ep->name,
473 ss->iso_in_ep ? ss->iso_in_ep->name : "<none>",
474 ss->iso_out_ep ? ss->iso_out_ep->name : "<none>");
475 return 0;
476 }
477

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki