Hi Vitaly, Thanks so much for your reply. I got a little further now.
> 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? A good question. I enable it in board_eth_init as you mention below. > 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) > > --- It printed : NetRxPackets[0] = (null) !!! > Since NetRxPackets is defined as an array of pointers, it needs to be > initialized. And NetLoop does this: So far I figured as well, just not why this didn't happen. > So I fear that your gadget is started manually. You should not do that! I fear you where right about that. I don't know for sure what triggered it but after I disabled CONFIG_MACB in my config things looked a whole lot different ! > 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; > } This is what I did. > 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. I'm quite sure the initialisation was the issue, causing the buffers to be fine. I still wonder how it exactly works, but since it's alive now, I can continue to find out what really happens. I do wonder about whether I can use both normal ethernet and USB-gadget (cdc) at the same time, other whether it's restricted to using only one. Thanks so much for your reply. I'm sure I could have stared at this for another couple of days and be looking in the wrong places over and over again. Best regards, Marcel _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot