BCM43228 issues

I installed Garuda on my HP ProBook 640 G1 and absolutely love this distro. My only nagging issue is that when I start the laptop, my WiFi will not automatically connect. Goes through a process of "Configuring" and then finally fails. After doing some searching I found a similar issue with the BCM43228 on various Arch distros and the solution was to do the following:

sudo modprobe -r b43 ssb bcma wl
sudo modprobe wl

This works for me everytime, so I finally put it in a script (without sudo) in /usr/local/bin and have it set to run this with kdesu when I log in each time to resolve the issue. Of course I have to give my password to kdesu for this to run.

My question is, is it possible to remove certain packages around the Broadcom drivers or somesuch so that this "fix" is permenant and I don't have to run this script on login? Or can I blacklist certain things to accomplish this? Any assistance would be appreciated.

╭─mfrazier@mike in ~ took 23ms
╰─λ inxi -Faz
System:    Kernel: 5.14.3-zen1-1-zen x86_64 bits: 64 compiler: gcc v: 11.1.0  
parameters: BOOT_IMAGE=/@/boot/vmlinuz-linux-zen root=UUID=0600ddb7-5a75-4f2b-b926-73ab138473b0  
rw rootflags=subvol=@ quiet splash rd.udev.log_priority=3 vt.global_cursor_default=0
systemd.unified_cgroup_hierarchy=1 loglevel=3
Desktop: KDE Plasma 5.22.5 tk: Qt 5.15.2 info: latte-dock wm: kwin_x11 vt: 1 dm: SDDM  
Distro: Garuda Linux base: Arch Linux  
Machine:   Type: Laptop System: Hewlett-Packard product: HP ProBook 640 G1 v: A3009DD10203  
serial: <filter> Chassis: type: 10 serial: <filter>  
Mobo: Hewlett-Packard model: 1993 v: KBC Version 16.3C serial: <filter> UEFI: Hewlett-Packard  
v: L77 Ver. 01.49 date: 08/29/2019  
Battery:   ID-1: BAT0 charge: 53.2 Wh (98.2%) condition: 54.2/54.2 Wh (100.0%) volts: 12.3 min: 10.8  
model: Hewlett-Packard Primary type: Li-ion serial: <filter> status: Unknown  
CPU:       Info: Dual Core model: Intel Core i5-4300M bits: 64 type: MT MCP arch: Haswell family: 6  
model-id: 3C (60) stepping: 3 microcode: 28 cache: L2: 3 MiB  
flags: avx avx2 lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx bogomips: 20753  
Speed: 980 MHz min/max: 800/3300 MHz Core speeds (MHz): 1: 980 2: 2233 3: 798 4: 836  
Vulnerabilities: Type: itlb_multihit status: KVM: VMX disabled  
Type: l1tf mitigation: PTE Inversion; VMX: conditional cache flushes, SMT vulnerable  
Type: mds mitigation: Clear CPU buffers; SMT vulnerable  
Type: meltdown mitigation: PTI  
Type: spec_store_bypass mitigation: Speculative Store Bypass disabled via prctl and seccomp  
Type: spectre_v1 mitigation: usercopy/swapgs barriers and __user pointer sanitization  
Type: spectre_v2  
mitigation: Full generic retpoline, IBPB: conditional, IBRS_FW, STIBP: conditional, RSB filling  
Type: srbds mitigation: Microcode  
Type: tsx_async_abort status: Not affected  
Graphics:  Device-1: Intel 4th Gen Core Processor Integrated Graphics vendor: Hewlett-Packard driver: i915  
v: kernel bus-ID: 00:02.0 chip-ID: 8086:0416 class-ID: 0300  
Device-2: Chicony HP HD Webcam type: USB driver: uvcvideo bus-ID: 3-7:3 chip-ID: 04f2:b3ed  
class-ID: 0e02 serial: <filter>  
Display: x11 server: X.Org 1.20.13 compositor: kwin_x11 driver: loaded: intel  
unloaded: modesetting alternate: fbdev,vesa display-ID: :0 screens: 1  
Screen-1: 0 s-res: 1366x768 s-dpi: 96 s-size: 361x203mm (14.2x8.0") s-diag: 414mm (16.3")  
Monitor-1: eDP1 res: 1366x768 hz: 60 dpi: 112 size: 310x170mm (12.2x6.7") diag: 354mm (13.9")  
OpenGL: renderer: Mesa DRI Intel HD Graphics 4600 (HSW GT2) v: 4.5 Mesa 21.2.1 compat-v: 3.0  
direct render: Yes  
Audio:     Device-1: Intel Xeon E3-1200 v3/4th Gen Core Processor HD Audio vendor: Hewlett-Packard  
driver: snd_hda_intel v: kernel bus-ID: 00:03.0 chip-ID: 8086:0c0c class-ID: 0403  
Device-2: Intel 8 Series/C220 Series High Definition Audio vendor: Hewlett-Packard  
driver: snd_hda_intel v: kernel bus-ID: 00:1b.0 chip-ID: 8086:8c20 class-ID: 0403  
Sound Server-1: ALSA v: k5.14.3-zen1-1-zen running: yes  
Sound Server-2: JACK v: 1.9.19 running: no  
Sound Server-3: PulseAudio v: 15.0 running: no  
Sound Server-4: PipeWire v: 0.3.35 running: yes  
Network:   Device-1: Intel Ethernet I217-V vendor: Hewlett-Packard driver: e1000e v: kernel port: 3080  
bus-ID: 00:19.0 chip-ID: 8086:153b class-ID: 0200  
IF: enp0s25 state: down mac: <filter>  
Device-2: Broadcom BCM43228 802.11a/b/g/n driver: wl v: kernel modules: bcma port: ef80  
bus-ID: 02:00.0 chip-ID: 14e4:4359 class-ID: 0280  
IF: wlo1 state: up mac: <filter>  
Bluetooth: Device-1: Broadcom HP Portable Bumble Bee type: USB driver: btusb v: 0.8 bus-ID: 3-12:4  
chip-ID: 0a5c:21f1 class-ID: fe01 serial: <filter>
Report: bt-adapter ID: hci0 rfk-id: 1 state: up address: <filter>
Drives:    Local Storage: total: 350.27 GiB used: 76.4 GiB (21.8%)
SMART Message: Unable to run smartctl. Root privileges required.
ID-1: /dev/sda maj-min: 8:0 vendor: Leven model: JAJS600M256PRO size: 238.47 GiB block-size:
physical: 512 B logical: 512 B speed: 6.0 Gb/s type: SSD serial: <filter> rev: 7A scheme: GPT
ID-2: /dev/sdb maj-min: 8:16 vendor: SanDisk model: SDSSDA120G size: 111.79 GiB block-size:
physical: 512 B logical: 512 B speed: 6.0 Gb/s type: SSD serial: <filter> rev: 10RL scheme: GPT
Partition: ID-1: / raw-size: 237.51 GiB size: 237.51 GiB (100.00%) used: 76.4 GiB (32.2%) fs: btrfs
dev: /dev/sda2 maj-min: 8:2
ID-2: /boot/efi raw-size: 260 MiB size: 256 MiB (98.45%) used: 562 KiB (0.2%) fs: vfat
dev: /dev/sda1 maj-min: 8:1
ID-3: /home raw-size: 237.51 GiB size: 237.51 GiB (100.00%) used: 76.4 GiB (32.2%) fs: btrfs
dev: /dev/sda2 maj-min: 8:2
ID-4: /var/log raw-size: 237.51 GiB size: 237.51 GiB (100.00%) used: 76.4 GiB (32.2%) fs: btrfs
dev: /dev/sda2 maj-min: 8:2
ID-5: /var/tmp raw-size: 237.51 GiB size: 237.51 GiB (100.00%) used: 76.4 GiB (32.2%) fs: btrfs
dev: /dev/sda2 maj-min: 8:2
Swap:      Kernel: swappiness: 133 (default 60) cache-pressure: 100 (default)
ID-1: swap-1 type: zram size: 7.22 GiB used: 0 KiB (0.0%) priority: 100 dev: /dev/zram0
Sensors:   System Temperatures: cpu: 53.0 C mobo: 0.0 C
Fan Speeds (RPM): N/A
Info:      Processes: 248 Uptime: 14m wakeups: 1 Memory: 7.22 GiB used: 3.31 GiB (45.9%) Init: systemd
v: 249 tool: systemctl Compilers: gcc: 11.1.0 clang: 12.0.1 Packages: pacman: 1426 lib: 346
Shell: fish v: 3.3.1 default: Bash v: 5.1.8 running-in: konsole inxi: 3.3.06

