bcm43xx firmware not loading on boot

I see there is another thread currently on the bcm43 firmware, but skimming through it, it looks to be about something else.

Here’s the problem I’m having with my old laptop:

For whatever reason, about a month and a half to two months ago, the bcm43 firmware stopped automatically loading upon boot. The firmware files are indeed present on the system (residing in /lib/firmware/b43). I see the error message during boot (before the sddm login), and dmesg of course spells out the specifics.

I’ve been simply running the b43 installer to “reboot” (if you will) the wireless into action. It fails on the d/l (as shall be illustrated below), but that’s not important as everything is already on the system, so it successfully re-enables the wireless … though, this procedure its a bit of a PITA to do so.

Anyway here are specifics:


 /sbin/lspci -s 0e:00.0 -vnn
0e:00.0 Network controller [0280]: Broadcom Limited BCM4312 802.11b/g LP-PHY [14e4:4315] (rev 01)
        Subsystem: Dell Wireless 1397 WLAN Mini-Card [1028:000c]
        Flags: bus master, fast devsel, latency 0, IRQ 18
        Memory at fa000000 (64-bit, non-prefetchable) [size=16]
        Capabilities: <access denied>
        Kernel driver in use: b43-pci-bridge
        Kernel modules: ssb


    4.482590] ssb: Sonics Silicon Backplane found on PCI device 0000:0e:00.0

    4.517855] b43-phy0: Broadcom 4312 WLAN found (core revision 15)

    4.563545] b43-phy0: Found PHY: Analog 6, Type 5 (LP), Revision 1
    4.563560] b43-phy0: Found Radio: Manuf 0x17F, ID 0x2062, Revision 2, Version 0

    4.578398] Broadcom 43xx driver loaded  Features: PNLS ]
    4.578617] b43 ssb0:0: Direct firmware load for b43/lp0initvals15.fw failed with error -2
    4.578636] b43 ssb0:0: Direct firmware load for b43-open/ucode15.fw failed with error -2
    4.578649] b43 ssb0:0: Direct firmware load for b43-open/ucode15.fw failed with error -2
    4.578651] b43-phy0 ERROR: Firmware file "b43/lp0initvals15.fw" not found
    4.578651] b43-phy0 ERROR: Firmware file "b43-open/ucode15.fw" not found
    4.578653] b43-phy0 ERROR: Please open a terminal and enter the command "sudo /usr/sbin/install_bcm43xx_firmware" to download the correct firmware for this driver version. For an off-line installation, go to http://en.opensuse.org/HCL/Network_Adapters_(Wireless)/Broadcom_BCM43xx and follow the instructions in the "Installing firmware from RPM packages" section.           


sudo /usr/sbin/install_bcm43xx_firmware
[sudo] password for root: 
Downloading b43 firmware

curl: (6) Could not resolve host: www.lwfinger.com
Could not download b43 firmware. Please look at /usr/share/doc/packages/b43-fwcutter/README.

Downloading b43legacy firmware

curl: (6) Could not resolve host: downloads.openwrt.org
Could not download b43legacy firmware. Please look at /usr/share/doc/packages/b43-fwcutter/README.

b43 firmware successfully installed.
b43legacy firmware successfully installed.

after which the dmesg is appended with



  700.557099] fuse init (API version 7.26)
  723.454493] ssb: Found chip with id 0x4312, rev 0x01 and package 0x00
  723.454512] ssb: Core 0 found: ChipCommon (cc 0x800, rev 0x16, vendor 0x4243)
  723.454530] ssb: Core 1 found: IEEE 802.11 (cc 0x812, rev 0x0F, vendor 0x4243)
  723.454547] ssb: Core 2 found: PCMCIA (cc 0x80D, rev 0x0A, vendor 0x4243)
  723.454565] ssb: Core 3 found: PCI-E (cc 0x820, rev 0x09, vendor 0x4243)
  723.543031] ssb: Sonics Silicon Backplane found on PCI device 0000:0e:00.0
  723.585032] b43-phy0: Broadcom 4312 WLAN found (core revision 15)
  723.626923] b43-phy0: Found PHY: Analog 6, Type 5 (LP), Revision 1
  723.626939] b43-phy0: Found Radio: Manuf 0x17F, ID 0x2062, Revision 2, Version 0
  723.642999] Broadcom 43xx driver loaded  Features: PNLS ]
  723.656772] Broadcom 43xx-legacy driver loaded  Features: PLID ]
  723.663406] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
  723.693909] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
  723.874368] b43-phy0: Loading firmware version 784.2 (2012-08-15 21:35:19)
  732.230447] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
  732.466280] b43-phy0: Loading firmware version 784.2 (2012-08-15 21:35:19)

There is no blacklist that is preventing it from being loaded upon boot.
As far as I know, b43 isn’t apart of the initrd … and mkinitrd has been done on numerous updates (kernel etc) in the time that has passed since it stop working properly anyway … I’ll look into this further when I have some more time.

In the meantime, hoping someone can offer a suggestion. Google hasn’t shed me an obvious fix yet.[/size]

Strange indeed. FWIW, I found another earlier post describing the same issue with no resolution. I wonder if there’s a bug report around?

FWIW, another similar account (from a few years ago) where one user found the unloading and reloading the driver eventually worked with the firmware being loaded as expected

https://bbs.archlinux.org/viewtopic.php?id=161664

IIRC, the wl driver is an option for this chipset, so you could try switching to that (broadcom-wl) instead.

