BCM57765 - Inconsistent Internet on MacBook Pro Mid 2012

After installing Linux Manjaro with Kernel 4.19 on my MacBook Pro Mid 2012 the internet connection is always unstable and breaks down at some point. I also tried to connect with a LAN cable to my Internet, but the same issue was still existing. I already followed the instructions from these questions:


and

But they didn't solve my problem yet. I was also using Kernel Version 5.4 before and with this version I had the same issue. How can I proceed now?
Kind regards.

06: PCI 300.0: 0282 WLAN controller                             
  [Created at pci.386]
  Unique ID: hAO_.ItS6oQqaLzB
  Parent ID: qTvu.mgUbsEukkq3
  SysFS ID: /devices/pci0000:00/0000:00:1c.1/0000:03:00.0
  SysFS BusID: 0000:03:00.0
  Hardware Class: network
  Model: "Broadcom BCM4331 802.11a/b/g/n"
  Vendor: pci 0x14e4 "Broadcom"
  Device: pci 0x4331 "BCM4331 802.11a/b/g/n"
  SubVendor: pci 0x14e4 "Broadcom"
  SubDevice: pci 0x4331 
  Revision: 0x02
  Driver: "wl"
  Driver Modules: "wl"
  Device File: wlp3s0
  Features: WLAN
  Memory Range: 0xc1a00000-0xc1a03fff (rw,non-prefetchable)
  IRQ: 17 (80190 events)
  HW Address: 7c:d1:c3:83:67:82
  Permanent HW Address: 7c:d1:c3:83:67:82
  Link detected: yes
  WLAN channels: 1 2 3 4 5 6 7 8 9 10 11 12 13 34 36 38 40 42 44 46 48 52 56 60 64 100 104 108 112 116 120 124
  WLAN frequencies: 2.412 2.417 2.422 2.427 2.432 2.437 2.442 2.447 2.452 2.457 2.462 2.467 2.472 5.17 5.18 5.19 5.2 5.21 5.22 5.23 5.24 5.26 5.28 5.3 5.32 5.5 5.52 5.54 5.56 5.58 5.6 5.62
  WLAN encryption modes: WEP40 WEP104 TKIP CCMP
  WLAN authentication modes: open sharedkey wpa-psk wpa-eap
  Module Alias: "pci:v000014E4d00004331sv000014E4sd00004331bc02sc80i00"
  Driver Info #0:
    Driver Status: bcma is not active
    Driver Activation Cmd: "modprobe bcma"
  Driver Info #1:
    Driver Status: wl is active
    Driver Activation Cmd: "modprobe wl"
  Config Status: cfg=new, avail=yes, need=no, active=unknown
  Attached to: #20 (PCI bridge)

11: PCI 200.0: 0200 Ethernet controller
  [Created at pci.386]
  Unique ID: B35A.w8162_CTdHC
  Parent ID: z8Q3.krb5v5fKh33
  SysFS ID: /devices/pci0000:00/0000:00:1c.0/0000:02:00.0
  SysFS BusID: 0000:02:00.0
  Hardware Class: network
  Model: "Broadcom NetXtreme BCM57765 Gigabit Ethernet PCIe"
  Vendor: pci 0x14e4 "Broadcom"
  Device: pci 0x16b4 "NetXtreme BCM57765 Gigabit Ethernet PCIe"
  SubVendor: pci 0x14e4 "Broadcom"
  SubDevice: pci 0x16b4 
  Revision: 0x10
  Memory Range: 0xc1800000-0xc180ffff (ro,non-prefetchable)
  Memory Range: 0xc1810000-0xc181ffff (ro,non-prefetchable)
  Module Alias: "pci:v000014E4d000016B4sv000014E4sd000016B4bc02sc00i00"
  Driver Info #0:
    Driver Status: tg3 is not active
    Driver Activation Cmd: "modprobe tg3"
  Config Status: cfg=new, avail=yes, need=no, active=unknown
  Attached to: #9 (PCI bridge)

Lack of drivers: that's all: no solution :man_shrugging:

Due to Apple's highly customized chips.

Are there basically no drivers for my macbook at all?

Apple systems are often built with a tight integration between the OS and the hardware.

One may even get the thought that Apple is doing it on purpose - making it very difficult to use other OS on Apple branded hardware.

Before Apple started using Intel chips it was even more difficult to use other OS on Apple hardware.

After they begun with Intel and what became macOS they are building systems using hardware (maybe) made specific for Apple - custom specifications - making it a pain to use e.g. Linux on seemingly compatible hardware.

Don't blame Linux - if you wanna blame someone - blame Apple because they are doing a lot to protect the brand - one could get the thought - if it was easy to get Linux running on Apple branded hardware - they may loose customers when users throw away macOS and all the money making services build into the system.

2 Likes

If you load the generic driver for your wireless adapter basically it continues failing.

So the simplest answer I find is that the driver misses the code needed to run the adapter on the customized chipset that the MacBook has.

The driver is provided directly from Broadcom, so most likely Broadcom would have a conflict of interest if they made the custom device they created for Apple work on Linux.

So when Stallman says proprietary code is a mean of unfair control, he's very right. Bottomline: alway buy hardware that works on libre drivers.

2 Likes

What has been said above is sadly true. Apple goes out of their way to make it extremely difficult to install another OS on their hardware.

