From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pantelis Antoniou Date: Mon, 17 Dec 2012 16:38:03 +0200 Subject: [U-Boot] [PULL] u-boot-usb/master In-Reply-To: <20121217120035.3708d90c@amdc308.digital.local> References: <201212151737.04038.marex@denx.de> <20121217120035.3708d90c@amdc308.digital.local> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Lukasz, Sorry for the slight delay, setting up the usb capture took a bit longer. So we have two captures; one named bad (which is the tip of our internal tree with the commit reverted. cee8b859fdb9edc68c67624b2fa1c97a65d121e7 "dfu: Send correct DFU response from composite_setup" With the commit reverted we get this: > panto at sles11esa:~/ti/stuff/dfu-util$ sudo ./src/dfu-util -v -D ~/test.img -a rootfs > dfu-util 0.7 > > Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. > Copyright 2010-2012 Tormod Volden and Stefan Schmidt > This program is Free Software and has ABSOLUTELY NO WARRANTY > Please report bugs to dfu-util at lists.gnumonks.org > > Opening DFU capable USB device... ID 0403:bd00 > Did not find cached descriptor > WARNING: Can not find cached DFU functional descriptor > Warning: Assuming DFU version 1.0 > Run-time device DFU version 0100 > Claiming USB DFU Runtime Interface... > Determining device status: state = appIDLE, status = 0 > Device really in Runtime Mode, send DFU detach request... > Resetting USB... > Opening DFU USB Device... > Found DFU: [0403:bd00] devnum=0, cfg=2, intf=0, alt=6, name="rootfs" > Claiming USB DFU Interface... > Setting Alternate Setting #6 ... > Determining device status: state = dfuIDLE, status = 0 > dfuIDLE, continuing > Did not find cached descriptor > Error obtaining cached DFU functional descriptor > **** DUMP of func_dfu **** > bLength = 0 > bDescriptorType = 0 > bmAttributes = 0x00 > wDetachTimeOut = 0 > wTransferSize = 0 > bcdDFUVersion = 0x0000 > Error obtaining DFU functional descriptor > Please report this as a bug! > Warning: Assuming DFU version 1.0 > Warning: Transfer size can not be detected > DFU mode device DFU version 0100 > Error: Transfer size must be specified > Looking at the capture file (usb-capture-bad-filter.pcap) we see the culprit at packet 171 at bad capture and packet 169 at the good. > USB URB > URB id: 0xffff88032d9cbdc0 > URB type: URB_SUBMIT ('S') > URB transfer type: URB_CONTROL (0x02) > Endpoint: 0x80, Direction: IN > 1... .... = Direction: IN (1) > .000 0000 = Endpoint value: 0 > Device: 34 > URB bus id: 3 > Device setup request: relevant (0) > Data: not present ('<') > URB sec: 1355753000 > URB usec: 572483 > URB status: Operation now in progress (-EINPROGRESS) (-115) > URB length [bytes]: 9 > Data length [bytes]: 0 > [Response in: 172] > URB setup > bmRequestType: 0x80 > 1... .... = Direction: Device-to-host > .00. .... = Type: Standard (0x00) > ...0 0000 = Recipient: Device (0x00) > bRequest: GET DESCRIPTOR (6) > Descriptor Index: 0x00 > bDescriptorType: HID (33) > Language Id: no language specified (0x0000) > wLength: 9 > > 0000 c0 eb 99 28 03 88 ff ff 53 02 80 20 03 00 00 3c ...(....S.. ...< > 0010 d6 0e cf 50 00 00 00 00 a3 bf 0a 00 8d ff ff ff ...P............ > 0020 09 00 00 00 00 00 00 00 80 06 00 21 00 00 09 00 ...........!.... > 0030 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 ................ > The response generated when the fix is applied is correct: > USB URB > URB id: 0xffff88032899ebc0 > URB type: URB_COMPLETE ('C') > URB transfer type: URB_CONTROL (0x02) > Endpoint: 0x80, Direction: IN > 1... .... = Direction: IN (1) > .000 0000 = Endpoint value: 0 > Device: 32 > URB bus id: 3 > Device setup request: not relevant ('-') > Data: present (0) > URB sec: 1355747030 > URB usec: 704533 > URB status: Success (0) > URB length [bytes]: 9 > Data length [bytes]: 9 > [Request in: 169] > [Time from request: 0.000114000 seconds] > [bInterfaceClass: Unknown (0xffff)] > GET DESCRIPTOR data (unknown descriptor type 33) > > 0000 c0 eb 99 28 03 88 ff ff 43 02 80 20 03 00 2d 00 ...(....C.. ..-. > 0010 d6 0e cf 50 00 00 00 00 15 c0 0a 00 00 00 00 00 ...P............ > 0020 09 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 ................ > 0030 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 ................ > 0040 09 21 0f 00 00 00 10 10 01 .!....... Note that wireshark can't decode it - no DFU dissector. And the dfu-util side: > $ sudo ./src/dfu-util -v -D ~/test.img -a rootfs > dfu-util 0.7 > > Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. > Copyright 2010-2012 Tormod Volden and Stefan Schmidt > This program is Free Software and has ABSOLUTELY NO WARRANTY > Please report bugs to dfu-util at lists.gnumonks.org > > Opening DFU capable USB device... ID 0403:bd00 > Did not find cached descriptor > WARNING: Can not find cached DFU functional descriptor > Warning: Assuming DFU version 1.0 > Run-time device DFU version 0100 > Claiming USB DFU Runtime Interface... > Determining device status: state = appIDLE, status = 0 > Device really in Runtime Mode, send DFU detach request... > Resetting USB... > Opening DFU USB Device... > Found DFU: [0403:bd00] devnum=0, cfg=2, intf=0, alt=6, name="rootfs" > Claiming USB DFU Interface... > Setting Alternate Setting #6 ... > Determining device status: state = dfuIDLE, status = 0 > dfuIDLE, continuing > Did not find cached descriptor > Error obtaining cached DFU functional descriptor > **** DUMP of func_dfu **** > bLength = 9 > bDescriptorType = 33 > bmAttributes = 0x0f > wDetachTimeOut = 0 > wTransferSize = 4096 > bcdDFUVersion = 0x0110 > DFU mode device DFU version 0110 > Device returned transfer size 4096 > No valid DFU suffix signature > Warning: File has no DFU suffix > bytes_per_hash=335554 > Copying data from PC to DFU device > Starting download: [##################################################] finished! > Sent a total of 16777728 bytes > state(2) = dfuIDLE, status(0) = No error condition is present > Done! > > The response is malformed without the fix in the bad capture: > USB URB > URB id: 0xffff88032d9cbdc0 > URB type: URB_COMPLETE ('C') > URB transfer type: URB_CONTROL (0x02) > Endpoint: 0x80, Direction: IN > 1... .... = Direction: IN (1) > .000 0000 = Endpoint value: 0 > Device: 34 > URB bus id: 3 > Device setup request: not relevant ('-') > Data: present (0) > URB sec: 1355753000 > URB usec: 572591 > URB status: Broken pipe (-EPIPE) (-32) > URB length [bytes]: 0 > Data length [bytes]: 0 > [Request in: 171] > [Time from request: 0.000108000 seconds] > [bInterfaceClass: Unknown (0xffff)] > [Malformed Packet: USB] > [Expert Info (Error/Malformed): Malformed Packet (Exception occurred)] > [Message: Malformed Packet (Exception occurred)] > [Severity level: Error] > [Group: Malformed] > > 0000 c0 bd 9c 2d 03 88 ff ff 43 02 80 22 03 00 2d 00 ...-....C.."..-. > 0010 28 26 cf 50 00 00 00 00 af bc 08 00 e0 ff ff ff (&.P............ > 0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > 0030 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 ................ And the dfu-util side at the host complains and fails: > $ sudo ./src/dfu-util -v -D ~/test.img -a rootfs > dfu-util 0.7 > > Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. > Copyright 2010-2012 Tormod Volden and Stefan Schmidt > This program is Free Software and has ABSOLUTELY NO WARRANTY > Please report bugs to dfu-util at lists.gnumonks.org > > Opening DFU capable USB device... ID 0403:bd00 > Did not find cached descriptor > WARNING: Can not find cached DFU functional descriptor > Warning: Assuming DFU version 1.0 > Run-time device DFU version 0100 > Claiming USB DFU Runtime Interface... > Determining device status: state = appIDLE, status = 0 > Device really in Runtime Mode, send DFU detach request... > Resetting USB... > Opening DFU USB Device... > Found DFU: [0403:bd00] devnum=0, cfg=2, intf=0, alt=6, name="rootfs" > Claiming USB DFU Interface... > Setting Alternate Setting #6 ... > Determining device status: state = dfuIDLE, status = 0 > dfuIDLE, continuing > Did not find cached descriptor > Error obtaining cached DFU functional descriptor > **** DUMP of func_dfu **** > bLength = 0 > bDescriptorType = 0 > bmAttributes = 0x00 > wDetachTimeOut = 0 > wTransferSize = 0 > bcdDFUVersion = 0x0000 > Error obtaining DFU functional descriptor > Please report this as a bug! > Warning: Assuming DFU version 1.0 > Warning: Transfer size can not be detected > DFU mode device DFU version 0100 > Error: Transfer size must be specified The full set of captures (pcap format) is at dfu - https://docs.google.com/folder/d/0B7yJhZ55fi8FOFR3TnVGdTBfbHM/edit As to why it works for you Lukasz, I'm puzzled; maybe some difference in the usb gadget peripheral? I would bet that it might refuse to send a malformed response, dfu-util will eventually time out and then the transfer can continue with some fail-safe defaults. In either way, that's bad, and is a bug that the patchset fixes correctly. Regards -- Pantelis On Dec 17, 2012, at 1:00 PM, Lukasz Majewski wrote: > Hi Marek, > >> Pantelis Antoniou (9): >> g_dnl: Issue connect/disconnect as appropriate >> g_dnl: Properly terminate string list. >> dfu: Only perform DFU board_usb_init() for TRATS >> dfu: Fix crash when wrong number of arguments given >> dfu: Send correct DFU response from composite_setup >> dfu: Properly zero out timeout value >> dfu: Add a partition type target >> dfu: Support larger than memory transfers. >> usb: Fix bug when both DFU & ETHER are defined > > Can we wait with pulling DFU related patches? > > I didn't received tcpdump from Pantelis, so I don't know what is going > on (or how to tackle the DFU problem). > > > -- > Best regards, > > Lukasz Majewski > > Samsung Poland R&D Center | Linux Platform Group