This patch set first cleans up the use of rx_active and rx_pending.

I had misunderstood what happened with the SYNC pattern and thought
it would be sent to the Navre and thus set rx_pending. In addition,
I forgot to retrieve this hypothetical byte. That's why things did
actually work. Sometimes, two wrongs do make a right.

After fixing this, an old race condition between the testing of
rx_pending and rx_active became much worse. Sebastien suggested to
solve this by an atomic read that returns both rx_pending and
rx_active. Note that you need to rebuild the SoC bitstream for this
change, and BIOS/Flickernoise and SoC must be updated (or
downgraded) together.

Finally, I added support for EP0 sizes larger than 8 bytes, which
is required for full-speed USB. This allows one more of my USB
devices (another MIDI controller) to enumerate.

- Werner

Werner Almesberger (7):
  softusb: correct misunderstanding of use of rx_pending
  softusb: remove rx_pending vs. rx_active race
  softusb: move (still hard-coded) device address to #define
  softusb: move retrieval of device descriptor to separate function
  softusb: make EP0 size variable and store it in struct port_status
  softusb: end data stage of SETUP also when size limit is reached
  softusb: set EP0 size before trying any larger accesses

 cores/softusb/rtl/softusb_sie.v |    2 +-
 softusb-input/main.c            |  133 +++++++++++++++++++++++++++-----------
 softusb-input/sie.h             |    4 +-
 3 files changed, 98 insertions(+), 41 deletions(-)

_______________________________________________
http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
IRC: #milkymist@Freenode

Reply via email to