BCM4343W Linux kernel 4.4.1 driver

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Anonymous
Not applicable

We are developing a custom board based on AM3351 and BCM4343W module. Our Linux BSP is based on 4.4.1 kernel,but I'm facing some error.

I enabled the broadcom driver and  configured the dts as follow

&mmc2 {
status = "okay";
vmmc-supply = <&vmmc_reg>;
bus-width = <4>;
pinctrl-names = "default";
pinctrl-0 = <&mmc2_pins_default>;
ti,non-removable;
ti,needs-special-hs-handling;
cap-power-off-card;
keep-power-in-suspend;

brcmf: bcrmf@1 {
status = "okay";
reg = <1>;
compatible = "brcm,bcm43340-fmac";
};

};

once device booted, I'm able to connect the broadcom wifi to access point and able to get ip address. Also I''m able to ping but in between I'm getting the dma error.

ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100): 56 data bytes
64 bytes from 192.168.1.100: seq=0 ttl=64 time=988.498 ms
64 bytes from 192.168.1.100: seq=1 ttl=64 time=7.694 ms
64 bytes from 192.168.1.100: seq=2 ttl=64 time=250.249 ms
64 bytes from 192.168.1.100: seq=3 ttl=64 time=339.703 ms
64 bytes from 192.168.1.100: seq=4 ttl=64 time=400.491 ms
64 bytes from 192.168.1.100: seq=5 ttl=64 time=459.148 ms
64 bytes from 192.168.1.100: seq=6 ttl=64 time=498.982 ms
64 bytes from 192.168.1.100: seq=7 ttl=64 time=748.227 ms
64 bytes from 192.168.1.100: seq=8 ttl=64 time=807.846 ms
64 bytes from 192.168.1.100: seq=9 ttl=64 time=867.752 ms
64 bytes from 192.168.1.100: seq=10 ttl=64 time=927.145 ms
64 bytes from 192.168.1.100: seq=11 ttl=64 time=986.852 ms
64 bytes from 192.168.1.100: seq=12 ttl=64 time=13.413 ms
64 bytes from 192.168.1.100: seq=13 ttl=64 time=246.074 ms
64 bytes from 192.168.1.100: seq=14 ttl=64 time=306.052 ms
64 bytes from 192.168.1.100: seq=15 ttl=64 time=345.741 ms
64 bytes from 192.168.1.100: seq=16 ttl=64 time=385.357 ms
64 bytes from 192.168.1.100: seq=17 ttl=64 time=425.048 ms
64 bytes from 192.168.1.100: seq=18 ttl=64 time=484.698 ms
64 bytes from 192.168.1.100: seq=19 ttl=64 time=544.552 ms
64 bytes from 192.168.1.100: seq=20 ttl=64 time=604.137 ms
64 bytes from 192.168.1.100: seq=21 ttl=64 time=663.809 ms
64 bytes from 192.168.1.100: seq=22 ttl=64 time=1753.569 ms
64 bytes from 192.168.1.100: seq=23 ttl=64 time=753.921 ms
64 bytes from 192.168.1.100: seq=24 ttl=64 time=813.022 ms
64 bytes from 192.168.1.100: seq=25 ttl=64 time=872.778 ms
64 bytes from 192.168.1.100: seq=26 ttl=64 time=932.389 ms
64 bytes from 192.168.1.100: seq=27 ttl=64 time=992.037 ms
64 bytes from 192.168.1.100: seq=28 ttl=64 time=8.566 ms
64 bytes from 192.168.1.100: seq=29 ttl=64 time=241.322 ms
64 bytes from 192.168.1.100: seq=30 ttl=64 time=301.199 ms
[ 150.400617] omap_hsmmc 481d8000.mmc: MMC start dma failure
[ 150.406301] brcmf_sdiod_sglist_rw: CMD53 sg block write failed -22
[ 150.413672] brcmf_sdio_txfail: sdio error, abort command and terminate frame
64 bytes from 192.168.1.100: seq=32 ttl=64 time=390.718 ms
64 bytes from 192.168.1.100: seq=33 ttl=64 time=450.200 ms
64 bytes from 192.168.1.100: seq=34 ttl=64 time=510.942 ms
64 bytes from 192.168.1.100: seq=35 ttl=64 time=559.477 ms
64 bytes from 192.168.1.100: seq=36 ttl=64 time=619.287 ms
64 bytes from 192.168.1.100: seq=37 ttl=64 time=678.835 ms
64 bytes from 192.168.1.100: seq=38 ttl=64 time=718.629 ms
64 bytes from 192.168.1.100: seq=39 ttl=64 time=778.465 ms
64 bytes from 192.168.1.100: seq=40 ttl=64 time=1004.650 ms
64 bytes from 192.168.1.100: seq=41 ttl=64 time=10.999 ms
64 bytes from 192.168.1.100: seq=42 ttl=64 time=243.885 ms
64 bytes from 192.168.1.100: seq=43 ttl=64 time=303.621 ms
64 bytes from 192.168.1.100: seq=44 ttl=64 time=363.150 ms
64 bytes from 192.168.1.100: seq=45 ttl=64 time=422.981 ms
64 bytes from 192.168.1.100: seq=46 ttl=64 time=482.599 ms
64 bytes from 192.168.1.100: seq=47 ttl=64 time=542.241 ms
64 bytes from 192.168.1.100: seq=48 ttl=64 time=601.993 ms
64 bytes from 192.168.1.100: seq=49 ttl=64 time=661.802 ms
64 bytes from 192.168.1.100: seq=50 ttl=64 time=721.374 ms
64 bytes from 192.168.1.100: seq=51 ttl=64 time=761.107 ms
64 bytes from 192.168.1.100: seq=52 ttl=64 time=800.756 ms
64 bytes from 192.168.1.100: seq=53 ttl=64 time=860.386 ms
64 bytes from 192.168.1.100: seq=54 ttl=64 time=920.059 ms
64 bytes from 192.168.1.100: seq=55 ttl=64 time=979.836 ms
64 bytes from 192.168.1.100: seq=56 ttl=64 time=76.361 ms
64 bytes from 192.168.1.100: seq=57 ttl=64 time=309.258 ms
64 bytes from 192.168.1.100: seq=58 ttl=64 time=368.817 ms
64 bytes from 192.168.1.100: seq=59 ttl=64 time=408.553 ms
64 bytes from 192.168.1.100: seq=60 ttl=64 time=468.503 ms
64 bytes from 192.168.1.100: seq=61 ttl=64 time=507.720 ms
64 bytes from 192.168.1.100: seq=62 ttl=64 time=548.293 ms
[ 182.433832] omap_hsmmc 481d8000.mmc: MMC start dma failure
[ 182.439411] brcmf_sdiod_sglist_rw: CMD53 sg block write failed -22
[ 182.446784] brcmf_sdio_txfail: sdio error, abort command and terminate frame
[ 183.434177] omap_hsmmc 481d8000.mmc: MMC start dma failure
[ 183.439740] brcmf_sdiod_sglist_rw: CMD53 sg block write failed -22
[ 183.446947] brcmf_sdio_txfail: sdio error, abort command and terminate frame
[ 184.434577] omap_hsmmc 481d8000.mmc: MMC start dma failure
[ 184.440142] brcmf_sdiod_sglist_rw: CMD53 sg block write failed -22
[ 184.447354] brcmf_sdio_txfail: sdio error, abort command and terminate frame
64 bytes from 192.168.1.100: seq=66 ttl=64 time=796.402 ms
64 bytes from 192.168.1.100: seq=67 ttl=64 time=863.185 ms
64 bytes from 192.168.1.100: seq=68 ttl=64 time=55.485 ms
64 bytes from 192.168.1.100: seq=69 ttl=64 time=285.458 ms
64 bytes from 192.168.1.100: seq=70 ttl=64 time=365.019 ms
64 bytes from 192.168.1.100: seq=71 ttl=64 time=424.705 ms
64 bytes from 192.168.1.100: seq=72 ttl=64 time=1524.363 ms
64 bytes from 192.168.1.100: seq=73 ttl=64 time=524.570 ms
64 bytes from 192.168.1.100: seq=74 ttl=64 time=583.997 ms
64 bytes from 192.168.1.100: seq=75 ttl=64 time=643.822 ms

Can any one help how to get rid of this error

0 Likes
1 Solution
Anonymous
Not applicable

We don't support brcmfamc yet, but we are looking to start supporting it in the future(no dates yet). We recommend using bcmdhd driver.

Having said that, let me try an help.

The first failure is "omap_hsmmc 481d8000.mmc: MMC start dam failure". I am looking at the OMAP MMC driver source.

Linux/drivers/mmc/host/omap_hsmmc.c - Linux Cross Reference - Free Electrons

The actual failure maybe coming from omap_hsmmc_setup_dma_transfer.

There are several failure cases here. I would start of by adding some debug to this find out which among them is the actual failure.

View solution in original post

0 Likes
13 Replies
MichaelF_56
Moderator
Moderator
Moderator
250 sign-ins 25 comments on blog 10 comments on blog

Adding vsb​ and seyhan​ from the Linux team.

0 Likes
Anonymous
Not applicable

We don't support brcmfamc yet, but we are looking to start supporting it in the future(no dates yet). We recommend using bcmdhd driver.

Having said that, let me try an help.

The first failure is "omap_hsmmc 481d8000.mmc: MMC start dam failure". I am looking at the OMAP MMC driver source.

Linux/drivers/mmc/host/omap_hsmmc.c - Linux Cross Reference - Free Electrons

The actual failure maybe coming from omap_hsmmc_setup_dma_transfer.

There are several failure cases here. I would start of by adding some debug to this find out which among them is the actual failure.

0 Likes
Anonymous
Not applicable

vsb

I will also look in to the OMAP MMC part. Can you provide the latest bcmdhd driver source code.

0 Likes
Anonymous
Not applicable

lovelymanoj

What is the module(Murata module?) that you are using?

0 Likes
Anonymous
Not applicable

I'm using Type IDX module, which has BCM4343w.

0 Likes
Anonymous
Not applicable

After registering with Murata you can get this document "Murata Wi-Fi BT EVK for i.MX6 Linux User Manual 3.0". This has the details of getting the source and instructions to build the module etc.

Thanks,

Venkat

0 Likes
Anonymous
Not applicable

Hi Venkat,

I had already send a mail to murata, but not getting any reply from them. Did you checked on DMA error.

Regards,

Manoj

0 Likes
Anonymous
Not applicable

You can now also get the source from here.

OpenSource release of bcmdhd 141.88

0 Likes
Anonymous
Not applicable

Hi Venkat,

Thanks for your support. Can you please look into misaligned block error that I posted above.

Regards,

Manoj

0 Likes
Anonymous
Not applicable

Manoj,

I think at this point we can  move discussion to a different thread. Please see my reply here.

Re: brcmfamc - OMAP SG entry not aligned with block size

Thanks,

Venkat

Anonymous
Not applicable

Hi Venkat,

I add the below debug print in omap_hsmmc.c.

/* Sanity check: all the SG entries must be aligned by block size. */

        for (i = 0; i < data->sg_len; i++) {

                struct scatterlist *sgl;

                sgl = data->sg + i;

                if (sgl->length % data->blksz){

                        printk("%s Sgl Length %d Data Block Size %d\r\n", __func__, sgl->length, data->blksz);

                        return -EINVAL;

                }

        }

And the output log

omap_hsmmc_setup_dma_transfer Sgl Length 612 Data Block Size 512

[ 1482.295658] omap_hsmmc 47810000.mmc: MMC start dma failure

[ 1482.301200] brcmf_sdiod_sglist_rw: CMD53 sg block write failed -22

[ 1482.308635] brcmf_sdio_txfail: sdio error, abort command and terminate frame

[ 1486.497015] omap_hsmmc_setup_dma_transfer Sgl Length 588 Data Block Size 512

[ 1486.504382] omap_hsmmc 47810000.mmc: MMC start dma failure

[ 1486.509921] brcmf_sdiod_sglist_rw: CMD53 sg block read failed -22

[ 1486.517263] brcmf_sdio_rxglom: glom read of 1536 bytes failed: -5

[ 1486.523634] brcmf_sdio_rxfail: abort command, terminate frame, send NAK

[ 1486.534431] omap_hsmmc_setup_dma_transfer Sgl Length 588 Data Block Size 512

[ 1486.541634] omap_hsmmc 47810000.mmc: MMC start dma failure

[ 1486.547828] brcmf_sdiod_sglist_rw: CMD53 sg block read failed -22

[ 1486.554147] brcmf_sdio_rxglom: glom read of 1536 bytes failed: -5

[ 1486.560291] brcmf_sdio_rxfail: abort command, terminate frame, send NAK

[ 1486.573765] omap_hsmmc_setup_dma_transfer Sgl Length 588 Data Block Size 512

[ 1486.580965] omap_hsmmc 47810000.mmc: MMC start dma failure

[ 1486.587165] brcmf_sdiod_sglist_rw: CMD53 sg block read failed -22

[ 1486.593490] brcmf_sdio_rxglom: glom read of 1536 bytes failed: -5

[ 1486.599633] brcmf_sdio_rxfail: abort command, terminate frame, send NAK

[ 1486.607711] omap_hsmmc_setup_dma_transfer Sgl Length 588 Data Block Size 512

[ 1486.615008] omap_hsmmc 47810000.mmc: MMC start dma failure

[ 1486.620544] brcmf_sdiod_sglist_rw: CMD53 sg block read failed -22

[ 1486.627460] brcmf_sdio_rxglom: glom read of 1536 bytes failed: -5

[ 1486.633754] brcmf_sdio_rxfail: abort command, terminate frame

Do you have any clue why the SG entry not aligned with block size

0 Likes
Anonymous
Not applicable

Could you please tell me, how did you enable the broadcom driver. I mean steps to enable the driver for BCM4343W.

0 Likes

Which Linux partner module are you using?

IoT Solutions Guide

Are you using the BRCM driver that is distributed as part of the i.MX 6 Linux release?

The support model is explained here: Wi-Fi/Bluetooth for Linux and Android​ and here for Murata Linux based modules: Murata Wi-Fi/Bluetooth for Linux and Android

chihsien

0 Likes