A systemd service is the solution you want.

Welcome to the forum.

1 Like

The startup service I've written below should likely do the job for you.

With a text editor create:

/etc/systemd/system/wl-reload.service

Add the following to the service file contents:

#/etc/systemd/system/wl-reload.service
#systemctl enable wl-reload.service
#systemctl start wl-reload.service
#systemctl stop wl-reload.service
#systemctl disable wl-reload.service
#systemctl status wl-reload.service
#systemctl daemon-reload

[Unit]
Description=WL driver reload service
WantedBy=multi-user.target 
After=network.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/usr/bin/sleep 2
ExecStart=/usr/bin/modprobe -r b43 ssb bcma wl
ExecStart=/usr/bin/sleep 3
ExecStop=/usr/bin/modprobe wl

[Install]
WantedBy=multi-user.target 

Save the newly created service file, then enable the service:

systemctl enable wl-reload.service

Then restart your computer.

The WL driver should now be automatically reloaded at startup without requiring the sudo password to execute the operation.

4 Likes

Thanks for this, but still doesn't work. After setting this up, and then rebooting, when I log in, I don't have any wifi at all (Network icon shows a red cable connection, and the dropdown doesn't even show Wifi available). I can then run the fixwifi script to do the modprobe -r and then the modprobe wl and I get Wifi back and it will connect.

I've played around with blacklists and all, but it seems like its not until the login happens and the attempted connection starts that the modprobe remove and then modprobe wl fixes the issue.

Is there a way to set up automatically connecting to the network when the system first boots (so before the login happens)? Or does a wifi connection only happen after a user login?

Without a broadcom adapter (which I would never buy) it's difficult to troubleshoot remotely. What I would do then is blacklist b43 ssb bcma wl modules and alter the service to the following.

# cat /etc/systemd/system/wl-reload.service
#systemctl enable wl-reload.service
#systemctl start wl-reload.service
#systemctl stop wl-reload.service
#systemctl disable wl-reload.service
#systemctl status wl-reload.service
#systemctl daemon-reload

[Unit]
Description=WL driver reload service
WantedBy=multi-user.target 
After=dbus.service network-pre.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/modprobe wl

[Install]
WantedBy=multi-user.target 
2 Likes

I did find where I can set the wifi connection for all users which should connect when the system reboots. Then tried with the wl-reload in place, but still no joy (or change in behavior as I reported.

And yeah, broadcom was just what was in this laptop. Wouldn't have been my first choice ;). Let me give your suggestion a whirl.

If that does not work then please post:

cat /etc/systemd/system/wl-reload.service
systemctl status wl-reload.service
grep -r "blacklist\|install\|options"  /etc/modprobe.d/ /etc/modules-load.d/ /usr/lib/modprobe.d/
lsmod | sort
3 Likes

If the first three modules are blacklisted, does the wl module need to be reloaded? (Or will it "just work"?)

Here's the output you requested:

╭─mfrazier@mike in ~ took 3s
╰─λ cat /etc/systemd/system/wl-reload.service
systemctl status wl-reload.service
grep -r "blacklist\|install\|options"  /etc/modprobe.d/ /etc/modules-load.d/ /usr/lib/modprobe.d/
lsmod | sort
File: /etc/systemd/system/wl-reload.service
# cat /etc/systemd/system/wl-reload.service
#systemctl enable wl-reload.service
#systemctl start wl-reload.service
#systemctl stop wl-reload.service
#systemctl disable wl-reload.service
#systemctl status wl-reload.service
#systemctl daemon-reload

[Unit]
Description=WL driver reload service
WantedBy=multi-user.target  
After=dbus.service network-pre.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/sleep 5
ExecStart=/usr/bin/modprobe wl

[Install]
WantedBy=multi-user.target
● wl-reload.service - WL driver reload service
Loaded: loaded (/etc/systemd/system/wl-reload.service; enabled; vendor preset: disabled)
Active: active (exited) since Tue 2021-09-14 00:14:40 MDT; 19h ago
Process: 517 ExecStart=/usr/bin/sleep 5 (code=exited, status=0/SUCCESS)
Process: 3923 ExecStart=/usr/bin/modprobe wl (code=exited, status=0/SUCCESS)
Main PID: 3923 (code=exited, status=0/SUCCESS)
CPU: 4ms

Sep 14 00:14:35 mike-hpprobook640g1 systemd[1]: Starting WL driver reload service...
Sep 14 00:14:40 mike-hpprobook640g1 systemd[1]: Finished WL driver reload service.
/etc/modprobe.d/nobeep.conf:blacklist pcspkr
/etc/modprobe.d/noime.conf:blacklist mei
/etc/modprobe.d/noime.conf:blacklist mei_me
/etc/modprobe.d/fixwifi.conf:blacklist b43  
/etc/modprobe.d/fixwifi.conf:blacklist bcma
/etc/modprobe.d/fixwifi.conf:blacklist hp_wmi
/etc/modprobe.d/fixwifi.conf:blacklist wmi
/etc/modprobe.d/fixwifi.conf:blacklist ssb  
/etc/modprobe.d/fixwifi.conf:blacklist mxm_wmi
/etc/modprobe.d/fixwifi.conf:blacklist wmi_bmof
/usr/lib/modprobe.d/nvdimm-security.conf:install libnvdimm /usr/bin/ndctl load-keys ; /sbin/modprobe --ignore-
install libnvdimm $CMDLINE_OPTS
/usr/lib/modprobe.d/broadcom-wl-dkms.conf:blacklist b43
/usr/lib/modprobe.d/broadcom-wl-dkms.conf:blacklist b43legacy
/usr/lib/modprobe.d/broadcom-wl-dkms.conf:blacklist bcm43xx
/usr/lib/modprobe.d/broadcom-wl-dkms.conf:blacklist bcma
/usr/lib/modprobe.d/broadcom-wl-dkms.conf:blacklist brcm80211
/usr/lib/modprobe.d/broadcom-wl-dkms.conf:blacklist brcmfmac
/usr/lib/modprobe.d/broadcom-wl-dkms.conf:blacklist brcmsmac
/usr/lib/modprobe.d/broadcom-wl-dkms.conf:blacklist ssb
/usr/lib/modprobe.d/bluetooth-usb.conf:options btusb reset=1
/usr/lib/modprobe.d/systemd.conf:options bonding max_bonds=0
/usr/lib/modprobe.d/systemd.conf:options dummy numdummies=0
/usr/lib/modprobe.d/nobeep.conf:blacklist pcspkr
/usr/lib/modprobe.d/noime.conf:blacklist mei
/usr/lib/modprobe.d/noime.conf:blacklist mei_me
aesni_intel           380928  4
af_alg                 36864  6 algif_hash,algif_skcipher
agpgart                45056  5 intel_agp,intel_gtt,radeon,ttm,nouveau
algif_hash             20480  1
algif_skcipher         16384  1
amdgpu               8433664  0
atkbd                  36864  0
blake2b_generic        20480  0
bluetooth             761856  45 btrtl,btintel,btbcm,bnep,btusb,rfcomm
bnep                   32768  2
bpf_preload            16384  0
btbcm                  16384  1 btusb
btintel                36864  1 btusb
btrfs                1744896  1
btrtl                  28672  1 btusb
btusb                  69632  0
cec                    81920  2 drm_kms_helper,i915
cfg80211             1069056  1 wl
cmac                   16384  3
coretemp               20480  0
crc16                  16384  1 bluetooth
crc32c_generic         16384  0
crc32c_intel           24576  2
crc32_pclmul           16384  0
crct10dif_pclmul       16384  1
cryptd                 28672  3 crypto_simd,ghash_clmulni_intel
crypto_simd            16384  1 aesni_intel
crypto_user            20480  0
drm                   634880  20 gpu_sched,drm_kms_helper,amdgpu,radeon,drm_ttm_helper,i915,ttm,nouveau
drm_kms_helper        331776  4 amdgpu,radeon,i915,nouveau
drm_ttm_helper         16384  3 amdgpu,radeon,nouveau
e1000e                331776  0
ecc                    45056  1 ecdh_generic
ecdh_generic           16384  2 bluetooth
fat                    90112  1 vfat
fb_sys_fops            16384  1 drm_kms_helper
fuse                  176128  3
ghash_clmulni_intel    16384  0
gpu_sched              53248  1 amdgpu
hp_accel               28672  0
i2c_algo_bit           16384  4 amdgpu,radeon,i915,nouveau
i2c_i801               36864  0
i2c_smbus              20480  1 i2c_i801
i8042                  36864  1 hp_accel
i915                 3198976  53
intel_agp              24576  0
intel_cstate           20480  0
intel_gtt              24576  2 intel_agp,i915
intel_pmc_bxt          16384  1 iTCO_wdt
intel_powerclamp       20480  0
intel_rapl_common      32768  1 intel_rapl_msr
intel_rapl_msr         20480  0
intel_spi              24576  1 intel_spi_platform
intel_spi_platform     16384  0
intel_uncore          200704  0
ip6t_REJECT            16384  6
ip_tables              32768  0
ipt_REJECT             16384  6
irqbypass              16384  1 kvm
iTCO_vendor_support    16384  1 iTCO_wdt
iTCO_wdt               16384  0
joydev                 28672  0
kvm                  1138688  1 kvm_intel
kvm_intel             348160  0
ledtrig_audio          16384  2 snd_ctl_led,snd_hda_codec_generic
libcrc32c              16384  4 nf_conntrack,nf_nat,btrfs,nf_tables
libps2                 24576  2 atkbd,psmouse
lis3lv02d              28672  1 hp_accel
lpc_ich                28672  0
mac_hid                16384  0
mc                     77824  4 videodev,videobuf2_v4l2,uvcvideo,videobuf2_common
mmc_core              208896  1 rtsx_pci_sdmmc
Module                  Size  Used by
mousedev               24576  0
mtd                    86016  3 spi_nor,intel_spi
mxm_wmi                16384  1 nouveau
nf_conntrack          184320  1 nf_nat
nf_defrag_ipv4         16384  1 nf_conntrack
nf_defrag_ipv6         24576  1 nf_conntrack
nf_nat                 53248  1 nft_chain_nat
nfnetlink              20480  2 nft_compat,nf_tables
nf_reject_ipv4         16384  1 ipt_REJECT
nf_reject_ipv6         20480  1 ip6t_REJECT
nf_tables             286720  231 nft_compat,nft_counter,nft_chain_nat
nft_chain_nat          16384  6
nft_compat             20480  53
nft_counter            16384  172
nouveau              2572288  0
ns                     32768  1 qrtr
parport                73728  2 parport_pc,ppdev
parport_pc             53248  0
ppdev                  24576  0
psmouse               196608  0
qrtr                   24576  4
radeon               1785856  0
raid6_pq              122880  1 btrfs
rapl                   16384  0
rfcomm                 94208  16
rfkill                 32768  8 bluetooth,cfg80211
rng_core               16384  1 tpm
rtsx_pci              114688  1 rtsx_pci_sdmmc
rtsx_pci_sdmmc         32768  0
serio                  28672  10 serio_raw,atkbd,hp_accel,psmouse,i8042
serio_raw              20480  0
snd                   122880  17 snd_ctl_led,snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,s
nd_hwdep,snd_hda_intel,snd_hda_codec,snd_timer,snd_pcm,snd_hda_codec_idt
snd_ctl_led            24576  0
snd_hda_codec         184320  4 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec_idt
snd_hda_codec_generic   110592  1 snd_hda_codec_idt
snd_hda_codec_hdmi     86016  1
snd_hda_codec_idt      73728  1
snd_hda_core          114688  5 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda_c
odec_idt
snd_hda_intel          57344  2
snd_hrtimer            16384  1
snd_hwdep              16384  1 snd_hda_codec
snd_intel_dspcfg       28672  1 snd_hda_intel
snd_intel_sdw_acpi     20480  1 snd_intel_dspcfg
snd_pcm               167936  4 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda_core
snd_seq                94208  7 snd_seq_dummy
snd_seq_device         16384  1 snd_seq
snd_seq_dummy          16384  0
snd_timer              49152  3 snd_seq,snd_hrtimer,snd_pcm
soundcore              16384  2 snd_ctl_led,snd
spi_nor               114688  1 intel_spi
syscopyarea            16384  1 drm_kms_helper
sysfillrect            16384  1 drm_kms_helper
sysimgblt              16384  1 drm_kms_helper
tpm                    90112  3 tpm_tis,tpm_infineon,tpm_tis_core
tpm_infineon           20480  0
tpm_tis                16384  0
tpm_tis_core           32768  1 tpm_tis
ttm                    90112  5 amdgpu,radeon,drm_ttm_helper,i915,nouveau
uinput                 24576  0
uvcvideo              126976  0
vboxdrv               557056  2 vboxnetadp,vboxnetflt
vboxnetadp             28672  0
vboxnetflt             32768  0
vfat                   24576  1
video                  53248  2 i915,nouveau
videobuf2_common       73728  4 videobuf2_vmalloc,videobuf2_v4l2,uvcvideo,videobuf2_memops
videobuf2_memops       20480  1 videobuf2_vmalloc
videobuf2_v4l2         36864  1 uvcvideo
videobuf2_vmalloc      20480  1 uvcvideo
videodev              282624  3 videobuf2_v4l2,uvcvideo,videobuf2_common
wireless_hotkey        16384  0
wl                   6471680  0
wmi                    36864  2 mxm_wmi,nouveau
x86_pkg_temp_thermal    20480  0
xhci_pci               24576  0
xhci_pci_renesas       20480  1 xhci_pci
xor                    24576  1 btrfs
x_tables               57344  9 xt_cgroup,nft_compat,xt_multiport,xt_tcpudp,xt_owner,ipt_REJECT,ip_tables,ip6t
_REJECT,xt_mark
xt_cgroup              16384  11
xt_mark                16384  8
xt_multiport           20480  4
xt_owner               16384  8
xt_tcpudp              20480  10
zram                   36864  2

No, I've tried that where wl is not in the blacklist or even in the modprobe -r and it doesn't work. It seems wl has to be removed and reloaded.

I've also found that by doing it with the wl-reload.service setup (where the blacklist is being done), that I have to run my script to start the process of it doing "configuring interface" but that will still fail, so I have to then run my script a second time to get it to work.

This is just weird to me. Note, when I had Manjaro on this laptop, I do remember I had to find a driver that worked, but did not have this weird behavior like this.

1 Like

If you are still having issues, I would also suggest testing a blacklist on your Bluetooth module btusb. Sometimes if Bluetooth is loaded before your WiFi driver the WiFi will not load correctly. If your keyboard or mouse uses Bluetooth this would obviously be problematic (unless you swapped in standard USB hardware). This a a good troubleshooting step to perform to determine if Bluetooth is interfering with your WiFi.

1 Like

So I tried this (blacklisting first just btusb, and then all of them like btbcm, btintel) and it didn't change anything. Tried enabling and disabling various combinations of wifi modules, and nothing seemed to work. Finally put everything back to how it was originally, and set up in the sudoers file to allow my account to run my fixwifi script without a password. While its a hack, it at least works now where I don't have to enter a password (right after logging in with a password) and my Wifi autoconnects as I want. I may temporarily dual boot Manjaro and get Wifi working then look at the same output you had me show, just to see if I can see any differences there. But for now, my hack makes me happy, so I may not mess with it at all (unless I'm really bored and start losing sleep thinking more about this... :laughing: ).

@tbg - Thanks a ton for your quick assistance, very appreciated (and I learned a bunch about systemd scripts and modprobe going through this exercise)

Glad you learned lots, wish we could have found the cause.

You're very welcome.

1 Like

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.