From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Fri, 05 Sep 2014 10:11:23 +0200 Subject: [U-Boot] [PATCH] dfu, usb: set usb descriptor to values defined in dfu spec 1.1 In-Reply-To: <20140905095335.75949406@amdc2363> References: <1409826100-24834-1-git-send-email-hs@denx.de> <201409050042.24680.marex@denx.de> <54093C03.3080707@denx.de> <20140905095335.75949406@amdc2363> Message-ID: <5409702B.6020608@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 05.09.2014 09:53, schrieb Lukasz Majewski: > Hi Heiko, > >> Hello Marek, >> >> Am 05.09.2014 00:42, schrieb Marek Vasut: >>> On Thursday, September 04, 2014 at 12:21:40 PM, Heiko Schocher >>> wrote: >>> >>> Hi Heiko, >>> >>> I'll just rant a bit, but please wait until Lukasz does a proper >>> runthrough. >>> >>>> set bDeviceClass, bDeviceSubClass and bcdUSB to the values >>>> defined in dfu spec 1.1 chapter 4.2.1 found here: >>>> >>>> http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf >>> >>> This URL gives me a website with: >>> " >>> Resource not found. >>> Please check the URL and try again. >>> " >> >> :-( Maybe it is deleted currently there? >> Hmm.. there is a search field if you open the above URL ... and if >> you type DFU and press search, you get: >> >> DFU >> File Format: PDF/Adobe Acrobat >> Aug 5, 2004 ... USB Device Firmware Upgrade Specification, Revision >> 1.1. 2. Intellectual Property Disclaimer. THIS SPECIFICATION IS >> PROVIDED ?AS IS? ... www.usb.org/developers/devclass_docs/DFU_1.1.pdf >> >> This is exactly the above link ... >> >> This link is also referenced from openmoko: >> >> http://wiki.openmoko.org/wiki/USB_DFU_-_The_USB_Device_Firmware_Upgrade_standard > > I can confirm that the original link is dead. Maybe we can add above > information to the commit message? Hmm.. better would be to add a correct new link... do you have an idea, where we can find this document now? >>>> Signed-off-by: Heiko Schocher >>>> Cc: Lukasz Majewski >>>> Cc: Marek Vasut >>>> Cc: Roger Meier >>>> >>>> --- >>>> >>>> before this patch, "dfu-util -l" showed: >>>> >>>> Bus 002 Device 114: ID 0908:02c5 Siemens AG >>>> Device Descriptor: >>>> bLength 18 >>>> bDescriptorType 1 >>>> bcdUSB 2.00 >>>> bDeviceClass 2 Communications >>>> bDeviceSubClass 2 Abstract (modem) >>>> bDeviceProtocol 0 None >>>> bMaxPacketSize0 64 >>>> idVendor 0x0908 Siemens AG >>>> idProduct 0x02c5 >>>> bcdDevice 0.00 >>>> iManufacturer 1 Siemens AG >>>> >>>> with this patch: >>>> >>>> Bus 002 Device 089: ID 0908:02c5 Siemens AG >>>> Device Descriptor: >>>> bLength 18 >>>> bDescriptorType 1 >>>> bcdUSB 1.10 >>>> bDeviceClass 0 (Defined at Interface level) >>>> bDeviceSubClass 0 >>>> bDeviceProtocol 0 >>>> bMaxPacketSize0 64 >>>> idVendor 0x0908 Siemens AG >>>> idProduct 0x02c5 >>>> bcdDevice 0.00 >>>> iManufacturer 1 Siemens AG >>>> iProduct 2 USB download gadget >>>> >>>> which fits for "bcdUSB", "bDeviceClass" and "bDeviceSubClass" with >>>> the DFU spezifikation. >>> >>> This patch doesn't seem fully right, let me explain below please. >>> >>>> --- >>>> drivers/usb/gadget/f_dfu.c | 5 +++-- >>>> drivers/usb/gadget/g_dnl.c | 6 +++--- >>>> 2 files changed, 6 insertions(+), 5 deletions(-) >>>> >>>> diff --git a/drivers/usb/gadget/f_dfu.c >>>> b/drivers/usb/gadget/f_dfu.c index 9128add..9429e50 100644 >>>> --- a/drivers/usb/gadget/f_dfu.c >>>> +++ b/drivers/usb/gadget/f_dfu.c >>>> @@ -83,8 +83,9 @@ static struct usb_descriptor_header >>>> *dfu_runtime_descs[] = { static const struct >>>> usb_qualifier_descriptor dev_qualifier = { .bLength >>>> = sizeof dev_qualifier, .bDescriptorType = >>>> USB_DT_DEVICE_QUALIFIER, >>>> - .bcdUSB = __constant_cpu_to_le16(0x0200), >>>> - .bDeviceClass = USB_CLASS_VENDOR_SPEC, >>>> + .bcdUSB = __constant_cpu_to_le16(0x0110), >>> >>> See [1] and look for first and second instance of 'bcdUsb' there >>> please. Quote of the second one: >>> >>> ' >>> The bcdUSB field reports the highest version of USB the device >>> supports. The value is in binary coded decimal with a format of >>> 0xJJMN where JJ is the major version number, M is the minor version >>> number and N is the sub minor version number. e.g. USB 2.0 is >>> reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as 0x0100. >>> ' >>> >>> So this should be configured dynamically based on what the highest >>> mode the controller supports is, no? >> >> Good question ... the DFU 1.1 spezification says in chapter >> 4.2.1 DFU Mode Device Descriptor: >> >> bcdUSB = 0100 USB specification release number in binary coded >> decimal. (which seems wrong, as the spez is version 1.1, see [2]) >> bDeviceClass = 0 >> bDeviceSubClass = 0 >> >> ... ? >> >> I discussed this change with Lukasz, see: >> >> [2] http://lists.denx.de/pipermail/u-boot/2014-August/186918.html >> > > I'm more than happy to announce that you both may be right :-). ;-) > In the DFU 1.1 spec the point 4.2.1 describes the DFU MODE DEVICE > DESCRIPTOR. > > According to information from point 4.- "Enumeration Phase": > > "It is very important to note that the device exposes two distinct and > independent descriptor sets, one each at the appropriate time: > - Run-time descriptor (the one from [1] pointed out by Marek) > - DFU mode descriptor (the one from 4.2.1. - fixed by Heiko) > > It seems to me that the first descriptor is defined at g_dnl.c and the > second, which I guess should be changed, at f_dfu.c Ah, I fixed both ... > However, to be 100% sure I need to examine this with USB analizer. I'm > going to setup it today or on Monday. Oh, that would be great, thanks! bye, Heiko > >>> >>>> + .bDeviceClass = USB_CLASS_PER_INTERFACE, >>> >>> This might be OK. >>> >>>> + .bDeviceSubClass = 0x00, >>> >>> But this is not, the device definitelly isn't CDC-serial. >>> >>> [...] >>> >>> [1] http://www.beyondlogic.org/usbnutshell/usb5.shtml >> >> bye, >> Heiko > > -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany