RFC: aleksander/qmi-firmware-update branch

Bjørn Mork bjorn at mork.no
Wed Jan 11 17:58:56 UTC 2017


Dan Williams <dcbw at redhat.com> writes:

> On Wed, 2017-01-11 at 16:02 +0100, Bjørn Mork wrote:
>> 
>> On January 11, 2017 3:24:13 PM CET, Aleksander Morgado <aleksander at al
>> eksander.es> wrote:
>> > On Thu, Jan 5, 2017 at 8:09 PM, Bjørn Mork <bjorn at mork.no> wrote:
>> > > > > But resetting by USB device ID and then uploading in QDL mode
>> > > > > work
>> > > > > flawlessly.  Although I didn't expect "reset" to use the AT
>> > 
>> > command:
>> > > > > 
>> > > > 
>> > > > It was the "suggested" way to reset the devices that don't
>> > > > support
>> > 
>> > the
>> > > > set firwmware preference command, at least that is what I could
>> > 
>> > find.
>> > > 
>> > > OK.  But what about modems without an AT port?
>> > > 
>> > > I don't remember and am too lazy to search old mailing list
>> > > posts,
>> > 
>> > but I
>> > > believe the MC7710 updater had a "magic" DMS boot-and-hold QMI
>> > 
>> > request.
>> > > 0x003e?
>> > 
>> > Where did you see that command?
>> 
>> In requests sent by the mc7710 firmware updater from the SWI SDK.
>
> DMS 0x003E is eQMI_DMS_SET_FIRMWARE_ID though... right?


Possibly.  But Sierra use it without any TLVs, and the result is an
immediate reboot to QDL mode. This is part of an almost 5 year old log I
found lying around, showing the final QMI requests sent by the firmware
tool while preparing for update and the modem reboot.  This is from an
(not very successful) experiment I did with a qcqmi module on top of
qmi_wwan, if you wonder about the QMI dumps:

