PDA

View Full Version : [SOLUTION] BCM4311 not working with latest kernels (3.15.* & 3.16.*)



ircecho
3rd October 2014, 05:52 PM
Hey guys,

I have been working long and hard for a solution to my problem, and I just wanted to share it with you, as I have not been able to find information on it on the internet yet. I hope this is the right place. For simpler solutions I am, of course, thankful.

The problem:

Starting with a certain kernel update (latest working version was 3.15.8) my BCM4311 Wireless LAN card was not working anymore. Simply switching back to the old kernel in GRUB, it would be working again.

LSPCI:


10:00.0 Network controller: Broadcom Corporation BCM4311 802.11a/b/g (rev 02)
Subsystem: Hewlett-Packard Company Broadcom 802.11a/b/g WLAN
Flags: bus master, fast devsel, latency 0, IRQ 17
Memory at e4000000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [40] Power Management version 3
Capabilities: [58] Vendor Specific Information: Len=78 <?>
Capabilities: [e8] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [d0] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [13c] Virtual Channel
Capabilities: [160] Device Serial Number 12-17-00-ff-ff-db-00-21
Capabilities: [16c] Power Budgeting <?>
Kernel driver in use: wl
Kernel modules: ssb, wl

The problem was as follows:

dmesg | grep b43


[ 1.850388] b43-phy0 ERROR: Firmware file "b43/b0g0initvals13.fw" not found
[ 1.850451] b43-phy0 ERROR: Firmware file "b43-open/ucode13.fw" not found
[ 1.850509] b43-phy0 ERROR: You must go to http://wireless.kernel.org/en/users/Drivers/b43#devicefirmware and download the correct firmware for this driver version. Please carefully read all instructions on this website.

The files were of course there. /lib/firmware/b43/b0g0initvals13.fw and /lib/firmware/b43-open/ucode13.fw and a host of other files were existant and readable. I coul not understand why it wouldn't find or load them, however the reason must be something in the new kernel versions, since simply switching back to the old kernels would have it working again.

The solution:

So now I tried to use the wl driver. Blacklisting the b43 driver would not work however hard I tried, it would get loaded anyways, even deleting the module would not change anything. I think it may be in the initrd. The only way that worked was with kernel command line argument modprobe.blacklist. But when finally the b43 driver was prevented from loading, even the wl driver would not work anymore. The only way to get it working was to remove the b43 module from the kernel, and load the wl driver afterwards.

So I created a script:

cat /root/refresh_wifi.bash


if [ $(iwconfig wlp16s0 2>&1 | wc -l) -lt 3 ] ; then

modprobe -r b43 bcma
modprobe -r brcmsmac bcma
modprobe -r wl
modprobe wl

fi

and let it run by chrond.

cat /etc/crontab


* * * * * root /bin/bash /root/refresh_wifi.bash

Now the wifi has been working without problems ever since.

I hope this helps someone else. Greetings.