jtag/drivers/cmsis_dap_bulk: use asynchronous libusb transfer
commitfd75e9e542700e40f11d79532d19e311cf437de1
authorTomas Vanek <vanekt@fbl.cz>
Sat, 19 Nov 2022 06:26:37 +0000 (19 07:26 +0100)
committerTomas Vanek <vanekt@fbl.cz>
Wed, 6 Dec 2023 14:00:10 +0000 (6 14:00 +0000)
tree8212a64ef61e5723a4f8efec8e31d1977b3e3117
parent0f70c6c325785517f35bbbb9316801bef7a79d8b
jtag/drivers/cmsis_dap_bulk: use asynchronous libusb transfer

The synchronous libusb_bulk_transfer() always waits
for the transfer to complete. Therefore it does not allow issuing
multiple USB requests as used on HID backend.

Switch to asynchrounous libusb_submit_transfer().

With this patch a good USB FS based CMSIS-DAPv2 adapter
almost doubles the throughput:

 adapter speed: 20000 kHz
 poll off

 > load_image /run/user/1000/ram256k.bin 0x20000000
 262144 bytes written at address 0x20000000
 downloaded 262144 bytes in 0.428576s (597.327 KiB/s)

 > dump_image /dev/null 0x20000000 0x40000
 dumped 262144 bytes in 0.572875s (446.869 KiB/s)

Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Change-Id: Ic6168ea4eca4f6bd1d8ad541a07a8d70427cc509
Reviewed-on: https://review.openocd.org/c/openocd/+/7365
Reviewed-by: zapb <dev@zapb.de>
Tested-by: jenkins
src/jtag/drivers/cmsis_dap.c
src/jtag/drivers/cmsis_dap.h
src/jtag/drivers/cmsis_dap_usb_bulk.c
src/jtag/drivers/cmsis_dap_usb_hid.c