USB2とUSB3のポートがあります。
[ 1.263404] ## xhci_plat_probe
[ 1.266473] ### comcerto_start_xhci
[ 1.270006] USB3.0 clock selected: internal
[ 1.277388] xhci-hcd xhci-hcd: xHCI Host Controller
[ 1.282446] xhci-hcd xhci-hcd: new USB bus registered, assigned bus number 1
[ 1.289700] xhci-hcd xhci-hcd: irq 54, io mem 0x9f000000
[ 1.295123] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[ 1.301956] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.309213] usb usb1: Product: xHCI Host Controller
[ 1.314107] usb usb1: Manufacturer: Linux 3.2.26 xhci-hcd
[ 1.319532] usb usb1: SerialNumber: xhci-hcd
[ 1.324501] hub 1-0:1.0: USB hub found
[ 1.328304] hub 1-0:1.0: 1 port detected
[ 1.332690] xhci-hcd xhci-hcd: xHCI Host Controller
[ 1.337617] xhci-hcd xhci-hcd: new USB bus registered, assigned bus number 2
[ 1.344819] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[ 1.351648] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.358905] usb usb2: Product: xHCI Host Controller
[ 1.363799] usb usb2: Manufacturer: Linux 3.2.26 xhci-hcd
[ 1.369224] usb usb2: SerialNumber: xhci-hcd
[ 1.374151] hub 2-0:1.0: USB hub found
[ 1.377937] hub 2-0:1.0: 1 port detected
[ 1.382465] [usb_overcurrent_init]: Foxconn USB port (1-1, xhci) over-current detect function init!!
[ 1.391739] dwc_otg: version 2.94a 27-OCT-2011
[ 1.595576] Core Release: 2.81a
[ 1.595587] Setting default values for core params
[ 1.794984] Using Buffer DMA mode
[ 1.798323] Periodic Transfer Interrupt Enhancement - disabled
[ 1.804174] Multiprocessor Interrupt Enhancement - disabled
[ 1.809777] OTG VER PARAM: 0, OTG VER FLAG: 0
[ 1.814191] dwc_otg dwc_otg.0: DWC OTG Controller
[ 1.818973] dwc_otg dwc_otg.0: new USB bus registered, assigned bus number 3
[ 1.826068] dwc_otg dwc_otg.0: irq 53, io mem 0x00000000
[ 1.831482] Init: Port Power? op_state=1
[ 1.835418] Init: Power Port (0)
[ 1.838747] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
[ 1.845560] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.852819] usb usb3: Product: DWC OTG Controller
[ 1.857540] usb usb3: Manufacturer: Linux 3.2.26 dwc_otg
[ 1.862879] usb usb3: SerialNumber: dwc_otg.0
[ 1.867928] hub 3-0:1.0: USB hub found
[ 1.871728] hub 3-0:1.0: 1 port detected
c1kはUSB2だけでEHCIでしたが、c2kはUSB3はXHCIでUSB2はOTGです。
OTGはホストにもデバイスにもなれるインターフェースです。
OTGはMentor Graphicsという会社の作ったものと、Synopsysという会社が作ったものがよく使われています。SynopsysのものはDWC(DesignWare Core) OGTとよばれています。
この二つはまったくレジスタセットが違っていて、互換はありません。
DWCはrev1,2,3がありc2kはrev2のようです。
Synopsysが提供していた、オープンソースのlinuxドライバは最初はdwc_otgというもので、その後dwc2というものになった模様。
NetBSDにはMentor Graphicsに対応したコードがdev/usb/mogt.cとしてあり、DWCに対応したコードはexternal/bsd/dwc2にあります。DWCのコードは本家が作ったlinux用のコードからのポートのようでlinuxのサブシステムが必要になります。
ARMのTIやSUNXIのSOCはMentor Graphicsの仕様で作られていて、MIPSのRalink RT3050やBroadcomやamlogicのARM socなどはDWCで作られています。
10年以上前にrayの書いたFreeBSDのDWC OTGのコードをNetBSDにポートしたものがありました。
Headでコンパイルしようとしたら、いろいろ変わっていて無理でした。
NetBSDのUSBドライバーはattachしたときにusbd_bus_methodsの構造体をセットして、この構造体のopenでそれぞれのusbd_pipe_methods構造体をセットして処理を行ってるようです。
motgではDMAは使わずfifoでデータの送受信を行っています。
c2kでdwc2を使えるようにしました。
ターゲットのXHCIはコネクタが2.0のものなので、2.0でしか使えないようです。