The Galaxy Nexus uses the bcm4330 chipset. dhd.ko in bcm4330 can be built with
no issue for 3.0.31 kernel (used with Jelly Bean), however the kernel .config
has to be modified so the bcmdhd driver is built as a kernel module, not built
in to the kernel. Otherwise, you can't rmmod the driver. With that, the
dhd.ko module inserts, but has the following error. Note all DHD debug info is
turned on.
<4>[16382.549194] ## wifi_probe
<4>[16382.549285] wifi_set_power = 1
<4>[16383.280883] wifi_set_carddetect = 1
<6>[16383.422271] mmc1: new high speed SDIO card at address 0001
<4>[16383.424133] dhd_bus_register: Enter
<4>[16383.424835] dhd_module_init:
<4>[16383.424835] Dongle Host Driver, version 1.15.11
<4>[16383.424835] Compiled in drivers/net/wireless/bcmdhd-mon/src on Sep 25
2012 at 15:32:22
<4>[16383.426696] dhdsdio_probe : no mutex held. set lock
<4>[16383.426879] dhdsdio_probe: Enter
<4>[16383.426940] dhdsdio_probe: venid 0x14e4 devid 0x0000
<4>[16383.427124] dhdsdio_probe: allow device id 0, will check chip internals
<4>[16383.427368] F1 signature read @0x18000000=0x16444330
<4>[16383.427703] sdioh_cis_read: func_cis_ptr[0]=0x1070
<4>[16383.437286] Function 0 CIS:
<4>[16383.437377] 20 04 d0 02 30 43 21 02 0c 00 22 04 00 20 00 5a
<4>[16383.438842] ff
<4>[16383.439086] sdioh_cis_read: func_cis_ptr[1]=0x1000
<4>[16383.448638] Function 1 CIS:
<4>[16383.448791] 20 04 d0 02 30 43 21 02 0c 00 22 2a 01 00 00 00
<4>[16383.450256] 00 00 00 00 00 00 00 00 40 00 00 ff ff 80 00 00
<4>[16383.451690] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<4>[16383.453247] 00 00 00 00 00 00 ff
<4>[16383.454040] sdioh_cis_read: func_cis_ptr[2]=0x1038
<4>[16383.463562] Function 2 CIS:
<4>[16383.463653] 20 04 d0 02 30 43 21 02 0c 00 22 2a 01 01 00 00
<4>[16383.465118] 00 00 00 00 00 00 00 00 00 02 00 ff ff 80 00 00
<4>[16383.466522] 00 00 00 00 00 00 00 00 c8 00 00 00 00 00 00 00
<4>[16383.468078] 00 00 00 00 00 00 ff
<4>[16383.474121] DHD: dongle ram size is set to 294912(orig 294912)
<4>[16383.474639] dhd_attach: Enter
<4>[16383.474761] dhd_add_if: idx 0, handle->c68b7800
<3>[16383.476898] CFG80211-INFO2) wl_cfg80211_attach : wl_cfg80211_attach: wl =
0xc68b5320
<3>[16383.477233] CFG80211-INFO2) wl_create_event_handler : Enter
<3>[16383.477447] CFG80211-INFO2) wl_create_event_handler : wl = 0xc68b5320,
wl->event_tsk = 0xc68b5534
<4>[16383.477691] wl_create_event_handler thr:9f1 created
<3>[16383.477722] CFG80211-INFO2) wl_event_handler : tsk Enter, tsk = 0xc68b5534
<3>[16383.477752] CFG80211-INFO2) wl_event_handler : DAEMONIZE completed
<3>[16383.477752] CFG80211-INFO2) wl_event_handler : tsk completed
<4>[16383.478149] wl_create_event_handler thr:9f1 started
<4>[16383.479766] dhd_attach thr:9f2 created
<4>[16383.479858] dhd_attach thr:9f2 started
<4>[16383.479980] dhd_attach thr:9f3 created
<4>[16383.480133] dhd_attach thr:9f3 started
<4>[16383.480255] dhd_attach thr:9f4 created
<4>[16383.480346] dhd_attach thr:9f4 started
<4>[16383.480499] dhd_early_suspend: enter
<4>[16383.480621] dhd_set_suspend: enter, value = 1 in_suspend=1
<4>[16383.480773] dhdsdio_probe_malloc: Enter
<4>[16383.480865] dhdsdio_probe_init: Enter
<4>[16383.481048] dhdsdio_probe_init: Initial value for sd_divisor is 2
<4>[16383.481201] dhdsdio_probe_init: Initial value for sd_mode is 2
<4>[16383.481323] dhdsdio_probe_init: Initial value for sd_blocksize is 512
<4>[16383.481475] dhdsdio_probe_init: bus module (through bcmsdh API) does not
support chaining
<4>[16383.481628] dhdsdio_probe: disable SDIO interrupts (not interested yet)
<4>[16383.481719] dhdsdio_probe: registered SDIO interrupt function ok
<4>[16383.481872] dhdsdio_probe: completed!!
<4>[16383.481964] Enter dhd_bus_start:
<4>[16383.482055] dhdsdio_clkctl: Enter
<4>[16383.482208] dhdsdio_htclk: Enter
<4>[16383.482360] CLKCTL: turned ON
<4>[16383.482452] dhd_os_wd_timer: Enter
<4>[16383.482543] dhdsdio_clkctl: 1 -> 3
<4>[16383.483459] dhdsdio_membytes: write 4 bytes at offset 0x00007ffc in
window 0x00040000
<4>[16383.483673] dhdsdio_download_code_file: download firmware
/sdcard/bcm4330_sta.bcmon.bin
<4>[16383.484863] dhdsdio_membytes: write 2048 bytes at offset 0x00000000 in
window 0x00000000
<4>[16383.485931] dhdsdio_membytes: write 2048 bytes at offset 0x00000800 in
window 0x00000000
<4>[16383.487396] dhdsdio_membytes: write 2048 bytes at offset 0x00001000 in
window 0x00000000
<4>[16383.487823] dhdsdio_membytes: write 2048 bytes at offset 0x00001800 in
window 0x00000000
<4>[16383.488311] dhdsdio_membytes: write 2048 bytes at offset 0x00002000 in
window 0x00000000
<4>[16383.488800] dhdsdio_membytes: write 2048 bytes at offset 0x00002800 in
window 0x00000000
<4>[16383.489196] dhdsdio_membytes: write 2048 bytes at offset 0x00003000 in
window 0x00000000
<4>[16383.489685] dhdsdio_membytes: write 2048 bytes at offset 0x00003800 in
window 0x00000000
<4>[16383.491058] dhdsdio_membytes: write 2048 bytes at offset 0x00004000 in
window 0x00000000
<4>[16383.492095] dhdsdio_membytes: write 2048 bytes at offset 0x00004800 in
window 0x00000000
<4>[16383.492523] dhdsdio_membytes: write 2048 bytes at offset 0x00005000 in
window 0x00000000
<4>[16383.493011] dhdsdio_membytes: write 2048 bytes at offset 0x00005800 in
window 0x00000000
<4>[16383.493469] dhdsdio_membytes: write 2048 bytes at offset 0x00006000 in
window 0x00000000
<4>[16383.493957] dhdsdio_membytes: write 2048 bytes at offset 0x00006800 in
window 0x00000000
<4>[16383.494354] dhdsdio_membytes: write 2048 bytes at offset 0x00007000 in
window 0x00000000
<4>[16383.494842] dhdsdio_membytes: write 2048 bytes at offset 0x00007800 in
window 0x00000000
<4>[16383.495300] dhdsdio_membytes: write 2048 bytes at offset 0x00000000 in
window 0x00008000
<4>[16383.495727] dhdsdio_membytes: write 2048 bytes at offset 0x00000800 in
window 0x00008000
<4>[16383.496185] dhdsdio_membytes: write 2048 bytes at offset 0x00001000 in
window 0x00008000
<4>[16383.496673] dhdsdio_membytes: write 2048 bytes at offset 0x00001800 in
window 0x00008000
<4>[16383.497161] dhdsdio_membytes: write 2048 bytes at offset 0x00002000 in
window 0x00008000
<4>[16383.497558] dhdsdio_membytes: write 2048 bytes at offset 0x00002800 in
window 0x00008000
<4>[16383.498046] dhdsdio_membytes: write 2048 bytes at offset 0x00003000 in
window 0x00008000
<4>[16383.498504] dhdsdio_membytes: write 2048 bytes at offset 0x00003800 in
window 0x00008000
<4>[16383.499999] dhdsdio_membytes: write 2048 bytes at offset 0x00004000 in
window 0x00008000
<4>[16383.500518] dhdsdio_membytes: write 2048 bytes at offset 0x00004800 in
window 0x00008000
<4>[16383.501007] dhdsdio_membytes: write 2048 bytes at offset 0x00005000 in
window 0x00008000
<4>[16383.501495] dhdsdio_membytes: write 2048 bytes at offset 0x00005800 in
window 0x00008000
<4>[16383.501922] dhdsdio_membytes: write 2048 bytes at offset 0x00006000 in
window 0x00008000
<4>[16383.502380] dhdsdio_membytes: write 2048 bytes at offset 0x00006800 in
window 0x00008000
<4>[16383.502868] dhdsdio_membytes: write 2048 bytes at offset 0x00007000 in
window 0x00008000
<4>[16383.503295] dhdsdio_membytes: write 2048 bytes at offset 0x00007800 in
window 0x00008000
<4>[16383.503784] dhdsdio_membytes: write 2048 bytes at offset 0x00000000 in
window 0x00010000
<4>[16383.504241] dhdsdio_membytes: write 2048 bytes at offset 0x00000800 in
window 0x00010000
<4>[16383.504730] dhdsdio_membytes: write 2048 bytes at offset 0x00001000 in
window 0x00010000
<4>[16383.505126] dhdsdio_membytes: write 2048 bytes at offset 0x00001800 in
window 0x00010000
<4>[16383.505615] dhdsdio_membytes: write 2048 bytes at offset 0x00002000 in
window 0x00010000
<4>[16383.506103] dhdsdio_membytes: write 2048 bytes at offset 0x00002800 in
window 0x00010000
<4>[16383.506500] dhdsdio_membytes: write 2048 bytes at offset 0x00003000 in
window 0x00010000
<4>[16383.507019] dhdsdio_membytes: write 2048 bytes at offset 0x00003800 in
window 0x00010000
<4>[16383.507507] dhdsdio_membytes: write 2048 bytes at offset 0x00004000 in
window 0x00010000
<4>[16383.507995] dhdsdio_membytes: write 2048 bytes at offset 0x00004800 in
window 0x00010000
<4>[16383.508392] dhdsdio_membytes: write 2048 bytes at offset 0x00005000 in
window 0x00010000
<4>[16383.508850] dhdsdio_membytes: write 2048 bytes at offset 0x00005800 in
window 0x00010000
<4>[16383.509338] dhdsdio_membytes: write 2048 bytes at offset 0x00006000 in
window 0x00010000
<4>[16383.509826] dhdsdio_membytes: write 2048 bytes at offset 0x00006800 in
window 0x00010000
<4>[16383.510223] dhdsdio_membytes: write 2048 bytes at offset 0x00007000 in
window 0x00010000
<4>[16383.510711] dhdsdio_membytes: write 2048 bytes at offset 0x00007800 in
window 0x00010000
<4>[16383.511169] dhdsdio_membytes: write 2048 bytes at offset 0x00000000 in
window 0x00018000
<4>[16383.511596] dhdsdio_membytes: write 2048 bytes at offset 0x00000800 in
window 0x00018000
<4>[16383.512084] dhdsdio_membytes: write 2048 bytes at offset 0x00001000 in
window 0x00018000
<4>[16383.512542] dhdsdio_membytes: write 2048 bytes at offset 0x00001800 in
window 0x00018000
<4>[16383.513031] dhdsdio_membytes: write 2048 bytes at offset 0x00002000 in
window 0x00018000
<4>[16383.513427] dhdsdio_membytes: write 2048 bytes at offset 0x00002800 in
window 0x00018000
<4>[16383.513916] dhdsdio_membytes: write 2048 bytes at offset 0x00003000 in
window 0x00018000
<4>[16383.514434] dhdsdio_membytes: write 2048 bytes at offset 0x00003800 in
window 0x00018000
<4>[16383.514862] dhdsdio_membytes: write 2048 bytes at offset 0x00004000 in
window 0x00018000
<4>[16383.515319] dhdsdio_membytes: write 2048 bytes at offset 0x00004800 in
window 0x00018000
<4>[16383.515808] dhdsdio_membytes: write 2048 bytes at offset 0x00005000 in
window 0x00018000
<4>[16383.516265] dhdsdio_membytes: write 2048 bytes at offset 0x00005800 in
window 0x00018000
<4>[16383.516693] dhdsdio_membytes: write 2048 bytes at offset 0x00006000 in
window 0x00018000
<4>[16383.517150] dhdsdio_membytes: write 2048 bytes at offset 0x00006800 in
window 0x00018000
<4>[16383.517639] dhdsdio_membytes: write 2048 bytes at offset 0x00007000 in
window 0x00018000
<4>[16383.518066] dhdsdio_membytes: write 2048 bytes at offset 0x00007800 in
window 0x00018000
<4>[16383.518524] dhdsdio_membytes: write 2048 bytes at offset 0x00000000 in
window 0x00020000
<4>[16383.518981] dhdsdio_membytes: write 2048 bytes at offset 0x00000800 in
window 0x00020000
<4>[16383.519470] dhdsdio_membytes: write 2048 bytes at offset 0x00001000 in
window 0x00020000
<4>[16383.519897] dhdsdio_membytes: write 2048 bytes at offset 0x00001800 in
window 0x00020000
<4>[16383.520355] dhdsdio_membytes: write 2048 bytes at offset 0x00002000 in
window 0x00020000
<4>[16383.520843] dhdsdio_membytes: write 2048 bytes at offset 0x00002800 in
window 0x00020000
<4>[16383.521240] dhdsdio_membytes: write 2048 bytes at offset 0x00003000 in
window 0x00020000
<4>[16383.521728] dhdsdio_membytes: write 2048 bytes at offset 0x00003800 in
window 0x00020000
<4>[16383.522216] dhdsdio_membytes: write 2048 bytes at offset 0x00004000 in
window 0x00020000
<4>[16383.522705] dhdsdio_membytes: write 2048 bytes at offset 0x00004800 in
window 0x00020000
<4>[16383.523132] dhdsdio_membytes: write 2048 bytes at offset 0x00005000 in
window 0x00020000
<4>[16383.523590] dhdsdio_membytes: write 2048 bytes at offset 0x00005800 in
window 0x00020000
<4>[16383.524078] dhdsdio_membytes: write 2048 bytes at offset 0x00006000 in
window 0x00020000
<4>[16383.524536] dhdsdio_membytes: write 2048 bytes at offset 0x00006800 in
window 0x00020000
<4>[16383.524963] dhdsdio_membytes: write 2048 bytes at offset 0x00007000 in
window 0x00020000
<4>[16383.525421] dhdsdio_membytes: write 2048 bytes at offset 0x00007800 in
window 0x00020000
<4>[16383.525909] dhdsdio_membytes: write 2048 bytes at offset 0x00000000 in
window 0x00028000
<4>[16383.526306] dhdsdio_membytes: write 2048 bytes at offset 0x00000800 in
window 0x00028000
<4>[16383.526794] dhdsdio_membytes: write 2048 bytes at offset 0x00001000 in
window 0x00028000
<4>[16383.527282] dhdsdio_membytes: write 2048 bytes at offset 0x00001800 in
window 0x00028000
<4>[16383.527740] dhdsdio_membytes: write 2048 bytes at offset 0x00002000 in
window 0x00028000
<4>[16383.528167] dhdsdio_membytes: write 2048 bytes at offset 0x00002800 in
window 0x00028000
<4>[16383.528625] dhdsdio_membytes: write 2048 bytes at offset 0x00003000 in
window 0x00028000
<4>[16383.529113] dhdsdio_membytes: write 2048 bytes at offset 0x00003800 in
window 0x00028000
<4>[16383.529510] dhdsdio_membytes: write 2048 bytes at offset 0x00004000 in
window 0x00028000
<4>[16383.529998] dhdsdio_membytes: write 2048 bytes at offset 0x00004800 in
window 0x00028000
<4>[16383.530517] dhdsdio_membytes: write 2048 bytes at offset 0x00005000 in
window 0x00028000
<4>[16383.530975] dhdsdio_membytes: write 2048 bytes at offset 0x00005800 in
window 0x00028000
<4>[16383.531402] dhdsdio_membytes: write 2048 bytes at offset 0x00006000 in
window 0x00028000
<4>[16383.531860] dhdsdio_membytes: write 2048 bytes at offset 0x00006800 in
window 0x00028000
<4>[16383.532348] dhdsdio_membytes: write 2048 bytes at offset 0x00007000 in
window 0x00028000
<4>[16383.532745] dhdsdio_membytes: write 2048 bytes at offset 0x00007800 in
window 0x00028000
<4>[16383.533386] dhdsdio_membytes: write 425 bytes at offset 0x00000000 in
window 0x00030000
<4>[16383.533996] dhdsdio_downloadvars: Enter
<4>[16383.534301] dhdsdio_membytes: write 1208 bytes at offset 0x00007b44 in
window 0x00040000
<4>[16383.534637] Compare NVRAM dl & ul; varsize=1208
<4>[16383.534820] dhdsdio_membytes: read 1208 bytes at offset 0x00007b44 in
window 0x00040000
<4>[16383.535217] dhdsdio_write_vars: Download, Upload and compare of NVRAM
succeeded.
<4>[16383.535369] Physical memory size: 294912, usable memory size: 294912
<4>[16383.535461] Vars are at 293700, orig varsize is 1208
<4>[16383.535614] New varsize is 1208, length token=0xfed1012e
<4>[16383.535766] dhdsdio_membytes: write 4 bytes at offset 0x00007ffc in
window 0x00040000
<4>[16383.536529] dhdsdio_clkctl: Enter
<4>[16383.536621] dhdsdio_htclk: Enter
<4>[16383.536743] CLKCTL: turned OFF
<4>[16383.536895] dhd_os_wd_timer: Enter
<4>[16383.536987] dhdsdio_clkctl: 3 -> 1
<4>[16383.537078] dhd_os_wd_timer: Enter
<4>[16383.537231] dhd_bus_init: Enter
<4>[16383.537322] dhdsdio_clkctl: Enter
<4>[16383.537384] dhdsdio_htclk: Enter
<4>[16384.312164] dhdsdio_htclk: HT Avail timeout (1000000): clkctl 0x50
<4>[16384.312499] dhdsdio_clkctl: 1 -> 1
<4>[16384.312683] dhd_bus_init: clock state is wrong. state = 1
<4>[16384.313049] dhdsdio_clkctl: Enter
<4>[16384.313232] dhdsdio_htclk: Enter
<4>[16385.100494] dhdsdio_htclk: HT Avail timeout (1000000): clkctl 0x50
<4>[16385.100830] dhdsdio_clkctl: 1 -> 1
<4>[16385.101226] dhdsdio_clkctl: Enter
<4>[16385.101440] dhd_bus_start failed bus is not ready
<4>[16385.101776] dhd_watchdog_thread:
<4>[16385.101959] dhd_bus_watchdog: Enter
<4>[16385.102172] dhdsdio_probe: dhd_bus_start failed
<4>[16385.102478] dhd_net_attach: ifidx 0
<4>[16385.112548] dhd_get_stats: Enter
<4>[16385.112823] Broadcom Dongle Host Driver: register interface
[wlan0]dhdsdio_probe : the lock is released.
As can be seen from the log, there is an issue turning the SDIO "backplane"
clock (htclk) back on after the firmware loads. However, if you try to load
the original firmware instead of bcm4330_sta.bcmon.bin with the bcmon version
of dhd.ko, the driver works fine, albeit with no monitor mode. I also tried
increasing the "HT Avail" timeout to 10 seconds instead of 1 second with the
same result.
Could it be an incompatibility issue with the firmware? Would it be possible
to post the firmware soure and build instructions as well?
Original issue reported on code.google.com by mattkrys...@gmail.com on 27 Sep 2012 at 1:43
Original issue reported on code.google.com by
mattkrys...@gmail.com
on 27 Sep 2012 at 1:43