
Hi Stefano,
2010/8/5 Stefano Babic sbabic@denx.de:
Hi Remy,
I would like to add CDC support to a davinci (DM365 Soc) board using the musb controller. As the actual driver (musb_udc) does have gadget support, I decided (even if I get some advises that it is a harder way)
The USB gadget layer used for CDC is derived from Linux 2.6.27. It was ported such that the gadget drivers from Linux could be used with little modifications.
The usb_eth_init does not complete, and a ping request ends with "The remote end did not respond in time". However, a CDC gadget is recognized on both sides (target and PC). On the PC, I get the usb0 interface, and the cdc driver is loaded:
I get a lot of "respond with data transfer before status phase", but as I see in code, it seems to be quite a normal case, and the setup is sent again (is this true ?).
Indeed, this seems to be some debug logging that can be removed...
In musb_gadget_queue() entry point (usb_ep_queue from ethernet gadget) there is a check for the parameters, and the ep should be the same as the ep in the request. This is not a case, and an error is reported (see later in error log).
We have tested it with the Atmel at91sam9261 core, and I have never used it with any other hardware. It is possible that you run into problems here that where not visible on the Atmel core...
I report the whole log, enabling debug output on both musb driver and ether.c. Do you have some hints to give me to go further ?
This is my log when I do a (successful) ping to the host when I run on a Atmel eval-kit. Maybe you can use it as reference? Maybe it helps...
at91sam9261-ek> ping 10.0.0.1 Holding VBUS down: 4...3...2...1...Go! end bus reset end bus reset SETUP 80.06 v0100 i0000 l0040 eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 end bus reset nuke ep0 setup complete --> -108, 16/18 SETUP 00.05 v0025 i0000 l0000 address 37 SETUP 80.06 v0100 i0000 l0012 eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/2 (done) ep0 out/status ACK SETUP 80.06 v0600 i0000 l000a eth_setup:... req 80.06 protocol STALL; stat -95 ep0 stalled SETUP 80.06 v0600 i0000 l000a eth_setup:... req 80.06 protocol STALL; stat -95 ep0 stalled SETUP 80.06 v0600 i0000 l000a eth_setup:... req 80.06 protocol STALL; stat -95 ep0 stalled SETUP 80.06 v0200 i0000 l0009 eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/8 ep0 20aa35e8 in/1 (done) ep0 out/status ACK SETUP 80.06 v0200 i0000 l0050 eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 (done) ep0 out/status ACK SETUP 80.06 v0300 i0000 l00ff eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/4 (done) ep0 out/status ACK SETUP 80.06 v0302 i0409 l00ff eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/0 (done) ep0 out/status ACK SETUP 80.06 v0301 i0409 l00ff eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/2 (done) ep0 out/status ACK SETUP 00.09 v0001 i0000 l0000 wait for config eth_setup:... udc: alloc_req: request[2] udc: alloc_req: request[3] full speed config #1: 2 mA, Ethernet Gadget, using CDC Ethernet respond with data transfer before status phase toggle config ep0 in/status SETUP 80.06 v0307 i0409 l00ff eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/2 (done) ep0 out/status ACK SETUP 80.06 v0305 i0409 l00ff eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/6 (done) ep0 out/status ACK SETUP 01.0b v0001 i0001 l0000 eth_setup:... ep4 20aa361c in/8 (done) send SPEED_CHANGE --> 0 respond with data transfer before status phase ep0 in/status SETUP 80.06 v0303 i0409 l00ff eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/2 (done) ep0 out/status ACK SETUP 80.06 v0304 i0409 l00ff eth_setup:... respond with data transfer before status phase ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/8 ep0 20aa35e8 in/4 (done) ep0 out/status ACK ep4 20aa361c in/16 (done) event 2a --> 0 USB network up! rx_submit Using usb0 device usb_eth_send:... ep1 20aa3650 in/42 (done) tx_complete, status: ok usb_eth_send: packet queued ep2 20aa3684 out/42 (done) rx_complete rx status 0 usb_eth_recv: packet received usb_eth_send:... ep1 20aa3650 in/42 (done) tx_complete, status: ok usb_eth_send: packet queued rx_submit ep2 20aa3684 out/54 (done) rx_complete rx status 0 usb_eth_recv: packet received rx_submit ep2 20aa3684 out/42 (done) rx_complete rx status 0 usb_eth_recv: packet received rx_submit nuke ep2 rx_complete rx status -108 host 10.0.0.1 is alive