From: Guennadi L. <gl...@ds...> - 2006-01-23 10:10:10
|
Hi (sorry for not replying - was not receiving the list last September) Just wanted to contribute, that at http://althaia.across.sk/~naiki/linux/index.html there's a port of the driver from Sigmatel for 2.4 to 2.6 by Naiki (my Czech is not too good:-), but I do think he was the author, as follows from http://www.abclinuxu.cz/forum/show/81434). After applying the patch below it also works quite well, apart from one thing: similar to 2.4 kernel we have a problem when some disturbances come while in FIr mode. We test with a PPP connection to another Linux system in FIr mode with 4mbps. As the connection gets lost, the parties switch back to SIr 9600, but even before that still in FIr __sometimes__ the 4210 seems to just stop reacting to USB requests to the bulk emdpoinds. Here is a snipplet from the usbmon under 2.6.15: dd5bc9c0 503711873 S Bi:003:02 -115 2324 < dd5bc9c0 503715872 C Bi:003:02 0 1512 = 0000000a 161f1000 ff030021 450805dc 8fd54000 40068b3a 0a010301 0a010302 (Here it still works - you see data comming from a bulk-in (Bi above) endpoint. I was doing an ftp get) dd5bc940 503715873 S Bi:003:02 -115 2324 < dd5bcac0 503715885 S Bo:003:01 -115 64 = 0000050b 90101f02 ff030021 45080034 6a544000 4006b663 0a010302 0a010301 dd5bcac0 503716874 C Bo:003:01 0 64 > dd5bc940 503721872 C Bi:003:02 0 1512 = 0000000a 281f1001 ff030021 450805dc 8fd64000 40068b39 0a010301 0a010302 (Here it still works too, you see a bulk-in request, bulk-out request-response and a bulk-in response) dd5bc9c0 503721873 S Bi:003:02 -115 2324 < dd5bcac0 504216449 S Bo:003:01 -115 5 = 0000050b b1 dd5bcac0 504217777 C Bo:003:01 0 5 > (Here the visible connection is broken, here, I am not sure - anybody has any idea who sends this 5-byte long control packets and what exactly they are? They are sent as long as a ppp-connection is active and idle. Use see status "0" above - an ACK was received from the chip) dd5bcac0 504716446 S Bo:003:01 -115 5 = 0000050b b1 dd5bcac0 504717686 C Bo:003:01 0 5 > dd5bcac0 505216446 S Bo:003:01 -115 5 = 0000050b b1 dd5bcac0 505367566 C Bo:003:01 -104 0 (2 more ACKs) dd5bcac0 505716446 S Bo:003:01 -115 5 = 0000050b b1 dd5bcac0 505867475 C Bo:003:01 -104 0 (Here comes the error - error code -104 -ECONNRESET, I think, a network tx-timeout occurred and killed the URB, which means continuing NACKs and no ACK from the chip) dd5bcac0 506216446 S Bo:003:01 -115 5 = 0000050b b1 dd5bcac0 506367384 C Bo:003:01 -104 0 dd5bcac0 506716446 S Bo:003:01 -115 5 = 0000050b b1 dd5bcac0 506867293 C Bo:003:01 -104 0 dd5bcb40 507216446 S Bo:003:01 -115 3 = 320000 dd5bcb40 507367203 C Bo:003:01 -104 0 (the stack runs firther, tries to switch to 9600 to restart discovery, but nothing works after this crash apart from a hardware reset / driver reload) Anybody has any idea what that could be? A firmware bug? Thanks Guennadi --------------------------------- Guennadi Liakhovetski, Ph.D. DSA Daten- und Systemtechnik GmbH Pascalstr. 28 D-52076 Aachen Germany diff -ur /home/gl/usr/src/kernel/stir4210-linux26/stir4210.c /home/gl/usr/src/kernel/mftd2x/stir4210-linux26/stir4210.c --- /home/gl/usr/src/kernel/stir4210-linux26/stir4210.c 2006-01-19 15:57:36.000000000 +0100 +++ /home/gl/usr/src/kernel/mftd2x/stir4210-linux26/stir4210.c 2006-01-23 10:45:20.393211968 +0100 @@ -934,11 +934,6 @@ /* But IrDA-USB header is 1 byte. Jean II */ //skb_reserve(newskb, USB_IRDA_HEADER - 1); - /* Sigmatel thinks somethink different. (Naiki) */ - if ( self->capability & SIGMATEL_4210 ) { - skb_reserve(newskb, USB_IRDA_SIGMATEL_HEADER); - } - if(docopy) { /* Copy packet, so we can recycle the original */ memcpy(newskb->data, skb->data, urb->actual_length); @@ -1053,7 +1048,7 @@ IRDA_DEBUG( 4,"%s(), Sending %u bytes of patch\n", __FUNCTION__, download_amount ) ; -#if IRDA_IRDA_DEBUG_DUMP_XMIT +#ifdef IRDA_IRDA_DEBUG_DUMP_XMIT sgtltrc_hexdump( " --> Tx ", &patch_data[i], @@ -1151,7 +1146,7 @@ return -EINVAL ; } pPatchFileVersion = (PPATCH_FILE_VERSION) pb ; -#if SGTL_DBG +#ifdef SGTL_DBG { char szVersion[32] ; memcpy(szVersion, pPatchFileVersion, sizeof(PATCH_FILE_VERSION)) ; @@ -1192,7 +1187,7 @@ ((ulVersionBuild / 10) << 4) + (ulVersionBuild % 10) ) ; -#if SGTL_DBG +#ifdef SGTL_DBG IRDA_DEBUG(3,"%s(), bcdVersion=0x%04X (%c%X.%X%X)\n", __FUNCTION__, ret, diff -ur /home/gl/usr/src/kernel/stir4210-linux26/stir4210.h /home/gl/usr/src/kernel/mftd2x/stir4210-linux26/stir4210.h --- /home/gl/usr/src/kernel/stir4210-linux26/stir4210.h 2005-11-09 23:05:02.000000000 +0100 +++ /home/gl/usr/src/kernel/mftd2x/stir4210-linux26/stir4210.h 2006-01-20 13:54:15.000000000 +0100 @@ -69,7 +69,7 @@ /* Various ugly stuff to try to workaround generic problems */ /* Send speed command in case of timeout, just for trying to get things sane */ -#define IU_BUG_KICK_TIMEOUT +//#define IU_BUG_KICK_TIMEOUT /* Show the USB class descriptor */ #undef IU_DUMP_CLASS_DESC /* Assume a minimum round trip latency for USB transfer (in us)... |