AnsweredAssumed Answered

bcmdhd wifi driver got kernel panic when insmod the module

Question asked by 招平 曾 on Aug 2, 2016
Latest reply on Dec 20, 2016 by karltsou

Hello,

 

We have our own board designed after the SabreSD-6D and I am trying to bring WiFi module BCM43353 on imx6 dual platform.

 

Environment:

Platform: IMX6 dual

Codebase: Android 4.4.3

Linux base: 3.10.53

 

The wifi module is connected to usdhc1 controller.

The bcm reset (wlreg_on) line is connected to (GPIO3_IO23) and interrupt(WL_WAKE_HOST) line is connected to (GPIO1_IO05)

The below changes are in dts file.

 

dts setting:

wlreg_on: fixedregulator@2 {

                compatible = "regulator-fixed";

                regulator-name = "wlreg_on";

                gpio = <&gpio3 23 0>;                                    //wifi_regon

                startup-delay-us = <600000>;

                enable-active-high;

        };

 

 

        bcmdhd_wlan_0: bcmdhd_wlan@0 {

                compatible = "android,bcmdhd_wlan";

                gpios = <&gpio1 5 1>;                                  //oob_irq即wifi_wake_host

                wlreg_on-supply = <&wlreg_on>;

        };

 

&usdhc1 {

  pinctrl-names = "default";

  pinctrl-0 = <&pinctrl_usdhc1_1>;

  keep-power-in-suspend;

  no-1-8-v;

  cap-power-off-card;

  status = "okay";

};

 

-----------------------------------------------------------------------------------

usdhc1 {

  pinctrl_usdhc1_1: usdhc1grp-1 {

  fsl,pins = <

  MX6QDL_PAD_SD1_CMD__SD1_CMD    0x17071

  MX6QDL_PAD_SD1_CLK__SD1_CLK    0x10071

  MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17071

  MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17071

  MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17071

  MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17071

  >;

  };

  };

 

When I try to insmod the bcmdhd driver, the system got panic.

log:

dhd_module_init in

======irq_flags:IRQF_TRIGGER_FALLING

Power-up adapter 'DHD generic adapter'

mmc0: queuing unknown CIS tuple 0x80 (2 bytes)

mmc0: queuing unknown CIS tuple 0x80 (7 bytes)

mmc0: queuing unknown CIS tuple 0x80 (6 bytes)

mmc0: queuing unknown CIS tuple 0x91 (3 bytes)

mmc0: new high speed SDIO card at address 0001

F1 signature OK, socitype:0x1 chip:0x4339 rev:0x1 pkg:0x2

DHD: dongle ram size is set to 786432(orig 786432) at 0x180000

wifi_platform_get_mac_addr

wl_create_event_handler(): thread:wl_event_handler:3b0 started

CFG80211-ERROR) wl_event_handler : tsk Enter, tsk = 0x9884147c

dhd_attach(): thread:dhd_watchdog_thread:3b1 started

dhd_attach(): thread:dhd_dpc:3b2 started

dhd_deferred_work_init: work queue initialized

dhdsdio_write_vars: Download, Upload and compare of NVRAM succeeded.

dhd_bus_init: enable 0x06, ready 0x06 (waited 0us)

wifi_platform_get_mac_addr

Firmware up: op_mode=0x0005, MAC=00:ae:fa:84:20:57

Firmware version = wl0: Mar  7 2016 21:01:51 version 6.37.39.38 (r623336)

dhd_wlfc_init(): successfully enabled bdcv2 tlv signaling, 79

dhd_wlfc_init(): wlfc_mode=0x0, ret=-23

Dongle Host Driver, version 1.141.91 (r)

Compiled in drivers/net/wireless/bcmdhd on Jul 19 2016 at 12:17:49

Register interface [wlan0]  MAC: 00:ae:fa:84:20:57

 

 

root@sabresd_6dq:/ # Unable to handle kernel NULL pointer dereference at virtual address 00000200

pgd = 80004000

[00000200] *pgd=00000000

