w8997 driver Rx error under SDR104 in imx6ull

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

w8997 driver Rx error under SDR104 in imx6ull

3,139 次查看
changbaoma
Contributor IV

Hi, Experts

I use w8997 in our custom imx6ull board.

The version of w8997 wifi driver is SD-WLAN-SD-BT-8997-U16-MMC-W16.68.10.p137-16.26.10.p137-C4X16687_V4-MGPL.

Linux Kernel is v5.4.x form NXP.

 

In my test,  a iperf3 server run at a PC and iperf3 client run at my board.

root@root:~# dmesg | grep mmc0

[ 50.336795] mmc0: SDHCI controller on 2190000.usdhc [2190000.usdhc] using ADMA
[ 50.480649] mmc0: new ultra high speed SDR104 SDIO card at address 0001

root@root:~# cat /sys/kernel/debug/mmc0/ios
clock: 132000000 Hz
actual clock: 132000000 Hz
vdd: 21 (3.3 ~ 3.4 V)
bus mode: 2 (push-pull)
chip select: 0 (don't care)
power mode: 2 (on)
bus width: 2 (4 bits)
timing spec: 6 (sd uhs SDR104)
signal voltage: 1 (1.80 V)
driver type: 0 (driver type B)
root@root:~#

 

Wifi seems work well in Tx mode:

root@root:~# iperf3 -c 192.168.3.10 -t 3600
Connecting to host 192.168.3.10, port 5201
[ 5] local 192.168.3.3 port 59052 connected to 192.168.3.10 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 9.54 MBytes 80.1 Mbits/sec 2 91.9 KBytes
[ 5] 1.00-2.00 sec 11.1 MBytes 92.8 Mbits/sec 0 158 KBytes
[ 5] 2.00-3.00 sec 11.2 MBytes 94.4 Mbits/sec 0 204 KBytes
[ 5] 3.00-4.00 sec 10.9 MBytes 91.7 Mbits/sec 0 211 KBytes
[ 5] 4.00-5.00 sec 11.5 MBytes 96.4 Mbits/sec 0 212 KBytes
[ 5] 5.00-6.00 sec 10.9 MBytes 91.7 Mbits/sec 0 212 KBytes
...
[ 5] 3597.00-3598.00 sec 11.5 MBytes 96.5 Mbits/sec 0 212 KBytes
[ 5] 3598.00-3599.00 sec 11.5 MBytes 96.4 Mbits/sec 0 212 KBytes
[ 5] 3599.00-3600.00 sec 11.5 MBytes 96.4 Mbits/sec 0 212 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-3600.00 sec 39.9 GBytes 95.3 Mbits/sec 87 sender
[ 5] 0.00-3600.00 sec 39.9 GBytes 95.3 Mbits/sec receiver

iperf Done.

 

root@root:~# iw dev wlan0 link
Connected to f8:9a:78:06:b6:24 (on wlan0)
SSID: mcb
freq: 5745
RX: 201221200 bytes (3868110 packets)
TX: 1891552768 bytes (29726521 packets)
signal: -31 dBm
tx bitrate: 866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2

bss flags: short-preamble short-slot-time
dtim period: 1
beacon int: 100
root@root:~#
root@root:~# iw dev
phy#0
Interface wfd0
ifindex 10
wdev 0x3
addr 22:4e:f6:bb:18:8b
type managed
txpower 24.00 dBm
Interface uap0
ifindex 9
wdev 0x2
addr 20:4e:f6:bb:19:8b
type AP
txpower 24.00 dBm
Interface wlan0
ifindex 8
wdev 0x1
addr 20:4e:f6:bb:18:8b
ssid mcb
type managed
channel 149 (5745 MHz), width: 80 MHz, center1: 5775 MHz
txpower 24.00 dBm

root@root:~#
root@root:~# iwconfig wlan0
wlan0 IEEE 802.11-DS ESSID:"mcb" [33]
Mode:Managed Frequency=5.745 GHz Access Point: F8:9A:78:06:B6:24
Bit Rate:867 Mb/s Tx-Power=24 dBm
Retry limit:9 RTS thr=2347 B Fragment thr=2346 B
Encryption key:****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-****-**** Security mode:open
Power Management:on
Link Quality=5/5 Signal level=-34 dBm Noise level=-88 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:241101
Tx excessive retries:473940 Invalid misc:56 Missed beacon:0

 

But Wifi driver error in Rx mode:

root@root:~# iperf3 -c 192.168.3.10 -R
Connecting to host 192.168.3.10, port 5201
Reverse mode, remote host 192.168.3.10 is sending
[ 5] local 192.168.3.3 port 50648 connected to 192.168.3.10 port 5201
[ 77.162380] CMD53 read cmd_error = 0 data_error=-84
[ 77.208559] wlan: sdio mp cmd53 read failed: -1 ioport=0x11f1b retry=0
[ 77.256524] Set Term cmd53 failed
[ 77.301380] CMD53 read cmd_error = -84 data_error=-84
[ 77.347513] wlan: sdio mp cmd53 read failed: -1 ioport=0x11f1b retry=1
[ 77.395495] Set Term cmd53 failed
[ 77.440367] CMD53 read cmd_error = -84 data_error=-84
[ 77.487207] wlan: sdio mp cmd53 read failed: -1 ioport=0x11f1b retry=2
[ 77.535678] Set Term cmd53 failed
[ 77.539105] Card to host failed: int status=0x1
[ 77.585934] read CFG reg failed
[ 77.630353] write CFG reg failed
[ 77.675476] read CFG reg failed
[ 77.720526] cmd53 write error=-84
[ 77.765404] host_to_card, write iomem (1) failed: -1
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 99.0 KBytes 810 Kbits/sec
[ 77.811588] write CFG reg failed
[ 77.856593] cmd53 write error=-84
[ 77.901291] host_to_card, write iomem (2) failed: -1
[ 77.947441] write CFG reg failed
[ 77.992493] cmd53 write error=-84
[ 78.037450] host_to_card, write iomem (3) failed: -1
[ 78.083572] write CFG reg failed
[ 78.086893] Error: host_to_card failed: 0xFFFFFFFF
[ 78.134450] cmd53 read error=-84
[ 78.179354] moal_read_data_sync: read registers failed
[ 5] 1.00-2.00 sec 0.00 Bytes 0.00 bits/sec
^C- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-2.02 sec 0.00 Bytes 0.00 bits/sec sender
[ 5] 0.00-2.02 sec 99.0 KBytes 401 Kbits/sec receiver
[ 78.841953] cmd53 write error=-84
[ 78.889680] host_to_card, write iomem (1) failed: -1
[ 78.938396] write CFG reg failed

 

Any idea?

Thank you in advance.

 

0 项奖励
回复
3 回复数

3,132 次查看
igorpadykov
NXP Employee
NXP Employee

Hi Changbao

 

for w8997 recommended to use revisions described in nxp  i.MX Linux User’s Guide​

sect.11.3 NXP Bluetooth/Wi-Fi information :

SDIO-UART W8997 Firmware version: 16.92.10.p219.3

Driver version: MXM5X17266.P4-MGPL

Driver is described in sect.4.13 Wi-Fi   i.MX Linux Reference Manual​

 

Best regards
igor

0 项奖励
回复

2,973 次查看
changbaoma
Contributor IV

@igorpadykov , any suggestion?

0 项奖励
回复

3,004 次查看
changbaoma
Contributor IV

Hello, @igorpadykov 

Recently, I have upgrade w8997 driver mxm_wifiex version to mxm5x17283.p2, and sdio firmware version to  16.92.10.p219.5 as below:

wlan: version = SD8997----16.92.10.p219.5-MM5X17283.p2-GPL-(FP92)

 

But remain output lots of CMD53 error during doing iperf3 test:

[ 459.646812] cmd53 read error=-84
[ 459.673152] wlan: cmd53 read failed: -1 ioport=0x10018 retry=0
[ 460.302350] cmd53 read error=-84
[ 460.328026] wlan: cmd53 read regs failed: -1 port=0 retry=0
[ 460.335778] wlan: mp_data_port_mask = 0xffffffff
[ 460.340670] wlan: HW wr_bitmap=0x80007fff Host: wr_bitmap=0x00000000
[ 460.348443] wlan: HW rd_bitmap=0x00080000 Host: rd_bitmap=0x00000000
[ 460.354817] wlan: cmd rx buffer rx_len = 256
[ 460.360527] wlan: HW sdio_ireg = 0x1
[ 460.364124] wlan: recovered sdio_ireg=0x43
[ 460.819050] CMD53 read cmd_error = 0 data_error=-84
[ 460.847331] wlan: sdio mp cmd53 read failed: -1 ioport=0x11200 retry=0
[ 461.272553] CMD53 read cmd_error = 0 data_error=-84
[ 461.300251] wlan: sdio mp cmd53 read failed: -1 ioport=0x1110a retry=0
[ 462.350859] cmd53 read error=-84
[ 462.377111] wlan: cmd53 read failed: -1 ioport=0x10016 retry=0
[ 462.784169] cmd53 read error=-84
[ 462.809575] wlan: cmd53 read failed: -1 ioport=0x10009 retry=0
[ 464.817860] cmd53 read error=-84
[ 464.845589] wlan: cmd53 read regs failed: -1 port=0 retry=0
[ 464.851560] wlan: mp_data_port_mask = 0xffffffff
[ 464.856204] wlan: HW wr_bitmap=0x001fffe0 Host: wr_bitmap=0x00000000
[ 464.865693] wlan: HW rd_bitmap=0x00000010 Host: rd_bitmap=0x00000000
[ 464.873790] wlan: cmd rx buffer rx_len = 256
[ 464.879700] wlan: HW sdio_ireg = 0x81
[ 464.883397] wlan: recovered sdio_ireg=0xc3
[ 465.459512] cmd53 read error=-84
[ 465.484958] wlan: cmd53 read failed: -1 ioport=0x1001f retry=0
[ 465.826191] cmd53 read error=-84
[ 465.856708] wlan: cmd53 read regs failed: -1 port=0 retry=0
[ 465.862797] wlan: mp_data_port_mask = 0xffffffff
[ 465.871530] wlan: HW wr_bitmap=0x0003fffc Host: wr_bitmap=0x00000000
[ 465.880614] wlan: HW rd_bitmap=0x00000020 Host: rd_bitmap=0x00000000
[ 465.889973] wlan: cmd rx buffer rx_len = 256
[ 465.894303] wlan: HW sdio_ireg = 0x81
[ 465.901809] wlan: recovered sdio_ireg=0xc3

Some times this error lead to wifi connect exit, or system hang.

It seams this error only happen when W8997 act as a ultra high speed SDR104 SDIO card. (sdio is 1.8v)

 

if I change my usdhc1 dts to act as a high speed SDIO card(sdio is 3.3v) and it seams work well without  "cmd53 xx error=-84", see below:

/* WIFI SDIO */
fragment@1 {
target = <&usdhc1>;
__overlay__ {
pinctrl-names = "default", "state_100mhz", "state_200mhz";
pinctrl-0 = <&pinctrl_usdhc1>;
pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
non-removable;
+//no-1-8-v;
keep-power-in-suspend;
wakeup-source;
+//sd-uhs-sdr104;
status = "okay";
};
};

Any suggestion?

0 项奖励
回复