Hi
Your on the money, no blacklist for ssb and probably a conf file in /etc/modprobe.d for the b43 device is needed to add to initrd.

if you look at the script it’s just removing the module and reloading… (create a systemd service for it?)

Thanks Deano and Malcolm.

I was mistaken, it is a part of the initrd. I looked at the contents (#lsinitrd) and

  • one of the fw files is not there (lp0initvals15)
  • nor is there a path of “b43-open/ucod…” (as can be seen in the complaint registered in the dmesg output)

Will look into trying to correct the initrd build on the weekend.

I have the same problem. Looks like the -wl version is no more available from packman, but the driver works if the script is run after boot

I need tw because my computer is 32 bits (dell mini 10)

I dl from obs “pullin” package, dunno if it’s useful

thanks
jdd

“pullin” don’t do any good…

oh… the packman module is not bcm43… but “broadcom-wl”

install it with zypper and reboot and see

jdd

“pullin” is just a pseudo package that should trigger the download of the necessary firmware (which cannot be included in openSUSE for legal reasons) when you install it.
It won’t do anything if the firmware is already there.

Regarding the original problem, there’s a bug report that sounds similar:
https://bugzilla.opensuse.org/show_bug.cgi?id=1037344

In short, b43 is in the initrd, but the necessary firmware is not. If b43 gets loaded, it cannot access the firmware files.
You might try to remove b43 from the initrd, but that’s just guessing from my side…
Create a file something.conf in /etc/dracut.conf.d/ with this content and recreate the initrd:

omit_drivers+="b43"

Maybe you’d need to omit other modules like ssb too, I’m not sure.

(of course the other option would be to add the firmware files to the initrd too, via install_items+=“…”)

well… adding -wl do not get any good…

I’m rather sure all this worked 2 weeks in the past.

will get a look to the bug report, but not today :frowning:

thanks
jdd

Well, it may be that your Packman mirror is outdated, there has been a kernel update yesterday (and broadcom-wl has been rebuilt 23hrs ago)…
In that case, booting the previous kernel may help.

Of course it might also be that broadcom-wl is broken and would need a patch to work with the latest kernel.
Just to be sure: broadcom-wl is not enough, you need to install a broadcom-wl-kmp package that matches your kernel.

In fact, as far as I can say, the script works, it simply do “modprobe b43 and modprobe b43legacy”. Doing this by hand is enough to make the wifi works. In fact in my case “modprobe b43” is enough (but “modprobe b43legacy” do not hurt).

Doing “mkinitrd” create a working initrd and wifi loads automatically at boot.

Of course I also installed -kmp.

that said, installing -wl triggers the install of several unuseful kernels, like pae one (with only 1gb ram) and bcm43 standard do not, but I couldn’t test all.

of course, I have no idea if this will survive an other update (will see soon :slight_smile:

that said, installing -wl triggers the install of several unuseful kernels,

Thats not true, does not…

It depends on what kmp(s) you install…

Which script? /usr/sbin/install_bcm43xx_firmware?

Yes, this downloads/installs the firmware if possible, and then reloads the kernel module.

Doing this by hand is enough to make the wifi works.

Yes, and this has been mentioned here already.
The reason why it works is that the firmware can be loaded when / is already mounted. The problem seems to be that the firmware is not in the initrd, while b43 is. If b43 is in the initrd, it will be loaded early, before / is mounted, and cannot load the firmware.

Doing “mkinitrd” create a working initrd and wifi loads automatically at boot.

With or without broadcom-wl?

If b43 works now, then the actual “problem” might simply be that the firmware wasn’t downloaded yet when the initrd was created the last time (and as b43 is in the initrd, it would need the firmware in the initrd too). Not really a bug then, though maybe install_bcm43xx_firmware should also rebuild the initrd then.
This would be vital information to add to the bug report.

Or did you do changes to the dracut config as I suggested?

Of course I also installed -kmp.

-kmp what?

that said, installing -wl triggers the install of several unuseful kernels, like pae one (with only 1gb ram) and bcm43 standard do not, but I couldn’t test all.

I don’t understand what you are saying here.
kernel-pae should only be pulled in when you install broadcom-wl-kmp-pae, but then you only need to install broadcom-wl-kmp-pae if you actually have kernel-pae installed.
Or, put differently, you should only install broadcom-wl-kmp-xxx if kernel-xxx is installed.

If any other kernel is pulled in, you apparently are doing something wrong.

Btw, PAE is useful also with only 1GB RAM, and it was used by default on 32bit systems for years, regardless of the amount of RAM.
(nowadays I think kernel-default should be the default, but TBH I’m not sure about the current 32bit status)

I upgraded from 42.2 to 42.3 and lost wifi too. I have an old Broadcom BCM4311 and using the B43 module.

I can confirm the workaround suggested above fixed the issue for me. In my case, I added:

omit_drivers+="b43 ssb"

b43 was not enough on its own, needed ssb too

Seems like a bug in dracut

Yes, apparently it adds the WiFi drivers to the initrd although it shouldn’t (I already mentioned the bug report).

Running mkinitrd after installing the firmware should “fix” it too though, as that will add the firmware to the initrd as well.

manythanks, caming from here
I made :

su
modprobe b43
modprobe b43legacy
mkinitrd

and the error message disappeared and wifi works :slight_smile:

That worked for me too! Thanks a ton for sharing!

I’m encountering the same problem with Leap 42.3 on my Lenovo G550 laptop.

And did you try the advice given in this thread yet?