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