The gadget driver set the bInterfaceProtocol value to 1 in the DFU interface descriptor. However this value is used to indicate that the gadget is in run-time mode and not ready for DFU. When ready for DFU operation the bInterfaceProtocol value must be set to 2 (DFU mode). >From the DFU 1.1 specification, the value of bInterfaceProtocol select: - 1: Runtime protocol (see Table 4.1) - 2: DFU mode protocol (see Table 4.4) This patch change the bInterfaceProtocol value from 1 to 2. As this DFU gadget driver is always ready for DFU operation (DFU mode) and doesn't require a USB reset. Signed-off-by: Jules Maselbas <jmaselbas@xxxxxxxxx> --- I was getting errors when trying to update a partition using dfu-util when there was more than one partition available. (the error was "More than one DFU capable USB device found!") This is the output of dfu-util when listing partitions. The first is before this patch and second one is after. Notice the difference between the two: in the first you can read 'Found Runtime' where in the other 'Found DFU'. The bInterfaceProtocol was set to 1 (before): $ dfu-util -l Found Runtime: [1d6b:0104] [...] alt=0, name="/dev/mtd0.p0" Found Runtime: [1d6b:0104] [...] alt=1, name="/dev/mtd0.p1" ... When bInterfaceProtocol is set to 2 (after patch): $ dfu-util -l Found DFU: [1d6b:0104] [...] alt=0, name="/dev/mtd0.p0" Found DFU: [1d6b:0104] [...] alt=1, name="/dev/mtd0.p1" ... --- drivers/usb/gadget/dfu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/gadget/dfu.c b/drivers/usb/gadget/dfu.c index 225c6e3c6..9117a5b06 100644 --- a/drivers/usb/gadget/dfu.c +++ b/drivers/usb/gadget/dfu.c @@ -239,7 +239,7 @@ dfu_bind(struct usb_configuration *c, struct usb_function *f) desc[i].bNumEndpoints = 0; desc[i].bInterfaceClass = 0xfe; desc[i].bInterfaceSubClass = 1; - desc[i].bInterfaceProtocol = 1; + desc[i].bInterfaceProtocol = 2; desc[i].bAlternateSetting = i; desc[i].iInterface = us[i + 1].id; header[i] = (struct usb_descriptor_header *)&desc[i]; -- 2.21.0.196.g041f5ea _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox