[balbi-usb:testing/next 3/10] drivers/usb/gadget/udc/max3420_udc.c:555:41: sparse: sparse: restricted __le16 degrades to integer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git testing/next
head:   b081f1dc121c0bdeacc45cf02c35d1ee95120680
commit: 2f6f2b1b48da8920dd0f73e27c0c644099a4bf4e [3/10] usb: gadget: add udc driver for max3420
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.1-162-g98276e61-dirty
        git checkout 2f6f2b1b48da8920dd0f73e27c0c644099a4bf4e
        make ARCH=x86_64 allmodconfig
        make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>


sparse warnings: (new ones prefixed by >>)

>> drivers/usb/gadget/udc/max3420_udc.c:555:41: sparse: sparse: restricted __le16 degrades to integer
   drivers/usb/gadget/udc/max3420_udc.c:556:31: sparse: sparse: restricted __le16 degrades to integer
>> drivers/usb/gadget/udc/max3420_udc.c:570:16: sparse: sparse: incorrect type in assignment (different base types)
>> drivers/usb/gadget/udc/max3420_udc.c:570:16: sparse:    expected unsigned short [assigned] [usertype] status
>> drivers/usb/gadget/udc/max3420_udc.c:570:16: sparse:    got restricted __le16 [usertype]
   drivers/usb/gadget/udc/max3420_udc.c:588:31: sparse: sparse: restricted __le16 degrades to integer
   drivers/usb/gadget/udc/max3420_udc.c:602:32: sparse: sparse: restricted __le16 degrades to integer
>> drivers/usb/gadget/udc/max3420_udc.c:631:29: sparse: sparse: cast from restricted __le16
   drivers/usb/gadget/udc/max3420_udc.c:632:29: sparse: sparse: cast from restricted __le16
   drivers/usb/gadget/udc/max3420_udc.c:633:30: sparse: sparse: cast from restricted __le16

vim +555 drivers/usb/gadget/udc/max3420_udc.c

   538	
   539	static void max3420_getstatus(struct max3420_udc *udc)
   540	{
   541		struct max3420_ep *ep;
   542		u16 status = 0;
   543	
   544		switch (udc->setup.bRequestType & USB_RECIP_MASK) {
   545		case USB_RECIP_DEVICE:
   546			/* Get device status */
   547			status = udc->gadget.is_selfpowered << USB_DEVICE_SELF_POWERED;
   548			status |= (udc->remote_wkp << USB_DEVICE_REMOTE_WAKEUP);
   549			break;
   550		case USB_RECIP_INTERFACE:
   551			if (udc->driver->setup(&udc->gadget, &udc->setup) < 0)
   552				goto stall;
   553			break;
   554		case USB_RECIP_ENDPOINT:
 > 555			ep = &udc->ep[udc->setup.wIndex & USB_ENDPOINT_NUMBER_MASK];
   556			if (udc->setup.wIndex & USB_DIR_IN) {
   557				if (!ep->ep_usb.caps.dir_in)
   558					goto stall;
   559			} else {
   560				if (!ep->ep_usb.caps.dir_out)
   561					goto stall;
   562			}
   563			if (ep->halted)
   564				status = 1 << USB_ENDPOINT_HALT;
   565			break;
   566		default:
   567			goto stall;
   568		}
   569	
 > 570		status = cpu_to_le16(status);
   571		spi_wr_buf(udc, MAX3420_REG_EP0FIFO, &status, 2);
   572		spi_wr8_ack(udc, MAX3420_REG_EP0BC, 2, 1);
   573		return;
   574	stall:
   575		dev_err(udc->dev, "Can't respond to getstatus request\n");
   576		spi_wr8(udc, MAX3420_REG_EPSTALLS, STLEP0IN | STLEP0OUT | STLSTAT);
   577	}
   578	
   579	static void max3420_set_clear_feature(struct max3420_udc *udc)
   580	{
   581		struct max3420_ep *ep;
   582		int set = udc->setup.bRequest == USB_REQ_SET_FEATURE;
   583		unsigned long flags;
   584		int id;
   585	
   586		switch (udc->setup.bRequestType) {
   587		case USB_RECIP_DEVICE:
   588			if (udc->setup.wValue != USB_DEVICE_REMOTE_WAKEUP)
   589				break;
   590	
   591			if (udc->setup.bRequest == USB_REQ_SET_FEATURE)
   592				udc->remote_wkp = 1;
   593			else
   594				udc->remote_wkp = 0;
   595	
   596			return spi_ack_ctrl(udc);
   597	
   598		case USB_RECIP_ENDPOINT:
   599			if (udc->setup.wValue != USB_ENDPOINT_HALT)
   600				break;
   601	
   602			id = udc->setup.wIndex & USB_ENDPOINT_NUMBER_MASK;
   603			ep = &udc->ep[id];
   604	
   605			spin_lock_irqsave(&ep->lock, flags);
   606			ep->todo &= ~STALL_EP;
   607			if (set)
   608				ep->todo |= STALL;
   609			else
   610				ep->todo |= UNSTALL;
   611			spin_unlock_irqrestore(&ep->lock, flags);
   612	
   613			spi_max3420_stall(ep);
   614			return;
   615		default:
   616			break;
   617		}
   618	
   619		dev_err(udc->dev, "Can't respond to SET/CLEAR FEATURE\n");
   620		spi_wr8(udc, MAX3420_REG_EPSTALLS, STLEP0IN | STLEP0OUT | STLSTAT);
   621	}
   622	
   623	static void max3420_handle_setup(struct max3420_udc *udc)
   624	{
   625		struct usb_ctrlrequest setup;
   626		u8 addr;
   627	
   628		spi_rd_buf(udc, MAX3420_REG_SUDFIFO, (void *)&setup, 8);
   629	
   630		udc->setup = setup;
 > 631		udc->setup.wValue = cpu_to_le16(setup.wValue);
   632		udc->setup.wIndex = cpu_to_le16(setup.wIndex);
   633		udc->setup.wLength = cpu_to_le16(setup.wLength);
   634	
   635		switch (udc->setup.bRequest) {
   636		case USB_REQ_GET_STATUS:
   637			/* Data+Status phase form udc */
   638			if ((udc->setup.bRequestType &
   639					(USB_DIR_IN | USB_TYPE_MASK)) !=
   640					(USB_DIR_IN | USB_TYPE_STANDARD)) {
   641				break;
   642			}
   643			return max3420_getstatus(udc);
   644		case USB_REQ_SET_ADDRESS:
   645			/* Status phase from udc */
   646			if (udc->setup.bRequestType != (USB_DIR_OUT |
   647					USB_TYPE_STANDARD | USB_RECIP_DEVICE)) {
   648				break;
   649			}
   650			addr = spi_rd8_ack(udc, MAX3420_REG_FNADDR, 1);
   651			dev_dbg(udc->dev, "Assigned Address=%d\n", udc->setup.wValue);
   652			return;
   653		case USB_REQ_CLEAR_FEATURE:
   654		case USB_REQ_SET_FEATURE:
   655			/* Requests with no data phase, status phase from udc */
   656			if ((udc->setup.bRequestType & USB_TYPE_MASK)
   657					!= USB_TYPE_STANDARD)
   658				break;
   659			return max3420_set_clear_feature(udc);
   660		default:
   661			break;
   662		}
   663	
   664		if (udc->driver->setup(&udc->gadget, &setup) < 0) {
   665			/* Stall EP0 */
   666			spi_wr8(udc, MAX3420_REG_EPSTALLS,
   667				STLEP0IN | STLEP0OUT | STLSTAT);
   668		}
   669	}
   670	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux