Questions on libertas driver
Cyril HAENEL
chaenel at free.fr
Mon Jan 28 10:54:25 EST 2008
I become crazy !! :)
But I continue to have kernel Oops with non aligned data.
The kernel panic happen when I use iwconfig to change the essid. When I
use essid "any", we can some communication between the driver and the
card, but when I use essid "a3ipWifi", It hangs directly.
Log with essid "any" :
root:~> iwconfig eth0 essid "any"
root:~> flags: 0x00000002
SSID: '<hidden>'
chann: 1
band: 0
mode: 2
BSSID: 00:00:00:00:00:00
secinfo:
auth_mode: 1
libertas SCAN_CMD: 03 00 00 00 00 00 00
libertas SCAN_TLV: 01 01 1c 00 00 01 00 00 00 64 00 00 02 00 00 00
libertas SCAN_TLV: 64 00 00 03 00 00 00 64 00 00 04 00 00 00 64 00
libertas SCAN_TLV: 01 00 0c 00 82 84 8b 96 0c 12 18 24 30 48 60 6c
libertas DNLD_CMD: 06 00 3f 00 0a 00 00 00 03 00 00 00 00 00 00 01
libertas DNLD_CMD: 01 1c 00 00 01 00 00 00 64 00 00 02 00 00 00 64
libertas DNLD_CMD: 00 00 03 00 00 00 64 00 00 04 00 00 00 64 00 01
libertas DNLD_CMD: 00 0c 00 82 84 8b 96 0c 12 18 24 30 48 60 6c
libertas CMD_RESP: 06 80 0b 00 0a 00 00 00 00 00 00
libertas SCAN_CMD: 03 00 00 00 00 00 00
libertas SCAN_TLV: 01 01 1c 00 00 05 00 00 00 64 00 00 06 00 00 00
libertas SCAN_TLV: 64 00 00 07 00 00 00 64 00 00 08 00 00 00 64 00
libertas SCAN_TLV: 01 00 0c 00 82 84 8b 96 0c 12 18 24 30 48 60 6c
libertas DNLD_CMD: 06 00 3f 00 0b 00 00 00 03 00 00 00 00 00 00 01
libertas DNLD_CMD: 01 1c 00 00 05 00 00 00 64 00 00 06 00 00 00 64
libertas DNLD_CMD: 00 00 07 00 00 00 64 00 00 08 00 00 00 64 00 01
libertas DNLD_CMD: 00 0c 00 82 84 8b 96 0c 12 18 24 30 48 60 6c
libertas CMD_RESP: 06 80 0b 00 0b 00 00 00 00 00 00
libertas SCAN_CMD: 03 00 00 00 00 00 00
libertas SCAN_TLV: 01 01 1c 00 00 09 00 00 00 64 00 00 0a 00 00 00
libertas SCAN_TLV: 64 00 00 0b 00 00 00 64 00 00 0c 00 00 00 64 00
libertas SCAN_TLV: 01 00 0c 00 82 84 8b 96 0c 12 18 24 30 48 60 6c
libertas DNLD_CMD: 06 00 3f 00 0c 00 00 00 03 00 00 00 00 00 00 01
libertas DNLD_CMD: 01 1c 00 00 09 00 00 00 64 00 00 0a 00 00 00 64
libertas DNLD_CMD: 00 00 0b 00 00 00 64 00 00 0c 00 00 00 64 00 01
libertas DNLD_CMD: 00 0c 00 82 84 8b 96 0c 12 18 24 30 48 60 6c
libertas CMD_RESP: 06 80 57 00 0c 00 00 00 40 00 01 3e 00 00 18 4d
libertas CMD_RESP: 39 e3 e8 51 38 92 eb 23 00 00 00 00 64 00 01 04
libertas CMD_RESP: 00 08 61 33 69 70 57 69 66 69 01 08 82 84 8b 96
libertas CMD_RESP: 24 30 48 6c 03 01 0b 2a 01 04 2f 01 04 32 04 0c
libertas CMD_RESP: 12 18 60 dd 06 00 10 18 02 00 f0 13 01 08 00 f0
libertas CMD_RESP: 41 27 01 00 00 00 00
libertas process_bss: IE info: 00 08 61 33 69 70 57 69 66 69 01 08 82 84
8b 96
libertas process_bss: IE info: 24 30 48 6c 03 01 0b 2a 01 04 2f 01 04 32
04 0c
libertas process_bss: IE info: 12 18 60 dd 06 00 10 18 02 00 f0
libertas SCAN_CMD: 03 00 00 00 00 00 00
libertas SCAN_TLV: 01 01 0e 00 00 0d 00 00 00 64 00 00 0e 00 00 00
libertas SCAN_TLV: 64 00 01 00 0c 00 82 84 8b 96 0c 12 18 24 30 48
libertas SCAN_TLV: 60 6c
libertas DNLD_CMD: 06 00 31 00 0d 00 00 00 03 00 00 00 00 00 00 01
libertas DNLD_CMD: 01 0e 00 00 0d 00 00 00 64 00 00 0e 00 00 00 64
libertas DNLD_CMD: 00 01 00 0c 00 82 84 8b 96 0c 12 18 24 30 48 60
libertas DNLD_CMD: 6c
libertas CMD_RESP: 06 80 0b 00 0d 00 00 00 00 00 00
Data access misaligned address violation
- Attempted misaligned data memory or data cache access.
Kernel OOPS in progress
Defered Exception context
No Valid process in current context
return address: [0x00750b9a]; contents of:
0x00750b70: e530 0025 0c40 1402 252d e530 0025 9941
0x00750b80: 4348 0c00 15e9 6018 e6b0 0037 e530 0025
0x00750b90: e14a 0075 e10a c847 6c08 [9440] e730 0025
0x00750ba0: 9442 e730 0025 9543 6fd8 e730 0025 9551
SEQUENCER STATUS:
SEQSTAT: 00000024 IPEND: 8030 SYSCFG: 0006
HWERRCAUSE: 0x0
EXCAUSE : 0x24
physical IVG15 asserted : <0xffa01008> { _evt_system_call + 0x0 }
logical irq 6 mapped : <0xffa00168> { _timer_interrupt + 0x0 }
logical irq 18 mapped : <0x00086754> { _bfin_serial_dma_rx_int + 0x0 }
logical irq 19 mapped : <0x00086540> { _bfin_serial_dma_tx_int + 0x0 }
logical irq 68 mapped : <0x004a0eac> { :libertas_cs:_if_cs_interrupt
+ 0x0 }
RETE: <0x00000000> /* Maybe null pointer? */
RETN: <0x004bfe08> /* unknown address */
RETX: <0x00750b9a> { :libertas:_lbs_scan_networks + 0x6e }
RETS: <0x007514de> { :libertas:_lbs_scan_networks + 0x9b2 }
PC : <0x00750b9a> { :libertas:_lbs_scan_networks + 0x6e }
DCPLB_FAULT_ADDR: <0x004bfe9c> /* unknown address */
ICPLB_FAULT_ADDR: <0x00750b9a> { :libertas:_lbs_scan_networks + 0x6e }
PROCESSOR STATE:
R0 : 00000003 R1 : 00000000 R2 : 0000001f R3 : 0000001f
R4 : 00000000 R5 : 00000008 R6 : 00000008 R7 : 0075fe08
P0 : 004bfeb1 P1 : 00158cd4 P2 : 0075c847 P3 : 01eca380
P4 : 01ed1004 P5 : 007678b0 FP : 004bfe74 SP : 004bfd2c
LB0: ffa01954 LT0: ffa01952 LC0: 00000000
LB1: 00078582 LT1: 00078574 LC1: 00000000
B0 : 00000000 L0 : 00000000 M0 : 00000000 I0 : 01efa848
B1 : 00000000 L1 : 00000000 M1 : 00000000 I1 : 00000000
B2 : 00000000 L2 : 00000000 M2 : 00000000 I2 : fffefe2b
B3 : 00000000 L3 : 00000000 M3 : 00000000 I3 : 00000000
A0.w: 000000a0 A0.x: 00000000 A1.w: 000000a0 A1.x: 00000000
USP : 00000000 ASTAT: 02003025
Stack from 004bfd10:
00000400 ffa00918 00158788 00158788 00000000 0000000a 0000c680
00750b9a
00008030 00000024 00000000 004bfe08 00750b9a 00750b9a 007514de
00000003
02003025 00078582 ffa01954 00078574 ffa01952 00000000 00000000
000000a0
00000000 000000a0 00000000 00000000 00000000 00000000 00000000
00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000
fffefe2b 00000000 01efa848 00000000 004bfe74 007678b0 01ed1004
01eca380
Call Trace:
[<0000c680>] _release_console_sem+0x17c/0x23c
[<0000df5e>] _do_wait+0x40e/0x820
[<00078c5a>] _vscnprintf+0x16/0x24
[<0000c1a2>] _vprintk+0x19a/0x2f0
[<0000ffff>] _tasklet_kill+0x4f/0x80
[<0000c30a>] _printk+0x12/0x18
[<00751a18>] _lbs_send_specific_ssid_scan+0xd4/0x140 [libertas]
[<0075ae1c>] _lbs_association_worker+0x170c/0x1948 [libertas]
[<000087fe>] ___activate_task+0x1a/0x34
[<00017d4c>] _run_workqueue+0x6c/0x12c
[<00759710>] _lbs_association_worker+0x0/0x1948 [libertas]
[<0001863a>] _worker_thread+0x8a/0xa4
[<0001861e>] _worker_thread+0x6e/0xa4
[<0001aec4>] _autoremove_wake_function+0x0/0x30
[<0001aaf4>] _kthread+0x50/0x64
[<000185b0>] _worker_thread+0x0/0xa4
[<00001686>] _kernel_thread_helper+0x6/0xc
Please turn on CONFIG_ACCESS_CHECK
Kernel panic - not syncing: Kernel exception
Log with essid "a3ipWifi" :
root:~> iwconfig eth0 essid "a3ipWifi"
root:~> flags: 0x00000002
SSID: 'a3ipWifi'
chann: 1
band: 0
mode: 2
BSSID: 00:00:00:00:00:00
secinfo:
auth_mode: 1
Data access misaligned address violation
- Attempted misaligned data memory or data cache access.
Kernel OOPS in progress
Defered Exception context
No Valid process in current context
return address: [0x00750b9a]; contents of:
0x00750b70: e530 0025 0c40 1402 252d e530 0025 9941
0x00750b80: 4348 0c00 15e9 6018 e6b0 0037 e530 0025
0x00750b90: e14a 0075 e10a c847 6c08 [9440] e730 0025
0x00750ba0: 9442 e730 0025 9543 6fd8 e730 0025 9551
SEQUENCER STATUS:
SEQSTAT: 00000024 IPEND: 8030 SYSCFG: 0006
HWERRCAUSE: 0x0
EXCAUSE : 0x24
physical IVG15 asserted : <0xffa01008> { _evt_system_call + 0x0 }
logical irq 6 mapped : <0xffa00168> { _timer_interrupt + 0x0 }
logical irq 18 mapped : <0x00086754> { _bfin_serial_dma_rx_int + 0x0 }
logical irq 19 mapped : <0x00086540> { _bfin_serial_dma_tx_int + 0x0 }
logical irq 68 mapped : <0x00734eac> { :libertas_cs:_if_cs_interrupt + 0x0 }
RETE: <0x00000000> /* Maybe null pointer? */
RETN: <0x004a5e08> /* unknown address */
RETX: <0x00750b9a> { :libertas:_lbs_scan_networks + 0x6e }
RETS: <0x007514de> { :libertas:_lbs_scan_networks + 0x9b2 }
PC : <0x00750b9a> { :libertas:_lbs_scan_networks + 0x6e }
DCPLB_FAULT_ADDR: <0x004a5e9c> /* unknown address */
ICPLB_FAULT_ADDR: <0x00750b9a> { :libertas:_lbs_scan_networks + 0x6e }
PROCESSOR STATE:
R0 : 00000003 R1 : 00000000 R2 : 0000001f R3 : 0000001f
R4 : 00000000 R5 : 00000008 R6 : 00000008 R7 : 0075fe08
P0 : 004a5eb1 P1 : 00158cd4 P2 : 0075c847 P3 : 004a2380
P4 : 00727004 P5 : 007678b0 FP : 004a5e74 SP : 004a5d2c
LB0: ffa01954 LT0: ffa01952 LC0: 00000000
LB1: 00078582 LT1: 00078574 LC1: 00000000
B0 : 00000000 L0 : 00000000 M0 : 00000000 I0 : 001eee10
B1 : 00000000 L1 : 00000000 M1 : 00000000 I1 : 00000000
B2 : 00000000 L2 : 00000000 M2 : 00000000 I2 : ffff5f92
B3 : 00000000 L3 : 00000000 M3 : 00000000 I3 : 00000000
A0.w: 000000a0 A0.x: 00000000 A1.w: 000000a0 A1.x: 00000000
USP : 00000000 ASTAT: 02003025
Stack from 004a5d10:
00000400 ffa00918 00158788 00158788 00000000 0000000a 0000c680 00750b9a
00008030 00000024 00000000 004a5e08 00750b9a 00750b9a 007514de 00000003
02003025 00078582 ffa01954 00078574 ffa01952 00000000 00000000 000000a0
00000000 000000a0 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
ffff5f92 00000000 001eee10 00000000 004a5e74 007678b0 00727004 004a2380
Call Trace:
[<0000ffff>] _tasklet_kill+0x4f/0x80
[<0000ffff>] _tasklet_kill+0x4f/0x80
[<0000c30a>] _printk+0x12/0x18
[<00751a18>] _lbs_send_specific_ssid_scan+0xd4/0x140 [libertas]
[<0075ae1c>] _lbs_association_worker+0x170c/0x1948 [libertas]
[<0003bacc>] _sys_unlink+0x0/0xc
[<000087fe>] ___activate_task+0x1a/0x34
[<00017d4c>] _run_workqueue+0x6c/0x12c
[<00759710>] _lbs_association_worker+0x0/0x1948 [libertas]
[<0001863a>] _worker_thread+0x8a/0xa4
[<0001861e>] _worker_thread+0x6e/0xa4
[<0001aec4>] _autoremove_wake_function+0x0/0x30
[<0001aaf4>] _kthread+0x50/0x64
[<000185b0>] _worker_thread+0x0/0xa4
[<00001686>] _kernel_thread_helper+0x6/0xc
Please turn on CONFIG_ACCESS_CHECK
Kernel panic - not syncing: Kernel exception
To test, I added the get_unaligned() function into all le16_to_cpu()
function !! But same kernel panic...
From the log I think the problem come from lbs_scan_networks(), but I
am unsure and I don't see what can be the problem.
Any idea ?
Regards,
Cyril
Holger Schurig a écrit :
>>libertas DNLD_CMD: 03 00 2e 00 02 00 00 00 00 00 00 00 00 00 00 00
>>libertas DNLD_CMD: ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00
>>libertas DNLD_CMD: 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>##inw 00000020<0005
>>##outw 00000018>002e
>>##outsw 0000001a>(0x17 words)
>>##outw 00000000>0004
>>##outw 00000002>0004
>>root:~> libertas: Command 3 timed out
>>libertas: requeueing command 3 due to timeout (#1)
>>
>>
>
>Your card doesn't generate an interrupt.
>
>After the last "##outw 00000002>0004" the driver is finished so far.
>Then the driver waits until the card interrupts back -- or the driver
>moans about a time out.
>
>Here's a relevant from this driver, talking to my CF card:
>
>libertas enter: lbs_submit_command():1166
>libertas cmd: DNLD_CMD: command 0x0003, seq 2, size 46, jiffies 578632
>libertas DNLD_CMD: 03 00 2e 00 02 00 00 00 00 00 00 00 00 00 00 00
>libertas DNLD_CMD: ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00
>libertas DNLD_CMD: 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>libertas_cs enter: if_cs_host_to_card(type 1, bytes 46):622
>libertas_cs enter: if_cs_send_cmd():290
>##inw 00000020<0005
>
>This are bits IF_CS_C_S_TX_DNLD_RDY and IF_CS_C_S_CMD_DNLD_RDY. So we can
>download a command. Which we do. First the length, then the data:
>
>##outw 00000018>002e
>##outsw 0000001a>(0x17 words)
>
>0x17 * 2 = 0x2e, so this seems all fine. So we poke
>IF_CS_H_STATUS_DNLD_OVER into the host status register
>
>##outw 00000000>0004
>
>and create an interrupt on on the embedded ARM processor:
>
>##outw 00000002>0004
>libertas_cs leave: if_cs_send_cmd():321, ret 0
>libertas_cs leave: if_cs_host_to_card():638, ret 0
>libertas leave: lbs_submit_command():1199
>libertas leave: lbs_execute_next_command():1879
>libertas thread: main-thread 111: intcounter=0 currenttxskb=00000000 dnld_sent=2
>libertas thread: main-thread sleeping... Conn=1 IntC=0 PS_mode=0 PS_State=0
>
>... and then we have to wait until we get an interrupt. Here it comes:
>
>libertas_cs enter (INT): if_cs_interrupt():249
>##inw 00000022<0008
>##outw 00000022>0008
>libertas enter (INT): lbs_interrupt():1464
>libertas thread (INT): lbs_interrupt: intcounter=0
>libertas leave (INT): lbs_interrupt():1472
>libertas thread: main-thread 222 (waking up): intcounter=1 currenttxskb=00000000 dnld_sent=2
>libertas thread: main-thread 333: intcounter=1 currenttxskb=00000000 dnld_sent=2
>libertas_cs enter: if_cs_get_int_status():650
>
>Read the int cause (IF_CS_C_S_CMD_UPLD_RDY) and clear it:
>
>##inw 00000022<0000
>##outw 00000022>0000
>
>Forgot about this now:
>
>##inw 00000020<000d
>libertas_cs enter: if_cs_receive_cmdres():357
>##inw 00000020<000d
>
>
>Read the data back (e.g. MAC adress of the card etc):
>
>##inw 00000030<0036
>##insw 00000012<(0x1b words)
>libertas_cs leave: if_cs_receive_cmdres():382, ret 0, len 46
>libertas_cs leave: if_cs_get_int_status():684, ret 0, ireg 0xd, hisregcpy 0x0
>libertas thread: main-thread 444: intcounter=0 currenttxskb=00000000 dnld_sent=0
>libertas thread: main-thread: cmd response ready
>libertas enter: lbs_process_rx_command():473
>libertas cmd: CMD_RESP: response 0x8003, seq 2, size 46, jiffies 578632
>libertas CMD_RESP: 03 80 2e 00 02 00 00 00 02 00 13 02 08 00 40 00
>libertas CMD_RESP: 00 16 41 72 f6 a8 40 30 01 00 10 00 05 00 00 00
>libertas CMD_RESP: 00 00 00 00 00 00 00 00 00 00 03 03 00 00
>libertas leave: lbs_process_rx_command():625, ret 0
>libertas enter: lbs_execute_next_command():1744
>libertas leave: lbs_execute_next_command():1879
>
>
>
>So, basically you don't get an interrupt. MAYBE it's
>because of the PCMCIA subsystem (your kernel is way older).
>Be my guest to look into if_cs_probe(), this is where this
>happens.
>
>For me, the PCMCIA stuff was a little opaque. Part of the
>code I wrote by looking at other drivers, part by trying
>and part by peeking into drivers/pcmcia/cs.c, ds.c, etc.
>
>_______________________________________________
>libertas-dev mailing list
>libertas-dev at lists.infradead.org
>http://lists.infradead.org/mailman/listinfo/libertas-dev
>
>
>
>
--
Cyril Haenel
Registered Linux User #332632
More information about the libertas-dev
mailing list