All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] dfu: using dfu-util -l shows different output
Date: Tue, 25 Jun 2013 13:24:31 +0200	[thread overview]
Message-ID: <51C97DEF.90705@denx.de> (raw)
In-Reply-To: <20130625122958.066c25cf@amdc308.digital.local>

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

  reply	other threads:[~2013-06-25 11:24 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-25  8:08 [U-Boot] dfu: using dfu-util -l shows different output Heiko Schocher
2013-06-25  8:16 ` Pantelis Antoniou
2013-06-25  8:25   ` Heiko Schocher
2013-06-25  8:44     ` Lukasz Majewski
2013-06-25  8:55       ` Heiko Schocher
2013-06-25 10:29         ` Lukasz Majewski
2013-06-25 11:24           ` Heiko Schocher [this message]
2013-06-25 11:35             ` Lukasz Majewski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51C97DEF.90705@denx.de \
    --to=hs@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.