On 04/06/13 22:50, Oleksandr Tymoshenko wrote:

This is first iteration of Host Mode support for Mentor Graphics
OTG USB controller. I tested it by building kernel with USB memory
stick mounted as /usr/obj, resulting kernel was bootable and worked fine.
I reused some ideas (mostly for channel-management) from
DWT OTG driver.

Some pieces are still missing:
- Support for SPLIT transactions, I don not have high speed hub
     right now to test it, but implementing it should be really
- Isochronous transfers. I do not have hardware to test this. Does
     anybody have any suggestion about simple use case?
- Control Data OUT transaction
- Wrapper for atmel HW has not ben synced with new core logic requirements

Please review and test. I tested it only with gcc-built kernel/world.
Now when
first iteration is finished I'm going to update all my boards to new
world order
(clang/EABI) and re-test this stuff.



Looks like you've got the grasp of the USB controller stuff :-)

Some comments:

1) Use DPRINTFN(-1, ...) instead of printf() for all printf() that are not part of boot dmesg.

+                               break;
+                       default:
+                               td->transfer_type = 0;
+                               printf("Invalid USB speed: %d\n", speed);
+                               break;
+               }

2) You should implement if HOST mode, support for SUSPEND and RESUME. See EHCI driver. Basically what you need is:

a) USB transfers are stopped/paused. I know there is a hack you need if the host transfer cancel hangs, and that is to write a dummy device address and wait for the USB transfer to error out after 250 us max.

b) switch on USB suspend signalling.

At resume:

c) do resume signalling, similar to EHCI/UHCI I think.

d) switch on channel tokens.

        case UHF_PORT_SUSPEND:
+               if (sc->sc_mode == MUSB2_HOST_MODE)
+                       printf("TODO: Set UHF_PORT_SUSPEND\n");
+               break;

3) Make sure that channels are not generating tokens if they are aborted / cancelled / timedout. This can not be verified using a USB mass storage device. Verify this by connecting a USB serial adapter. Try to open/close /dev/cuaU0. Make sure it does not loose any bytes and that channel cancel does not hang forever.

freebsd-usb@freebsd.org mailing list
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"

Reply via email to