Sometimes with much effort your WiFi can be made to work. You can try the following steps and perhaps you may get lucky.

The following is a complicated procedure, but it may be your only hope for getting your WiFi to work.



If there is more than one AP in your vicinity (or you have a dual-band AP with a single SSID) this can result in dropped connections.

Your connection can be lost because of constant scanning by Network Manager, and confusion over which AP to connect with.

To eliminate this possibility you can lock your WiFi connection profile to the BSSID of your favored access point in Network Manager.

You can do this in Network Manager's "Wi-Fi" tab in your connection's properties settings.

There is a "BSSID" drop down field where you can select and lock your Wi-Fi to a single BSSID.



To automatically add new kernel boot parameters issue these commands:

sudo cp /etc/default/grub /etc/default/grub.bak && sudo sed '/^GRUB_CMDLINE_LINUX_DEFAULT=/s/"$/ ipv6.disable=1 ifnames=0"/g' -i /etc/default/grub && sudo update-grub 

After grub has finished updating proceed to the next step.



Disable Network Manager's WiFi power saving features with the following command:

echo -e "[connection]\nwifi.powersave = 0" | sudo tee /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf


Then, disable MAC Address Randomization in Network Manager with the following command:

echo -e "[device]\nwifi.scan-rand-mac-address=no" | sudo tee /etc/NetworkManager/conf.d/disable-random-mac.conf

After creating the new conf file, reboot both your router and your computer.

After restarting, test your connectivity. If there is no improvement follow on to the next steps.



It is very possible your modules are having issues with the order they are loaded at boot. Both the tg3 Ethernet module and Bluetooth can conflict with your WiFi when they are loaded first.

Therefore we are going to blacklist all broadcom modules and Bluetooth at boot.

With your favorite text editor create the following configuration file:

/etc/modprobe.d/bt-broadcom_blacklist.conf

Paste the following into the new conf file:

blacklist mac80211
blacklist brcm80211
blacklist brcmsmac
blacklist brcmfmac
blacklist cfg80211
blacklist lib80211_crypt_tkip
blacklist lib80211
blacklist bcma
blacklist ssb
blacklist b43legacy
blacklist b43
blacklist wl
blacklist tg3
blacklist btusb

Save the file and then reboot.



After rebooting you will need to manually modprobe your wifi, ethernet, and bluetooth modules (if you want to use all of them).

After creating the blacklist file your WiFi driver will not autoload at boot without modprobing.

First, load the wl driver manually via modprobing:

sudo systemctl stop NetworkManager; sudo rfkill unblock wifi; sudo modprobe wl; sudo ip link set wlan0 mode default; sudo ip link set wlan0 up; sudo systemctl start NetworkManager

Then test your connectivity for improvement with the wl driver, and if there is none reboot.

After rebooting this time test the b43 driver via modprobing with:

sudo systemctl stop NetworkManager;  sudo rfkill unblock wifi; sudo modprobe b43; sudo ip link set wlan0 mode default; sudo ip link set wlan0 up; sudo systemctl start NetworkManager

If either of those drivers work then the wl or b43 driver can be loaded automatically via a service at boot.

If you need to use either Bluetooth or your LAN connection they can be modprobed in this order (after your wifi).

sudo modprobe  btusb

Then:

sudo modprobe tg3

The LAN and Bluetooth modules can also be loaded after your WiFi driver in a service if they are required.

If this procedure works I can show you how to write a service to load the modules in the correct order.



The broadcom wl (or b43) driver can be made to load automatically after start up with a service.

Create the following service file with your favorite text editor:

/etc/systemd/system/broadcom.service

Add the following contents to the service file:

#/etc/systemd/system/broadcom.service
#sudo systemctl enable broadcom.service
#sudo systemctl start broadcom.service
#sudo systemctl status broadcom.service
#sudo systemctl stop broadcom.service
#sudo systemctl disable broadcom.service

[Unit]
Description=Load broadcom wifi module after start up
After=network-pre.target

[Service]
Type=simple
ExecStartPre=/usr/bin/sleep 3
ExecStart=/usr/bin/systemctl stop NetworkManager
ExecStart=/usr/bin/rfkill unblock wifi
ExecStart=/usr/bin/modprobe wl
ExecStart=/usr/bin/sleep 1
ExecStart=/usr/bin/ip link set wlan0 mode default
ExecStart=/usr/bin/sleep 1
ExecStart=/usr/bin/ip link set wlan0 up
ExecStart=/usr/bin/sleep 1
#ExecStart=/usr/bin/modprobe btusb
#ExecStart=/usr/bin/sleep 1
#ExecStart=/usr/bin/modprobe tg3
#ExecStart=/usr/bin/sleep 1
ExecStart=/usr/bin/systemctl start NetworkManager

[Install]
WantedBy=multi-user.target

Remove the pound signs (#) from these entries if you wish to load the LAN & BT modules.

#ExecStart=/usr/bin/modprobe btusb
#ExecStart=/usr/bin/sleep 1
#ExecStart=/usr/bin/modprobe tg3
#ExecStart=/usr/bin/sleep 1

Save the service file, and then enable the service with the following command:

sudo systemctl enable broadcom.service

Reboot and test the results.

If you find the b43 driver works better with your adapter, then simply substitute b43 in place of wl in the service to load the b43 module.



Good luck.

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

Forum kindly sponsored by