From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Tue, 25 Jun 2013 13:24:31 +0200 Subject: [U-Boot] dfu: using dfu-util -l shows different output In-Reply-To: <20130625122958.066c25cf@amdc308.digital.local> References: <51C94FE1.7090402@denx.de> <7A0873D2-F7B6-4399-B939-BE4EF0451BBE@antoniou-consulting.com> <51C953F0.7080801@denx.de> <20130625104438.2538a880@amdc308.digital.local> <51C95AF2.6030201@denx.de> <20130625122958.066c25cf@amdc308.digital.local> Message-ID: <51C97DEF.90705@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Lukasz, Am 25.06.2013 12:29, schrieb Lukasz Majewski: > Hi Heiko, > >> Hello Lukasz, >> >> Am 25.06.2013 10:44, schrieb Lukasz Majewski: >>> Hi Heiko, >>> >>>> Hello Pantelis, >>>> >>>> Am 25.06.2013 10:16, schrieb Pantelis Antoniou: >>>>> Heiko, >>>>> >>>>> I don't think the gadget is initialized before you issue >>>>> a dfu call. >>>>> >>>>> So that makes sense. >>>> >>>> ? >>>> >>>> I call from the host "dfu-util -l" so the gadget on the board >>>> should do the answer ... or? >>> >>> The gadget is not initialized here (so the dfu-util -l shows no >>> output). >>> >>> After transfer it shows information about proper alt settings. >>> >>> This is correct behaviour, but I had discussion about this with Tom >>> and we agreed, that it would be nice to have "dfu-util -l" >>> exporting from very beginning the alt setting information. >> >> Yes, I vote for this too. Connecting to a board, I first >> would do a "dfu-util -l" to look, what is possible to >> update here ... >> >>> Frankly, I had too much other work to implement it. >>> >>> However, I think, that it would be a very useful feature (e.g. to >>> get alt settings layout at HOST to facilitate automated flashing). >> >> Hmm... I digged into the code, but not really found a place >> where I have to start. Can you give me a hint where to start? >> So maybe, I can do it? > > The problem here is to switch: > f_dfu->usb_function.strings = dfu_strings | NULL; > f_dfu->usb_function.hs_descriptors = f_dfu->function | > dfu_runtime_descs; > > The trick here is to properly fill in hs USB descriptors to embed the > alt settings strings. > > > dfu-util -l can read the alt settings when following patch is applied: > > @@ -655,6 +656,7 @@ static int dfu_bind(struct usb_configuration *c, > struct usb_function *f) > stringtab_dfu.strings = f_dfu->strings; > > + to_dfu_mode(f_dfu); > cdev->req->context = f_dfu; > > error: > > Unfortunately this breaks normal dfu operation, since board hangs at > "dfu mode". What do you mean with "normal dfu operation" ? I just tried the following patch, and "dfu-util -l" and "dfu-util -a ... -D ..." works ... diff --git a/drivers/usb/gadget/f_dfu.c b/drivers/usb/gadget/f_dfu.c index a322ae5..0334d9f 100644 --- a/drivers/usb/gadget/f_dfu.c +++ b/drivers/usb/gadget/f_dfu.c @@ -653,6 +653,9 @@ static int dfu_bind(struct usb_configuration *c, struct usb_function *f) ->iInterface = id; } + to_dfu_mode(f_dfu); + f_dfu->dfu_state = DFU_STATE_dfuIDLE; + stringtab_dfu.strings = f_dfu->strings; cdev->req->context = f_dfu; log on the host, where I use dfu-util: after restart of the board: [root at ts8 ~]# dfu-util -l dfu-util 0.5 (C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. (C) 2010-2011 Tormod Volden (DfuSe support) This program is Free Software and has ABSOLUTELY NO WARRANTY dfu-util does currently only support DFU version 1.0 Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=0, name="SPL" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=1, name="SPL.backup1" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=2, name="SPL.backup2" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=3, name="SPL.backup3" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=4, name="u-boot" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=5, name="kernel_a" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=6, name="kernel_b" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=7, name="rootfs" [root at ts8 ~]# dfu-util -a rootfs -D dxr2-org/dxr2.xx-release-image-UNKNOWN-dxr2.ubi dfu-util 0.5 (C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. (C) 2010-2011 Tormod Volden (DfuSe support) This program is Free Software and has ABSOLUTELY NO WARRANTY dfu-util does currently only support DFU version 1.0 Opening DFU USB device... ID 0525:4a47 WARNING: Can not find cached DFU functional descriptor Warning: Assuming DFU version 1.0 Run-time device DFU version 0100 Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=7, name="rootfs" Claiming USB DFU Interface... Setting Alternate Setting #7 ... Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing Error obtaining cached DFU functional descriptor 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=576716 Copying data from PC to DFU device Starting download: [##################################################] finished! state(2) = dfuIDLE, status(0) = No error condition is present Done! [root at ts8 ~]# dfu-util -l dfu-util 0.5 (C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. (C) 2010-2011 Tormod Volden (DfuSe support) This program is Free Software and has ABSOLUTELY NO WARRANTY dfu-util does currently only support DFU version 1.0 Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=0, name="SPL" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=1, name="SPL.backup1" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=2, name="SPL.backup2" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=3, name="SPL.backup3" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=4, name="u-boot" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=5, name="kernel_a" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=6, name="kernel_b" Found DFU: [0525:4a47] devnum=0, cfg=2, intf=0, alt=7, name="rootfs" [root at ts8 ~]# seems to me, that we should add "f_dfu->dfu_state = DFU_STATE_dfuIDLE" into to_dfu_mode() as, after all places where to_dfu_mode() is called f_dfu->dfu_state = DFU_STATE_dfuIDLE is set ... bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany