Hi Marcel, Marcel wrote: >> Could you enable debug output for ether.c and for your UDC driver and >> show the results? > > I enabled a lot of extra debugging messages so this is not very short. > The output attached below is including start of macb but USB device behave > the > same when I don't enable that. > > [...] > > USB network up! > ep3 status = 1040c40 > rx_submit > size 1 = 1570 > size 2 = 2081 > size 3 = 2048 > ep2: queue req 77fec8f0, len 2048 > udc: invalid request > NO REQUEST BUF > Received ETH pack : 00 00 00 00 00 00 00 00 > ERROR: rx submit --> -22 > at ether.c:1289/rx_submit() > ### main_loop entered: bootdelay=3 > > ### main_loop: bootcmd="mtdparts default; nand read 0x71000000 nand0,0; bootm > 0x71000000" > Hit any key to stop autoboot: 0 > Sam9g45>
First, I don't completely understand how do you use the gadget driver. You do not run any commands from u-boot prompt and your bootcmd does not have any network actions. Why your usb gadget driver becomes started? Second, could you add the following debug printout into rx_submit and check that NetRxPackets is really initialized? @@ -1261,6 +1261,8 @@ static int rx_submit(struct eth_dev *dev req->length = size; req->complete = rx_complete; + printf("NetRxPackets[0] = %p !!!\n", NetRxPackets[0]); + retval = usb_ep_queue(dev->out_ep, req, gfp_flags); if (retval) --- Since NetRxPackets is defined as an array of pointers, it needs to be initialized. And NetLoop does this: volatile uchar *NetRxPackets[PKTBUFSRX]; ... int NetLoop(proto_t protocol) { bd_t *bd = gd->bd; ... if (!NetTxPacket) { int i; /* * Setup packet buffers, aligned correctly. */ NetTxPacket = &PktBuf[0] + (PKTALIGN - 1); NetTxPacket -= (ulong)NetTxPacket % PKTALIGN; for (i = 0; i < PKTBUFSRX; i++) { NetRxPackets[i] = NetTxPacket + (i+1)*PKTSIZE_ALIGN; } } ... So I fear that your gadget is started manually. You should not do that! The only thing that you can do with your udc driver during the board initialization is the following: static struct usba_platform_data usba_pdata = { ... }; int board_eth_init(bd_t *bis) { int rc = 0; #if defined(CONFIG_USB_ETHER) && defined(CONFIG_USB_GADGET_ATMEL_USBA) rc = usba_udc_probe(&usba_pdata); if (!rc) rc = usb_eth_initialize(bis); #endif return rc; } If you want to autoboot from tftp you should specify bootcmd environment variable to something like "tftp uImage; bootm". And always use usb gadget only with network commands like tftp, dhcp, ping, etc. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot