tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: xhci patch 20150623



Hi,

On 2015/06/23 16:12, Nick Hudson wrote:
On 06/23/15 07:43, takahiro hayashi wrote:
Hello,

Here is xhci patch for nick-nhusb branch.


nh-xhci-check.diff
    + Add port range check in xhci_rhpsc().
    + Add sanity check if xfer->ux_pipe != NULL in xhci_handle_event().
nh-xhci-prc.diff
    + Remove SET_FEATURE C_PORT_RESET(PRC) -- what would happen?
nh-xhci-methods1.diff
    + Sync return type of xhci_close_pipe() with return type of
      upm_close method.
nh-xhci-abort.diff
    + Add routines for aborting xfer and command.
nh-xhci-comments.diff
    + Update comments.
nh-usb_subr.diff
    + Don't give up doing SET_CONFIG in usbd_set_config_index()
      even if it fails to get BOS descriptor.
      In this case ud_bdesc will be NULL.

Thanks, I'll look them over.


Known problems:

+ HS hub in 3.0 hub under 3.0 port is disconnected and reconnected every
   several minutes repeatedly.
   I don't know what is culprit yet.
+ Detaching hubs or devices might cause panic.
   Especially when the hub that hangs many devices is disconnected.
This is a general problem that has been around forever. I have a plan.

+ KASSERT(sc->sc_command_addr == 0) in xhci_do_command() may fail.
   If two or more threads run xhci_do_command(), all of them except one
   should be blocked at mutex_enter. But one of blocked thread can get
   sc_lock with sc_command_addr != 0 when cv_timedwait() unlocks sc_lock.
+ xhci.c cannot handle cross-64k transfer yet.
   (It works anyway though.)
+ Power management is not implemented.
+ USB keyboard interaction is laggy and annoying.

Any idea why keyboard is laggy?

Currently I'm not sure.

+ ASM1042 and some Intel PCH do not work at all.
   No interrupts.
+ Fresco1100 does not report CSC if the device is connected at boot.
   Only PortResetChange is set in change bits.
   uhub ignores ports without CSC bit, so cannot detect devices.
+ SS part of asm107x hub under hudson2 xhci roothub is not recognized.
   It drops Port Enable Disable (PED) bit after port reset.
   rhpsc: 0x21203<CSC,PIC=0x0,XSPEED=0x4=SS,PP,PLS=0x0=U0,PED,CCS>
   after reset: 0x6202c0<PLC,PRC,CSC,PIC=0x0,XSPEED=0x0=NONE,PP,PLS=0x6=SS_INA>

Not sure what you mean by "hudson2 xhci roothub" here.

Sorry, it does not seem there is such a chipset.
I mean USB part of AMD Athlon APU.

+ axen does not work after interface up -> down -> up.
   When the interface goes down, axen driver closes both of RX and TX pipes.
   That causes transtion slot state of this device to ADDRESSED from CONFIGURED.
+ xhci.c does not snoop SET_CONFIG request and does not transtion the
   slot state to CONFIGURED from ADDRESSED even if SET_CONFIG is issued.
+ Isochronous transfer is not implemented.
+ Stream protocol is not supported.
+ Conexant CX93010 umodem is not recognized (XACT in ADDRESS_DEVICE).
   It can be recognized by inserting 150ms delay before port reset
   while enumeration.
+ usbd_clear_endpoint_stall{,_async}() does not work on xhci to clear stall
   condition because this function does not issue RESET_ENDPOINT command.
   However, xhci.c detects whether xfer is stalled and issues RESET_ENDPOINT
   automatically.
+ Address of root hub is 0 (but it works anyway).
+ Not sure it work on big endian machines.

+ usbdevs(8) does not report correctly if num of ports > 16.
   Size of udi_ports in struct usb_device_info should be
   expanded from 16 to 256. Needs compat treatment.
   (currently usbdevs is not part of nick-nhusb branch.)

I can change this :)

Nick



--
t-hash


Home | Main Index | Thread Index | Old Index