Re: Re: packet status error of sl811h with at76c503a based usb wlan adapter
"刘亨杰" <[email protected]>
| Newsgroups | gmane.linux.drivers.atmel-wlan |
|---|---|
| Message-ID | <[email protected]> |
hi,joerg because sl811 doesn't support DMA operation in host mode, I deleted the 'GFP_DMA' flag in kmalloc of ctx: /*00268 in usbdfu.c, function dfu_alloc_ctx*/ ctx = kmalloc(sizeof(struct dfu_ctx) + DFU_PACKETSIZE, GFP_KERNEL); //GFP_KERNEL|GFP_DMA IS CHANGED INTO GFP_KERNEL So, I think the next line (00199 in usbdfu.c, function dfu_download_block) may not work: memcpy(tmpbuf, buffer, bytes); Does this line means that data will transfered from at76c503 to ctx->buf? If it is true, then errors will occur to my board, because transactions between arm cpu and sl811 are through a static address, (0x3605000 in my board). the sl811 has a data buffer of 240 bytes, and support "auto address increment mode",if only the cpu countinuously read or write base address pointer of the data buffer. I don't know whether my guess is right. ///////////////////////////////////////////////////////////////////////// I did add some debug messages in the code. I switched on debug, and got bellow messages: .. usb.c: registered new driver hub usb.c: new USB bus registered, assigned bus number 1 hc_sl811.c: USB SL811 at 7604000, addr2 = 7605000, IRQ 1 Product: USB SL811HS Root Hub SerialNumber: 0 hub.c: USB hub found hub.c: 1 port detected usbdfu.c: USB Device Fimware Upgrade (DFU) handler v0.10 usb.c: registered new driver usbdfu at76c503.c: Generic Atmel at76c503/at76c505 routines v0.10 at76c503-i3861.c: Atmel at76c503 (Intersil 3861) Wireless LAN Driver v0.10 usb.c: registered new driver at76c503-i3861 />dmesg //plugged atmel usb-wlan in /> hc_sl811.c: master,full speed control registers of sl811h addr: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 value: 00 10 08 0c 00 01 31 00 00 11 37 00 37 92 20 8f hub.c: new USB device sl811-1, assigned address 2 usbdfu.c: Downloading firmware for USB device 2... usbdfu.c: do_dfu_download: ctx = 29f000 @@lhj usbdfu.c: do_dfu_download:dfu_state = 3 usbdfu.c: STATE_DFU_DOWNLOAD_SYNC @@lhj usbdfu.c: do_dfu_download:dfu_state = 5 usbdfu.c: DOWNLOAD... usbdfu.c: DFU IDLE usbdfu.c: dfu_download_block(): buffer=001c8aec, bytes=1024, block=15 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x128, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x290, urb_state=0x1 @@lhj usbdfu.c: do_dfu_download:dfu_state = 3 usbdfu.c: STATE_DFU_DOWNLOAD_SYNC @@lhj usbdfu.c: do_dfu_download:dfu_state = 5 usbdfu.c: DOWNLOAD... usbdfu.c: DFU IDLE usbdfu.c: dfu_download_block(): buffer=001c8eec, bytes=1024, block=16 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x110, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x288, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x3e0, urb_state=0x1 @@lhj usbdfu.c: do_dfu_download:dfu_state = 3 usbdfu.c: STATE_DFU_DOWNLOAD_SYNC @@lhj usbdfu.c: do_dfu_download:dfu_state = 5 usbdfu.c: DOWNLOAD... usbdfu.c: DFU IDLE usbdfu.c: dfu_download_block(): buffer=001c92ec, bytes=1024, block=17 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x1f8, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x368, urb_state=0x1 @@lhj usbdfu.c: do_dfu_download:dfu_state = 3 usbdfu.c: STATE_DFU_DOWNLOAD_SYNC @@lhj usbdfu.c: do_dfu_download:dfu_state = 5 usbdfu.c: DOWNLOAD... usbdfu.c: DFU IDLE usbdfu.c: dfu_download_block(): buffer=001c96ec, bytes=1024, block=18 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x158, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x158, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x158, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 @@lhj usbdfu.c: do_dfu_download:dfu_state = 3 usbdfu.c: STATE_DFU_DOWNLOAD_SYNC @@lhj usbdfu.c: do_dfu_download:dfu_state = 5 usbdfu.c: DOWNLOAD... usbdfu.c: DFU IDLE usbdfu.c: dfu_download_block(): buffer=001c9aec, bytes=1024, block=19 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x60, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x140, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x270, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 @@lhj usbdfu.c: do_dfu_download:dfu_state = 3 usbdfu.c: STATE_DFU_DOWNLOAD_SYNC @@lhj usbdfu.c: do_dfu_download:dfu_state = 5 usbdfu.c: DOWNLOAD... usbdfu.c: DFU IDLE usbdfu.c: dfu_download_block(): buffer=001c9eec, bytes=1024, block=20 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x0, urb_state=0x2 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x180, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x400, actual_len=0x2f0, urb_state=0x1 @@lhj usbdfu.c: do_dfu_download:dfu_state = 3 usbdfu.c: STATE_DFU_DOWNLOAD_SYNC @@lhj usbdfu.c: do_dfu_download:dfu_state = 5 usbdfu.c: DOWNLOAD... usbdfu.c: DFU IDLE usbdfu.c: dfu_download_block(): buffer=001ca2ec, bytes=724, block=21 done_list: packet err, cc=0x4, urb->length=0x2d4, actual_len=0x118, urb_state=0x1 @@lhj usbdfu.c: do_dfu_download:dfu_state = 3 usbdfu.c: STATE_DFU_DOWNLOAD_SYNC @@lhj usbdfu.c: do_dfu_download:dfu_state = 5 usbdfu.c: DOWNLOAD... usbdfu.c: DFU IDLE usbdfu.c: dfu_download_block(): buffer=001ca5c0, bytes=0, block=22 done_list: packet err, cc=0xc, urb->length=0x1, actual_len=0x1, urb_state=0x0 @@lhj usbdfu.c: do_dfu_download:dfu_state = 6 usbdfu.c: STATE_DFU_MANIFEST_SYNC usbdfu.c: DFU: Waiting for manifest phase @@lhj usbdfu.c: do_dfu_download:dfu_state = 7 usbdfu.c: STATE_DFU_MANIFEST @@lhj usbdfu.c: usbdfu_download: ret from do_dfu_download = 0 @@lhj usbdfu.c: usbdfu_download: ret from post_download_hook = 0 usbdfu.c: sem &dev->sem up usbdfu.c: sem &usbdfu_lock up usbdfu.c: usbdfu_probe() exiting usb.c: usbdfu driver claimed interface 0020a960 @@lhj rejected = 0x 0 usbdfu.c: kevent 2 scheduled usbdfu.c: kevent entered usbdfu.c: sem &dev->sem down usbdfu.c: sem &dev->sem up usbdfu.c: usbdfu_disconnect called usbdfu.c: sem &dev->sem down usbdfu.c: sem &dev->sem up usbdfu.c: USB DFU now disconnected usbdfu.c: resetting device hub.c: port 1, portstatus 103, change 10, 12 Mb/s hc_simple.c:done_list: packet err, cc=0xc, urb->length=0x0, actual_len=0x0, urb_state=0x2 hc_simple.c:done_list: packet err, cc=0xc, urb->length=0x0, actual_len=0x0, urb_state=0x2 hc_simple.c:done_list: packet err, cc=0xc, urb->length=0x0, actual_len=0x0, urb_state=0x2 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0xc hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: packet err, cc=0x4, urb->length=0x12, actual_len=0x0, urb_state=0x1 hc_simple.c:done_list: excessive error: errcount = 0x4, cc = 0x4 hub.c: USB device descriptor short read (expected 18, got 0) usbdfu.c: scanning unclaimed devices @@lhj enter usb_find_interface_driver @@lhj enter usb_interface_claimed @@lhj usb_interface_claimed !=0,goto out_err regards, liuhengjie [email protected] 2003-07-31