Internal error: Oops: 17 [#1] PREEMPT SMP ARM

Modules linked in: bcmdhd cfg80211 [last unloaded: cfg80211]

CPU: 0 PID: 892 Comm: kworker/u4:1 Not tainted 3.10.53 #259

Workqueue: kmmcd mmc_rescan

task: bc09c500 ti: 981f8000 task.ti: 981f8000

PC is at _raw_spin_lock_irqsave+0x18/0x58

LR is at _raw_spin_lock_irqsave+0x18/0x58

 

[<807c0dcc>] (_raw_spin_lock_irqsave+0x18/0x58) from [<8004b728>] (add_wait_queue+0x20/0x48)

[<8004b728>] (add_wait_queue+0x20/0x48) from [<8054bad8>] (__mmc_claim_host+0x54/0x194)

[<8054bad8>] (__mmc_claim_host+0x54/0x194) from [<7f1765a0>] (sdioh_request_byte+0x1c0/0x2a4 [bcmdhd

])

[<7f1765a0>] (sdioh_request_byte+0x1c0/0x2a4 [bcmdhd]) from [<7f1766a8>] (sdioh_cfg_write+0x24/0x2c

[bcmdhd])

[<7f1766a8>] (sdioh_cfg_write+0x24/0x2c [bcmdhd]) from [<7f175578>] (bcmsdh_cfg_write+0x44/0xc0 [bcm

dhd])

[<7f175578>] (bcmsdh_cfg_write+0x44/0xc0 [bcmdhd]) from [<7f17ed64>] (dhdsdio_clk_kso_enab+0x38/0x16

4 [bcmdhd])

[<7f17ed64>] (dhdsdio_clk_kso_enab+0x38/0x164 [bcmdhd]) from [<7f181ec4>] (dhdsdio_clk_devsleep_iova

r+0xec/0x5c8 [bcmdhd])

[<7f181ec4>] (dhdsdio_clk_devsleep_iovar+0xec/0x5c8 [bcmdhd]) from [<7f182678>] (dhdsdio_bussleep+0x

2d8/0x498 [bcmdhd])

[<7f182678>] (dhdsdio_bussleep+0x2d8/0x498 [bcmdhd]) from [<7f1886c8>] (dhd_bus_stop+0x2e4/0x3f8 [bc

mdhd])

[<7f1886c8>] (dhd_bus_stop+0x2e4/0x3f8 [bcmdhd]) from [<7f13bb68>] (dhd_bus_detach+0x58/0x78 [bcmdhd

])

[<7f13bb68>] (dhd_bus_detach+0x58/0x78 [bcmdhd]) from [<7f13ce04>] (dhd_detach+0x33c/0x4e0 [bcmdhd])

[<7f13ce04>] (dhd_detach+0x33c/0x4e0 [bcmdhd]) from [<7f182958>] (dhdsdio_release+0x3c/0x1bc [bcmdhd

])

[<7f182958>] (dhdsdio_release+0x3c/0x1bc [bcmdhd]) from [<7f183160>] (dhdsdio_disconnect+0x38/0x94 [

bcmdhd])

[<7f183160>] (dhdsdio_disconnect+0x38/0x94 [bcmdhd]) from [<7f176014>] (bcmsdh_remove+0x20/0x44 [bcm

dhd])

[<7f176014>] (bcmsdh_remove+0x20/0x44 [bcmdhd]) from [<7f177724>] (bcmsdh_sdmmc_remove+0x4c/0x64 [bc

mdhd])

[<7f177724>] (bcmsdh_sdmmc_remove+0x4c/0x64 [bcmdhd]) from [<80556398>] (sdio_bus_remove+0x30/0xf8)

[<80556398>] (sdio_bus_remove+0x30/0xf8) from [<80393950>] (__device_release_driver+0x90/0xf0)

[<80393950>] (__device_release_driver+0x90/0xf0) from [<803939cc>] (device_release_driver+0x1c/0x28)

[<803939cc>] (device_release_driver+0x1c/0x28) from [<803934d0>] (bus_remove_device+0x108/0x128)

[<803934d0>] (bus_remove_device+0x108/0x128) from [<80390d34>] (device_del+0xf4/0x178)

[<80390d34>] (device_del+0xf4/0x178) from [<80556724>] (sdio_remove_func+0x1c/0x28)

[<80556724>] (sdio_remove_func+0x1c/0x28) from [<80554788>] (mmc_sdio_remove+0x40/0x74)

[<80554788>] (mmc_sdio_remove+0x40/0x74) from [<80554830>] (mmc_sdio_detect+0x74/0x10c)

[<80554830>] (mmc_sdio_detect+0x74/0x10c) from [<8054e0dc>] (mmc_rescan+0x1c0/0x320)

[<8054e0dc>] (mmc_rescan+0x1c0/0x320) from [<8004510c>] (process_one_work+0xfc/0x34c)

[<8004510c>] (process_one_work+0xfc/0x34c) from [<8004549c>] (worker_thread+0x140/0x3f0)

[<8004549c>] (worker_thread+0x140/0x3f0) from [<8004afac>] (kthread+0xa4/0xb0)

[<8004afac>] (kthread+0xa4/0xb0) from [<8000e158>] (ret_from_fork+0x14/0x3c)

Outcomes