Re: [BUG] 2.6.31.2 io_ti

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 16 Aug 2010, Chris Beauchamp wrote:

> > These traces are very difficult to follow because they show multiple
> > hubs with multiple devices attached to them.  Can you provide the
> > equivalent information for a single device with no hubs?
> >
> 
> Well, each box appears to be a couple of hubs and 8 dual serial port
> adaptors. Tricky to separate without completely voiding the warranty
> :) There is only one plugged in at a time. Is there a way to separate
> in software - I guess I could go through and grep for each device and
> separate into a file per device? Would that be helpful?

I made some progress by concentrating on just one device.  It appears 
that the problem is entirely in the io_ti.c driver; you can see by 
comparing these lines from the firstplug and secondplug kernel 
logs:

[   79.333294] /build/buildd/linux-2.6.32/drivers/usb/serial/io_ti.c: download_fw - >> FW Versions Device 4.80  Driver 0.0
[   79.333299] /build/buildd/linux-2.6.32/drivers/usb/serial/io_ti.c: download_fw - Update I2C dld from 4.80 to 0.0

[  227.167254] /build/buildd/linux-2.6.32/drivers/usb/serial/io_ti.c: download_fw - >> FW Versions Device 4.80  Driver 4.80

See the difference in the Driver values?  The first time through the
Driver version is uninitialized, hence equal to 0.0, which is different
from the version 4.80 firmware in the device, so the driver tries to
update the device firmware from 4.80 to 0.0!

The Driver version doesn't get updated until the driver runs across a
device with blank firmware and then loads the firmware file from disk.  
At that point it learns what the version number should be, and things
start to work a little better.  There are still problems though,
because when the driver sends the firmware to the device, the device
doesn't accept the final command to start running the new firmware (the
command times out).  That's probably why you need to unplug and replug
it.

That's in 2.6.27.  Back in 2.6.24 the firmware was build into the 
driver, not a separate file, so there was no problem about the Driver 
version being uninitialized.

Greg, I don't know the right way to fix this.  Should
io_ti.c:download_fw() simply assume that if download_new_ver is 0 then
download_cur_ver is correct?  Or should it always request the firmware
file (that is, call build_i2c_fw_hdr()) during module initialization?

I also don't know why the devices don't accept the command to run the 
new firmware.  Any ideas?

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux