Re: [BUG] 2.6.31.2 io_ti

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

 



On Tue, Aug 17, 2010 at 06:01:45PM -0400, Alan Stern wrote:
> 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?

We should probably not allow the firmware to be downgraded, so a check
for < should probably be used instead.

Chris, can you apply the patch below to see if that helps out any?

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

Probably because the firmware isn't around at boot time (not built into
the kernel anymore).

thanks,

greg k-h

--------------


diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
index dc47f98..c3f27c3 100644
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
@@ -1151,7 +1151,7 @@ static int download_fw(struct edgeport_serial *serial)
 
 			/* Check if we have an old version in the I2C and
 			   update if necessary */
-			if (download_cur_ver != download_new_ver) {
+			if (download_cur_ver < download_new_ver) {
 				dbg("%s - Update I2C dld from %d.%d to %d.%d",
 				    __func__,
 				    firmware_version->Ver_Major,
--
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