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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.