On Wed, 2018-01-24 at 11:30 +0800, kbuild test robot wrote: > Hi Benjamin, > > I love your patch! Perhaps something to improve: > > [auto build test WARNING on balbi-usb/next] > [also build test WARNING on v4.15-rc9 next-20180119] > [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] This seems to be bogosity in m32r more than problems with the driver... > url: https://github.com/0day-ci/linux/commits/Benjamin-Herrenschmidt/usb-gadget-Add-an-EP-dispose-callback-for-EP-lifetime-tracking/20180124-065635 > base: https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git next > config: m32r-allyesconfig (attached as .config) > compiler: m32r-linux-gcc (GCC) 7.2.0 > reproduce: > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross > chmod +x ~/bin/make.cross > # save the attached .config to linux build tree > make.cross ARCH=m32r > > All warnings (new ones prefixed by >>): > > In file included from arch/m32r/include/uapi/asm/byteorder.h:8:0, > from arch/m32r/include/asm/bitops.h:22, > from include/linux/bitops.h:38, > from include/linux/kernel.h:11, > from drivers/usb/gadget/udc/aspeed-vhub/core.c:14: > include/linux/byteorder/big_endian.h:8:2: warning: #warning inconsistent configuration, needs CONFIG_CPU_BIG_ENDIAN [-Wcpp] > #warning inconsistent configuration, needs CONFIG_CPU_BIG_ENDIAN > ^~~~~~~ Not sure what that one is, looks like some toolchain or arch problem... > In file included from include/linux/printk.h:329:0, > from include/linux/kernel.h:14, > from drivers/usb/gadget/udc/aspeed-vhub/core.c:14: > drivers/usb/gadget/udc/aspeed-vhub/core.c: In function 'ast_vhub_irq': > > > drivers/usb/gadget/udc/aspeed-vhub/core.c:127:16: warning: format '%x' expects argument of type 'unsigned int', but argument 5 has type 'long unsigned int' [-Wformat=] > > UDCVDBG(vhub, "irq status=%08x, ep_acks=%08x ep_nacks=%08x\n", This is rather bogus too. m32r's readl() is returning unsigned long, it should be unsigned int or u32. > ^ > include/linux/dynamic_debug.h:135:39: note: in definition of macro 'dynamic_dev_dbg' > __dynamic_dev_dbg(&descriptor, dev, fmt, \ > ^~~ > drivers/usb/gadget/udc/aspeed-vhub/vhub.h:405:28: note: in expansion of macro 'dev_dbg' > #define UDCVDBG(u, fmt...) dev_dbg(&(u)->pdev->dev, fmt) > ^~~~~~~ > drivers/usb/gadget/udc/aspeed-vhub/core.c:127:2: note: in expansion of macro 'UDCVDBG' > UDCVDBG(vhub, "irq status=%08x, ep_acks=%08x ep_nacks=%08x\n", > ^~~~~~~ > drivers/usb/gadget/udc/aspeed-vhub/core.c:127:16: warning: format '%x' expects argument of type 'unsigned int', but argument 6 has type 'long unsigned int' [-Wformat=] > UDCVDBG(vhub, "irq status=%08x, ep_acks=%08x ep_nacks=%08x\n", > ^ > include/linux/dynamic_debug.h:135:39: note: in definition of macro 'dynamic_dev_dbg' > __dynamic_dev_dbg(&descriptor, dev, fmt, \ > ^~~ > drivers/usb/gadget/udc/aspeed-vhub/vhub.h:405:28: note: in expansion of macro 'dev_dbg' > #define UDCVDBG(u, fmt...) dev_dbg(&(u)->pdev->dev, fmt) > ^~~~~~~ > drivers/usb/gadget/udc/aspeed-vhub/core.c:127:2: note: in expansion of macro 'UDCVDBG' > UDCVDBG(vhub, "irq status=%08x, ep_acks=%08x ep_nacks=%08x\n", > ^~~~~~~ > -- > In file included from arch/m32r/include/uapi/asm/byteorder.h:8:0, > from arch/m32r/include/asm/bitops.h:22, > from include/linux/bitops.h:38, > from include/linux/kernel.h:11, > from drivers/usb/gadget/udc/aspeed-vhub/epn.c:14: > include/linux/byteorder/big_endian.h:8:2: warning: #warning inconsistent configuration, needs CONFIG_CPU_BIG_ENDIAN [-Wcpp] > #warning inconsistent configuration, needs CONFIG_CPU_BIG_ENDIAN > ^~~~~~~ > In file included from include/linux/printk.h:329:0, > from include/linux/kernel.h:14, > from drivers/usb/gadget/udc/aspeed-vhub/epn.c:14: > drivers/usb/gadget/udc/aspeed-vhub/epn.c: In function 'ast_vhub_epn_kick_desc': > > > drivers/usb/gadget/udc/aspeed-vhub/vhub.h:409:3: warning: format '%x' expects argument of type 'unsigned int', but argument 7 has type 'long unsigned int' [-Wformat=] > > "%s:EP%d " fmt, \ > ^ > include/linux/dynamic_debug.h:135:39: note: in definition of macro 'dynamic_dev_dbg' > __dynamic_dev_dbg(&descriptor, dev, fmt, \ > ^~~ > drivers/usb/gadget/udc/aspeed-vhub/vhub.h:408:2: note: in expansion of macro 'dev_dbg' > dev_dbg(&(ep)->vhub->pdev->dev, \ > ^~~~~~~ > drivers/usb/gadget/udc/aspeed-vhub/epn.c:233:2: note: in expansion of macro 'EPVDBG' > EPVDBG(ep, "HW kicked, d_next=%d dstat=%08x\n", > ^~~~~~ > drivers/usb/gadget/udc/aspeed-vhub/epn.c:233:44: note: format string is defined here > EPVDBG(ep, "HW kicked, d_next=%d dstat=%08x\n", > ~~~^ > %08lx > > vim +127 drivers/usb/gadget/udc/aspeed-vhub/core.c > > > 14 #include <linux/kernel.h> > 15 #include <linux/module.h> > 16 #include <linux/platform_device.h> > 17 #include <linux/delay.h> > 18 #include <linux/ioport.h> > 19 #include <linux/slab.h> > 20 #include <linux/errno.h> > 21 #include <linux/list.h> > 22 #include <linux/interrupt.h> > 23 #include <linux/proc_fs.h> > 24 #include <linux/prefetch.h> > 25 #include <linux/clk.h> > 26 #include <linux/usb/gadget.h> > 27 #include <linux/of.h> > 28 #include <linux/of_gpio.h> > 29 #include <linux/regmap.h> > 30 #include <linux/dma-mapping.h> > 31 > 32 #include "vhub.h" > 33 > 34 static bool force_usb1 = false; > 35 static bool no_dma_desc = false; > 36 > 37 module_param_named(force_usb1, force_usb1, bool, 0644); > 38 MODULE_PARM_DESC(force_usb1, "Set to true to force to USB1 speed"); > 39 module_param_named(no_dma_desc, no_dma_desc, bool, 0644); > 40 MODULE_PARM_DESC(no_dma_desc, "Set to true to disable use of DMA descriptors"); > 41 > 42 void ast_vhub_done(struct ast_vhub_ep *ep, struct ast_vhub_req *req, > 43 int status) > 44 { > 45 bool internal = req->internal; > 46 > 47 EPVDBG(ep, "completing request @%p, status %d\n", req, status); > 48 > 49 list_del_init(&req->queue); > 50 > 51 if (req->req.status == -EINPROGRESS) > 52 req->req.status = status; > 53 > 54 if (req->req.dma) { > 55 if (!WARN_ON(!ep->dev)) > 56 usb_gadget_unmap_request(&ep->dev->gadget, > 57 &req->req, ep->epn.is_in); > 58 req->req.dma = 0; > 59 } > 60 > 61 /* > 62 * If this isn't an internal EP0 request, call the core > 63 * to call the gadget completion. > 64 */ > 65 if (!internal) { > 66 spin_unlock(&ep->vhub->lock); > 67 usb_gadget_giveback_request(&ep->ep, &req->req); > 68 spin_lock(&ep->vhub->lock); > 69 } > 70 } > 71 > 72 void ast_vhub_nuke(struct ast_vhub_ep *ep, int status) > 73 { > 74 struct ast_vhub_req *req; > 75 > 76 EPDBG(ep, "Nuking\n"); > 77 > 78 /* terminate any request in the queue */ > 79 if (list_empty(&ep->queue)) > 80 return; > 81 > 82 /* Beware, lock will be dropped & req-acquired by done() */ > 83 while (!list_empty(&ep->queue)) { > 84 req = list_first_entry(&ep->queue, struct ast_vhub_req, queue); > 85 ast_vhub_done(ep, req, status); > 86 } > 87 } > 88 > 89 struct usb_request *ast_vhub_alloc_request(struct usb_ep *u_ep, > 90 gfp_t gfp_flags) > 91 { > 92 struct ast_vhub_req *req; > 93 > 94 req = kzalloc(sizeof(*req), gfp_flags); > 95 if (!req) > 96 return NULL; > 97 INIT_LIST_HEAD(&req->queue); > 98 return &req->req; > 99 } > 100 > 101 void ast_vhub_free_request(struct usb_ep *u_ep, struct usb_request *u_req) > 102 { > 103 struct ast_vhub_req *req = to_ast_req(u_req); > 104 > 105 kfree(req); > 106 } > 107 > 108 static irqreturn_t ast_vhub_irq (int irq, void *data) > 109 { > 110 struct ast_vhub *vhub = data; > 111 irqreturn_t iret = IRQ_NONE; > 112 u32 istat; > 113 > 114 /* Stale interrupt while tearing down */ > 115 if (!vhub->ep0_bufs) > 116 return IRQ_NONE; > 117 > 118 spin_lock(&vhub->lock); > 119 > 120 /* Read and ACK interrupts */ > 121 istat = readl(vhub->regs + AST_VHUB_ISR); > 122 if (!istat) > 123 goto bail; > 124 writel(istat, vhub->regs + AST_VHUB_ISR); > 125 iret = IRQ_HANDLED; > 126 > > 127 UDCVDBG(vhub, "irq status=%08x, ep_acks=%08x ep_nacks=%08x\n", > 128 istat, > 129 readl(vhub->regs + AST_VHUB_EP_ACK_ISR), > 130 readl(vhub->regs + AST_VHUB_EP_NACK_ISR)); > 131 > 132 /* Handle generic EPs first */ > 133 if (istat & VHUB_IRQ_EP_POOL_ACK_STALL) { > 134 u32 i, ep_acks = readl(vhub->regs + AST_VHUB_EP_ACK_ISR); > 135 writel(ep_acks, vhub->regs + AST_VHUB_EP_ACK_ISR); > 136 > 137 /* Check if we have a useful ffs on arm ... */ > 138 for (i = 0; ep_acks && i < AST_VHUB_NUM_GEN_EPs; i++) { > 139 u32 mask = 1 << i; > 140 if (ep_acks & mask) { > 141 ast_vhub_epn_ack_irq(&vhub->epns[i]); > 142 ep_acks &= ~mask; > 143 } > 144 } > 145 } > 146 > 147 /* Handle device interrupts */ > 148 if (istat & (VHUB_IRQ_DEVICE1 | > 149 VHUB_IRQ_DEVICE2 | > 150 VHUB_IRQ_DEVICE3 | > 151 VHUB_IRQ_DEVICE4 | > 152 VHUB_IRQ_DEVICE5)) { > 153 if (istat & VHUB_IRQ_DEVICE1) > 154 ast_vhub_dev_irq(&vhub->ports[0].dev); > 155 if (istat & VHUB_IRQ_DEVICE2) > 156 ast_vhub_dev_irq(&vhub->ports[1].dev); > 157 if (istat & VHUB_IRQ_DEVICE3) > 158 ast_vhub_dev_irq(&vhub->ports[2].dev); > 159 if (istat & VHUB_IRQ_DEVICE4) > 160 ast_vhub_dev_irq(&vhub->ports[3].dev); > 161 if (istat & VHUB_IRQ_DEVICE5) > 162 ast_vhub_dev_irq(&vhub->ports[4].dev); > 163 } > 164 > 165 /* Handle top-level vHub EP0 interrupts */ > 166 if (istat & (VHUB_IRQ_HUB_EP0_OUT_ACK_STALL | > 167 VHUB_IRQ_HUB_EP0_IN_ACK_STALL | > 168 VHUB_IRQ_HUB_EP0_SETUP)) { > 169 if (istat & VHUB_IRQ_HUB_EP0_IN_ACK_STALL) > 170 ast_vhub_ep0_handle_ack(&vhub->ep0, true); > 171 if (istat & VHUB_IRQ_HUB_EP0_OUT_ACK_STALL) > 172 ast_vhub_ep0_handle_ack(&vhub->ep0, false); > 173 if (istat & VHUB_IRQ_HUB_EP0_SETUP) > 174 ast_vhub_ep0_handle_setup(&vhub->ep0); > 175 } > 176 > 177 /* Various top level bus events */ > 178 if (istat & (VHUB_IRQ_BUS_RESUME | > 179 VHUB_IRQ_BUS_SUSPEND | > 180 VHUB_IRQ_BUS_RESET)) { > 181 if (istat & VHUB_IRQ_BUS_RESUME) > 182 ast_vhub_hub_resume(vhub); > 183 if (istat & VHUB_IRQ_BUS_SUSPEND) > 184 ast_vhub_hub_suspend(vhub); > 185 if (istat & VHUB_IRQ_BUS_RESET) > 186 ast_vhub_hub_reset(vhub); > 187 } > 188 > 189 bail: > 190 spin_unlock(&vhub->lock); > 191 return iret; > 192 } > 193 > > --- > 0-DAY kernel test infrastructure Open Source Technology Center > https://lists.01.org/pipermail/kbuild-all Intel Corporation -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html