May 22 17:39:58 nemi SWI SDK Process: USB read: bytes2read = 162, read 162 bytes
May 22 17:39:58 nemi SWI SDK Process: QM:SDK<-Mdm: ch/QMImsgid/QMImsglen/IPCmsglen: 0/0023/159/176
May 22 17:39:58 nemi kernel: [146642.384056] qcqmi:read_next_qmux() len=168
May 22 17:39:58 nemi kernel: [146642.384064]  << 00000000: 01 a7 00 80 02 01 02 09 00 23 00 9b 00 02 04 00
May 22 17:39:58 nemi kernel: [146642.384068]  << 00000010: 00 00 00 00 01 3f 00 53 57 49 39 32 30 30 58 5f
May 22 17:39:58 nemi kernel: [146642.384072]  << 00000020: 30 33 2e 30 30 2e 30 38 2e 30 32 41 50 20 52 33
May 22 17:39:58 nemi kernel: [146642.384076]  << 00000030: 37 31 35 20 43 41 52 4d 44 2d 45 4e 2d 31 30 35
May 22 17:39:58 nemi kernel: [146642.384080]  << 00000040: 32 36 20 32 30 31 31 2f 31 31 2f 31 34 20 31 38
May 22 17:39:58 nemi kernel: [146642.384083]  << 00000050: 3a 34 32 3a 34 33 10 3f 00 53 57 49 39 32 30 30
May 22 17:39:58 nemi kernel: [146642.384087]  << 00000060: 58 5f 30 33 2e 30 30 2e 30 38 2e 30 32 42 54 20
May 22 17:39:58 nemi kernel: [146642.384091]  << 00000070: 52 33 37 31 35 20 43 41 52 4d 44 2d 45 4e 2d 31
May 22 17:39:58 nemi kernel: [146642.384095]  << 00000080: 30 35 32 36 20 32 30 31 31 2f 31 31 2f 31 34 20
May 22 17:39:58 nemi kernel: [146642.384098]  << 00000090: 31 38 3a 33 34 3a 34 31 11 0d 00 39 39 30 31 34
May 22 17:39:58 nemi kernel: [146642.384102]  << 000000a0: 36 33 20 30 31 2e 30 31
May 22 17:39:58 nemi kernel: [146642.384105] qcqmi:copy_msg_to_clients() 
May 22 17:39:58 nemi kernel: [146642.384109] qcqmi:add_msg_to_client() handle=ffff88022f8a3440
May 22 17:39:58 nemi kernel: [146642.384410] qcqmi:write_sync() handle=ffff88022f8a3440, cid=0201, size=13
May 22 17:39:58 nemi kernel: [146642.384415]  >> 00000000: 01 0c 00 00 02 01 00 0a 00 22 00 00 00
May 22 17:39:58 nemi SWI SDK Process: USB read: bytes2read = 23, read 23 bytes
May 22 17:39:58 nemi SWI SDK Process: QM:SDK<-Mdm: ch/QMImsgid/QMImsglen/IPCmsglen: 0/0022/20/37
May 22 17:39:58 nemi SWI SDK Process: QM:SDK<-Mdm: ch/QMImsgid/QMImsglen/IPCmsglen: 0/0000/0/85
May 22 17:39:58 nemi SWI SDK Process: QM:SDK<-Mdm: ch/QMImsgid/QMImsglen/IPCmsglen: 0/0000/0/32
May 22 17:39:58 nemi kernel: [146642.488143] qcqmi:read_next_qmux() len=29
May 22 17:39:58 nemi kernel: [146642.488155]  << 00000000: 01 1c 00 80 02 01 02 0a 00 22 00 10 00 02 04 00
May 22 17:39:58 nemi kernel: [146642.488162]  << 00000010: 00 00 00 00 01 06 00 4d 43 37 37 31 30
May 22 17:39:58 nemi kernel: [146642.488168] qcqmi:copy_msg_to_clients() 
May 22 17:39:58 nemi kernel: [146642.488175] qcqmi:add_msg_to_client() handle=ffff88022f8a3440
May 22 17:39:58 nemi kernel: [146642.490307] qcqmi:write_sync() handle=ffff88022f8a3440, cid=0201, size=13
May 22 17:39:58 nemi kernel: [146642.490317]  >> 00000000: 01 0c 00 00 02 01 00 0b 00 22 00 00 00
May 22 17:39:58 nemi SWI SDK Process: USB read: bytes2read = 23, read 23 bytes
May 22 17:39:58 nemi SWI SDK Process: QM:SDK<-Mdm: ch/QMImsgid/QMImsglen/IPCmsglen: 0/0022/20/37
May 22 17:39:58 nemi SWI SDK Process: QM:/home/bjorn/docs/hardware/sierra/mc7710/firmware/unpacked/QMI-03.05.08/
May 22 17:39:58 nemi SWI SDK Process: QM:SDK<-Mdm: ch/QMImsgid/QMImsglen/IPCmsglen: 0/0000/0/28
May 22 17:39:58 nemi SWI SDK Process: QM:SDK<-Mdm: ch/QMImsgid/QMImsglen/IPCmsglen: 0/0000/0/32
May 22 17:39:58 nemi kernel: [146642.592187] qcqmi:read_next_qmux() len=29
May 22 17:39:58 nemi kernel: [146642.592198]  << 00000000: 01 1c 00 80 02 01 02 0b 00 22 00 10 00 02 04 00
May 22 17:39:58 nemi kernel: [146642.592205]  << 00000010: 00 00 00 00 01 06 00 4d 43 37 37 31 30
May 22 17:39:58 nemi kernel: [146642.592210] qcqmi:copy_msg_to_clients() 
May 22 17:39:58 nemi kernel: [146642.592216] qcqmi:add_msg_to_client() handle=ffff88022f8a3440
May 22 17:39:58 nemi kernel: [146642.592968] qcqmi:write_sync() handle=ffff88022f8a3440, cid=0201, size=13
May 22 17:39:58 nemi kernel: [146642.592976]  >> 00000000: 01 0c 00 00 02 01 00 0c 00 3e 00 00 00
May 22 17:39:58 nemi SWI SDK Process: USB read: bytes2read = 14, read 14 bytes
May 22 17:39:58 nemi SWI SDK Process: QM:SDK<-Mdm: ch/QMImsgid/QMImsglen/IPCmsglen: 0/003e/11/28
May 22 17:39:58 nemi kernel: [146642.696071] qcqmi:read_next_qmux() len=20
May 22 17:39:58 nemi kernel: [146642.696083]  << 00000000: 01 13 00 80 02 01 02 0c 00 3e 00 07 00 02 04 00
May 22 17:39:58 nemi kernel: [146642.696089]  << 00000010: 00 00 00 00
May 22 17:39:58 nemi kernel: [146642.696094] qcqmi:copy_msg_to_clients() 
May 22 17:39:58 nemi kernel: [146642.696100] qcqmi:add_msg_to_client() handle=ffff88022f8a3440
May 22 17:40:00 nemi kernel: [146644.057290] usb 2-4: USB disconnect, device number 20
May 22 17:40:00 nemi kernel: [146644.057669] sierra ttyUSB0: Sierra USB modem converter now disconnected from ttyUSB0
May 22 17:40:00 nemi kernel: [146644.057711] usbserial_generic 2-4:1.0: device disconnected
May 22 17:40:00 nemi kernel: [146644.059156] sierra ttyUSB1: Sierra USB modem converter now disconnected from ttyUSB1
May 22 17:40:00 nemi kernel: [146644.059197] usbserial_generic 2-4:1.2: device disconnected
May 22 17:40:00 nemi kernel: [146644.060600] sierra ttyUSB2: Sierra USB modem converter now disconnected from ttyUSB2
May 22 17:40:00 nemi kernel: [146644.060638] usbserial_generic 2-4:1.3: device disconnected
May 22 17:40:00 nemi kernel: [146644.060927] qmi_wwan 2-4:1.8: usb0: unregister 'qmi_wwan' usb-0000:00:1d.7-4, Sierra Wireless wwan/QMI device
May 22 17:40:00 nemi SWI SDK Process: USB read error: No such device
May 22 17:40:00 nemi kernel: [146644.152159] qcqmi:devqmi_release() handle=ffff88022f8a3440, cid=0201, count=2
May 22 17:40:00 nemi kernel: [146644.152170] qcqmi:release_cid() handle=ffff88022f8a3440, cid=0201
May 22 17:40:00 nemi kernel: [146644.152177] qcqmi:write_sync() handle=ffff88022f8a3440, cid=0000, size=17
May 22 17:40:00 nemi kernel: [146644.152185]  >> 00000000: 01 10 00 00 00 00 00 01 23 00 05 00 01 02 00 02
May 22 17:40:00 nemi kernel: [146644.152191]  >> 00000010: 01
May 22 17:40:00 nemi SWI SDK Process: QMRR1:invalid endpoint: client 1, epid 4
May 22 17:40:00 nemi SWI SDK Process: QM:qm_ds_handle_dev_disconnected: devstate 0
May 22 17:40:00 nemi SWI SDK Process: QM:SDK<-Mdm: ch/QMImsgid/QMImsglen/IPCmsglen: 1/0000/0/25
May 22 17:40:00 nemi kernel: [146644.656158] qcqmi:devqmi_release() handle=ffff880184a26a40, cid=ffff, count=1
May 22 17:40:01 nemi kernel: [146645.248145] usb 2-4: new high-speed USB device number 21 using ehci_hcd
May 22 17:40:01 nemi kernel: [146645.387346] usb 2-4: New USB device found, idVendor=1199, idProduct=68a2
May 22 17:40:01 nemi kernel: [146645.387357] usb 2-4: New USB device strings: Mfr=3, Product=2, SerialNumber=4
May 22 17:40:01 nemi kernel: [146645.387364] usb 2-4: Product: MC7710
May 22 17:40:01 nemi kernel: [146645.387369] usb 2-4: Manufacturer: Sierra Wireless, Incorporated
May 22 17:40:01 nemi kernel: [146645.387375] usb 2-4: SerialNumber: 358178040092316
May 22 17:40:01 nemi kernel: [146645.390461] usbserial_generic 2-4:1.0: Sierra USB modem converter detected
May 22 17:40:01 nemi kernel: [146645.391523] usb 2-4: Sierra USB modem converter now attached to ttyUSB0
May 22 17:40:01 nemi SWI SDK Process: ttyUSB1 device on USB Interface 2 not found
May 22 17:40:01 nemi SWI SDK Process: ttyUSB1 device on USB Interface 2 not found
May 22 17:40:01 nemi SWI SDK Process: ttyUSB2 device on USB Interface 3 not found
May 22 17:40:01 nemi SWI SDK Process: ttyUSB2 device on USB Interface 3 not found
May 22 17:40:01 nemi SWI SDK Process: swi_ossdkusbscan: drivers ready!
May 22 17:40:01 nemi SWI SDK Process: UDIAG:DS Shell launched
May 22 17:40:01 nemi SWI SDK Process: IMURR1:Endpoint DS shell instance created
May 22 17:40:01 nemi SWI SDK Process: IM:Task started
May 22 17:40:01 nemi SWI SDK Process: IM:Send DLOAD to SDP (0x70), st:0
May 22 17:40:01 nemi SWI SDK Process: SM:event: 0x00 transition: 0x00->0x01
May 22 17:40:01 nemi SWI SDK Process: IM:Dload to SDP Rsp, st:1, 0x02
May 22 17:40:01 nemi SWI SDK Process: IM:Send Hello (0x01), st:1
May 22 17:40:01 nemi SWI SDK Process: SM:event: 0x01 transition: 0x01->0x02
May 22 17:40:01 nemi SWI SDK Process: IM:Send OF packet (0x25), st:2
May 22 17:40:01 nemi SWI SDK Process: SM:event: 0x02 transition: 0x02->0x03
May 22 17:40:01 nemi SWI SDK Process: IM:Send UF write, st:3


So you can see the tool write '01 0c 00 00 02 01 00 0c 00 3e 00 00 00'
and the modem respond with '01 13 00 80 02 01 02 0c 00 3e 00 07 00 02 04
00 00 00 00 00', followed by a disconnect and reboot to QDL mode..

(I believe the futile attempt to release the DMS CID after disconnect
is noise from my qcqmi implementation trying to clean up.)

I don't think this tool ever sets any firmware preference or such.  The
"preparation phase" is just a series of revision requests.


Bjørn


More information about the libqmi-devel mailing list