Wifi not working with firmware installed in ubuntu 20.04.3

rock pi x 4g+32g
Ubuntu 20.04.3 LTS
sudo apt-get upgrade
copy firmware files inside https://dl.radxa.com/rockpix/drivers/firmware/AP6255_BT_WIFI_Firmware.zip to /lib/firmware/brcm

root@nihui-ROCK-Pi-X:/lib/firmware/brcm# dmesg | grep brcm
[    6.064930] Bluetooth: hci0: BCM4345C0 'brcm/BCM4345C0.hcd' Patch
[    6.559207] brcmfmac: brcmf_chip_tcm_rambase: unknown chip: BCM43454/6
[    6.559226] brcmfmac: brcmf_chip_get_raminfo: RAM base not provided with ARM CR4 core
[    6.559235] brcmfmac: brcmf_sdio_probe_attach: brcmf_chip_attach failed!
[    6.559245] brcmfmac: brcmf_sdio_probe: brcmf_sdio_probe_attach failed
[    6.567628] brcmfmac: brcmf_ops_sdio_probe: F2 error, probe failed -19...
[    6.567965] usbcore: registered new interface driver brcmfmac
nihui@nihui-ROCK-Pi-X:/lib/firmware/brcm$ ls
 BCM-0bb4-0306.hcd          brcmfmac4330-sdio.Prowise-PT301.txt           brcmfmac43430-sdio.bin                              brcmfmac43569.bin
 bcm4329-fullmac-4.bin      brcmfmac43340-sdio.bin                        brcmfmac43430-sdio.Hampoo-D2D3_Vi8A1.txt            brcmfmac4356-pcie.bin
 BCM4345C0.hcd              brcmfmac43340-sdio.meegopad-t08.txt           brcmfmac43430-sdio.MUR1DX.txt                       brcmfmac4356-pcie.gpd-win-pocket.txt
 bcm43xx-0.fw               brcmfmac43340-sdio.pov-tab-p1006w-data.txt    brcmfmac43430-sdio.raspberrypi,3-model-b.txt        brcmfmac4356-sdio.bin
 bcm43xx_hdr-0.fw           brcmfmac4334-sdio.bin                         brcmfmac43455c0-sdio.bin                            brcmfmac43570-pcie.bin
 brcmfmac43143.bin          brcmfmac4335-sdio.bin                         brcmfmac43455-sdio.bin                              brcmfmac4358-pcie.bin
 brcmfmac43143-sdio.bin     brcmfmac43362-sdio.bin                       'brcmfmac43455-sdio.MINIX-NEO Z83-4.txt'             brcmfmac43602-pcie.ap.bin
 brcmfmac43236b.bin         brcmfmac43362-sdio.cubietech,cubietruck.txt   brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt   brcmfmac43602-pcie.bin
 brcmfmac43241b0-sdio.bin   brcmfmac43362-sdio.lemaker,bananapro.txt      brcmfmac43455-sdio.raspberrypi,4-model-b.txt        brcmfmac4366b-pcie.bin
 brcmfmac43241b4-sdio.bin   brcmfmac4339-sdio.bin                        'brcmfmac43455-sdio.ROCK Pi-ROCK Pi X.txt'           brcmfmac4366c-pcie.bin
 brcmfmac43241b5-sdio.bin   brcmfmac43430a0-sdio.bin                      brcmfmac43455-sdio.txt                              brcmfmac4371-pcie.bin
 brcmfmac43242a.bin         brcmfmac43430a0-sdio.jumper-ezpad-mini3.txt   brcmfmac4350c2-pcie.bin                             brcmfmac4373.bin
 brcmfmac4329-sdio.bin     'brcmfmac43430a0-sdio.ONDA-V80 PLUS.txt'       brcmfmac4350-pcie.bin                               brcmfmac4373-sdio.bin
 brcmfmac4330-sdio.bin      brcmfmac43430-sdio.AP6212.txt                 brcmfmac4354-sdio.bin

bios version is V12_X64_20200924

tried ubuntu 20.04.1 and 20.04.2 but got the same issue

tried with kernel 5.4.0 and 5.13.0 :frowning:

I found that the WIFI chipset is AP6254 instead of AP6255

the wifi firmware for AP6254 could be found at

however, brcmfmac module did not recognize BCM43454/6 and did not load firmware later

I have the exact same problem. WiFi was disabled in bios as default when I got the board. Enabling this changed nothing. Does not show up in either lsusb or lspci.
I’m using Xubuntu 20.04.3
uname -a

Linux knuxyl-ROCK-Pi-X 5.13.0-28-generic #31~20.04.1-Ubuntu SMP Wed Jan 19 14:08:10 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

dmesg output

[    6.175651] brcmfmac: brcmf_chip_tcm_rambase: unknown chip: BCM43454/6
[    6.175675] brcmfmac: brcmf_chip_get_raminfo: RAM base not provided with ARM CR4 core
[    6.175684] brcmfmac: brcmf_sdio_probe_attach: brcmf_chip_attach failed!
[    6.175693] brcmfmac: brcmf_sdio_probe: brcmf_sdio_probe_attach failed
[    6.175922] brcmfmac: brcmf_ops_sdio_probe: F2 error, probe failed -19...

ls /lib/firmware/brcm/

BCM-0bb4-0306.hcd             brcmfmac43242a.bin                             brcmfmac43455-sdio.bin.bak                          brcmfmac43602-pcie.bin
 bcm4329-fullmac-4.bin         brcmfmac4329-sdio.bin                          brcmfmac43455-sdio.clm_blob                         brcmfmac4366b-pcie.bin
 BCM4345C0.hcd                 brcmfmac4330-sdio.bin                         'brcmfmac43455-sdio.MINIX-NEO Z83-4.txt'             brcmfmac4366c-pcie.bin
 BCM4356A2-0489-e097.hcd       brcmfmac4330-sdio.Prowise-PT301.txt           'brcmfmac43455-sdio.Radxa-ROCK Pi X.txt'             brcmfmac4371-pcie.bin
 BCM4356A2-04ca-2013.hcd       brcmfmac4330-sdio.txt                          brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt   brcmfmac4373.bin
 BCM4356A2-04ca-2014.hcd       brcmfmac43340-sdio.bin                         brcmfmac43455-sdio.raspberrypi,4-model-b.txt        brcmfmac4373-sdio.bin
 BCM4356A2-04f2-b4a2.hcd       brcmfmac43340-sdio.meegopad-t08.txt           'brcmfmac43455-sdio.ROCK Pi-ROCK Pi X.txt'          'fw_bcm43455c0_ag (1).bin'
 BCM4356A2-0a5c-640a.hcd       brcmfmac43340-sdio.pov-tab-p1006w-data.txt     brcmfmac43455-sdio.txt                              fw_bcm43455c0_ag_apsta.bin
 BCM4356A2-0a5c-640e.hcd       brcmfmac4334-sdio.bin                          brcmfmac4350c2-pcie.bin                             fw_bcm43455c0_ag.bin
 BCM4356A2-0b05-181d.hcd       brcmfmac4335-sdio.bin                          brcmfmac4350-pcie.bin                               fw_bcm43455c0_ag_mfg.bin
 BCM4356A2-13d3-3473.hcd       brcmfmac43362-sdio.bin                         brcmfmac4354-sdio.bin                               fw_bcm43456c5_ag.20190109.bin
 BCM4356A2-13d3-3485.hcd       brcmfmac43362-sdio.cubietech,cubietruck.txt    brcmfmac4354-sdio.clm_blob                          fw_bcm43456c5_ag.20190426.bin
 BCM4356A2-13d3-3488.hcd       brcmfmac43362-sdio.lemaker,bananapro.txt       brcmfmac43569.bin                                   fw_bcm43456c5_ag_apsta.20190426.bin
 BCM4356A2-13d3-3492.hcd       brcmfmac4339-sdio.bin                          brcmfmac4356-pcie.bin                               fw_bcm43456c5_ag_apsta.bin
 BCM4356A2-2b54-5600.hcd       brcmfmac43430a0-sdio.bin                       brcmfmac4356-pcie.clm_blob                          fw_bcm43456c5_ag.bin
 BCM4356A2-2b54-5601.hcd       brcmfmac43430a0-sdio.jumper-ezpad-mini3.txt    brcmfmac4356-pcie.gpd-win-pocket.txt                fw_bcm43456c5_ag_mfg.bin
 bcm43xx-0.fw                 'brcmfmac43430a0-sdio.ONDA-V80 PLUS.txt'        brcmfmac4356-pcie.txt                               fw_bcm43456c5_ag_p2p.bin
 bcm43xx_hdr-0.fw              brcmfmac43430-sdio.AP6212.txt                  brcmfmac4356-sdio.bin                               LICENCE
 brcmfmac43012-sdio.bin        brcmfmac43430-sdio.bin                         brcmfmac4356-sdio.clm_blob                          nvram_ap6254.txt
 brcmfmac43012-sdio.clm_blob   brcmfmac43430-sdio.clm_blob                    brcmfmac43570-pcie.bin                              nvram_ap6255.txt
 brcmfmac43143.bin             brcmfmac43430-sdio.Hampoo-D2D3_Vi8A1.txt       brcmfmac4358-pcie.bin                               nvram_ap6256.txt
 brcmfmac43143-sdio.bin        brcmfmac43430-sdio.MUR1DX.txt                  brcmfmac4359-pcie.bin                               nvram_bcm43456c5_ag.20190426.bin
 brcmfmac43236b.bin            brcmfmac43430-sdio.raspberrypi,3-model-b.txt   brcmfmac4359-pcie.clm_blob                          README.md
 brcmfmac43241b0-sdio.bin      brcmfmac43455c0-sdio.bin                       brcmfmac4359-sdio.bin                               versions
 brcmfmac43241b4-sdio.bin      brcmfmac43455-sdio                             brcmfmac4359-sdio.clm_blob
 brcmfmac43241b5-sdio.bin      brcmfmac43455-sdio.bin                         brcmfmac43602-pcie.ap.bin

I found where the error is being thrown in the source code
linux/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
Line 703

static u32 brcmf_chip_tcm_rambase(struct brcmf_chip_priv *ci)
{
	switch (ci->pub.chip) {
	case BRCM_CC_4345_CHIP_ID:
		return 0x198000;
	case BRCM_CC_4335_CHIP_ID:
	case BRCM_CC_4339_CHIP_ID:
	case BRCM_CC_4350_CHIP_ID:
	case BRCM_CC_4354_CHIP_ID:
	case BRCM_CC_4356_CHIP_ID:
	case BRCM_CC_43567_CHIP_ID:
	case BRCM_CC_43569_CHIP_ID:
	case BRCM_CC_43570_CHIP_ID:
	case BRCM_CC_4358_CHIP_ID:
	case BRCM_CC_43602_CHIP_ID:
	case BRCM_CC_4371_CHIP_ID:
		return 0x180000;
	case BRCM_CC_43465_CHIP_ID:
	case BRCM_CC_43525_CHIP_ID:
	case BRCM_CC_4365_CHIP_ID:
	case BRCM_CC_4366_CHIP_ID:
	case BRCM_CC_43664_CHIP_ID:
	case BRCM_CC_43666_CHIP_ID:
		return 0x200000;
	case BRCM_CC_4359_CHIP_ID:
		return (ci->pub.chiprev < 9) ? 0x180000 : 0x160000;
	case BRCM_CC_4364_CHIP_ID:
	case CY_CC_4373_CHIP_ID:
		return 0x160000;
	case CY_CC_43752_CHIP_ID:
		return 0x170000;
	default:
		brcmf_err("unknown chip: %s\n", ci->pub.name);
		break;
	}
	return INVALID_RAMBASE;
}

So it would seem the problem isn’t that we do not have the correct firmware but that this driver just doesn’t support this card. I can’t seem to find where it probes for the card id, I’m not familiar with C, but it seems that whatever this is
switch (ci->pub.chip)
is what is returning the value of the chip ip.
It seems brcmfmac is seeing this card as BCM43454/6, while bios says it is BCM4356.
Either way, BCM4354 and BCM4356 are both supported according to the source code, but kernel is showing a BCM43454/6.
The firmware files provided by Radxa are for BCM43455, which are not listed in the source code either, and neither is just BCM4355.
This is a weird mess and I hope anyone at Radxa could help explain what is going on.

Looks like it is your kernel not configured properly if you have the firmware in the right location.
Here is the correct setup where I based my findings, hope it helps.

I haven’t touched the board for a long time just waiting perhaps for the new processor with a better GPU.

Jun 18 19:35:07 rockpix kernel: [    8.114297] Bluetooth: hci0: BCM: chip id 107
Jun 18 19:35:07 rockpix kernel: [    8.116843] Bluetooth: hci0: BCM: features 0x2f
Jun 18 19:35:07 rockpix kernel: [    8.140053] Bluetooth: hci0: BCM4345C0
Jun 18 19:35:07 rockpix kernel: [    8.140069] Bluetooth: hci0: BCM4345C0 (003.001.025) build 0000
Jun 18 19:35:07 rockpix kernel: [    8.145826] Bluetooth: hci0: BCM4345C0 'brcm/BCM4345C0.hcd' Patch
Jun 18 19:35:07 rockpix kernel: [    8.315205] input: chtnau8824 Headset as /devices/pci0000:00/808622A8:00/cht-bsw-nau8824/sound/card1/input13
Jun 18 19:35:08 rockpix kernel: [   10.222005] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
Jun 18 19:35:09 rockpix kernel: [   10.864833] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
Jun 18 19:35:09 rockpix kernel: [   10.864896] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
Jun 18 19:35:09 rockpix kernel: [   10.865243] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/6 wl0: Jun 12 2020 12:11:45 version 7.45.96.66 (c7a32cb@shgit) (r745790) FWID 01-cffa7eb1
Jun 18 19:35:13 rockpix kernel: [   15.471478] Bluetooth: hci0: BCM: failed to write clock (-56)
Jun 18 19:35:14 rockpix kernel: [   15.627154] Bluetooth: hci0: BCM4345C0 UART 37.4 MHz wlbga_ref_iLNA_iTR_eLG [Baseline: 0143]
Jun 18 19:35:14 rockpix kernel: [   15.627188] Bluetooth: hci0: BCM4345C0 (003.001.025) build 0230
Jun 18 19:35:16 rockpix kernel: [   18.125987] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Jun 18 19:38:55 rockpix kernel: [    0.000000] Linux version 5.12.2-rockpix (alex@svn) (gcc (Ubuntu 8.4.0-1ubuntu1~18.04) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.30) #3 SMP Sat May 8 15:34:35 -03 2021
Jun 18 19:38:55 rockpix kernel: [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.12.2-rockpix root=UUID=a8baf400-01c5-4322-8b20-f2b9e79f3f1a rw no_console_suspend consoleblank=0

well we’re both using the stock kernel in ubuntu/xubuntu. what are you using? manjaro was giving me the exact same error.

If i recall correctly it was mainline kernel (at that time) with some optimizations for embedded systems.
The stock kernel should work. Maybe you changed something in the bios. I don’t recommend any changes unless you have the tools to restore the BIOS.

My board is an old revision. (v1.4)

the only change i made was boot from USB as you see in the log, which is slower than eMMC.

i did not change anything in the bios. it was after i was having problems with the wifi driver i decided to look and saw bcm4356 was disabled in the bios, so i enabled it. it didnt change anything so i restored bios back to defaults. this is definitely not a user error.

Please, hw version?

rock pi x model b v1.41

According to Radxa v1.41 just fixed the GPIO pins voltage.
I would suggest triple check:

  • kernel config
  • firmware location

I still think is a kernel issue.
5.13.0-28-generic #31~20.04.1-Ubuntu SMP Wed Jan 19 14:08:10 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux seems to be an HWE SERVER and might not have the driver enabled.

Debian has the exact same problem
brcmfmac: brcmf_chip_tcm_rambase: unknown chip: BCM43454/6

The firmware files being in the correct location is irrelevant at this point, brcmfmac is not recognizing the card, so it’s not even trying to load a firmware file.

Looking in the bios, In Advanced-System Component, it says
PCIe based WLAN module - BCM4356 BCM4356 [Enabled]

By highlighting BCM4356 it says this
By enabling this option, the corresponding GPIO configuration is performed to support this add-in card on CerryTrail - RVP.

FYI, there seems to be a kernel issue.

Today I built stable kernel 5.16.6 for rockpix, and it seems to be an improvement over 5.12.2, IF it wasn’t just for a crowded channel at that time.

Yesterday:

wlan0     IEEE 802.11  ESSID:"FIBER-5G"  
          Mode:Managed  Frequency:5.5 GHz  Access Point: 94:EA:EA:AA:87:8F   
          Bit Rate=6 Mb/s   Tx-Power=31 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
          Link Quality=63/70  Signal level=-47 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

Today:

wlan0     IEEE 802.11  ESSID:"FIBER-5G"  
          Mode:Managed  Frequency:5.5 GHz  Access Point: 94:EA:EA:AA:87:8F   
          Bit Rate=351 Mb/s   Tx-Power=31 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
          Link Quality=61/70  Signal level=-49 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

ubuntu@rockpix:~$ uname -ra
Linux rockpix 5.16.6-rockpix #1 SMP PREEMPT Sat Feb 5 10:57:32 -03 2022 x86_64 x86_64 x86_64 GNU/Linux

If you have not solved it yourself and wish I can push my customized ubuntu deb package to github, good luck.

I would rather have the build instructions for the kernel because radxa’s wiki makes no mention of requiring a custom built kernel for running an x86 ubuntu.
Where are you getting the kernel sources from? Mainline? Do they already have a defconfig or something for the rock pi x?
I can try your deb’s, but I’d like to know how you built it yourself. thanks!

No problem. This is a kernel issue, nothing to do with the board maker, all the sbc that use this chip are affected. You should blame Broadcom for overlooking their driver.
You can use Ubuntu’s defconfig and the usual instructions to build the kernel.
Preparing and pushing the deb and patch.

Kernel source: https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.16.7.tar.xz

You can try out the deb package in your v1.41 to confirm it works.

Please:

  • make a backup of your data (EFI grub files and relevant data)

  • install with:

    sudo dpkg -i linux-image-5.16.6-rockpix_5.16.6-rockpix-1_amd64.deb

If you plan to build your kernel, just apply the patch and use your defconfig.
If you use ubuntu’s kernel source you have to apply the patch manually, it is fairly easy.

Make sure you firmware is in:
/usr/lib/firmware/brcm

Files:

Just in time, don’t reboot after installing the deb package.
Check /boot if initrd has been created for your Ubuntu distro, something like:

ubuntu@rockpix:~$ ls /boot
System.map-5.11.1-rockpix  config-5.16.6-rockpix      modules.gz
System.map-5.12.1-rockpix  core.gz                    modules64.gz
System.map-5.12.2-rockpix  corepure64.gz              rootfs.gz
System.map-5.16.6-rockpix  efi                        vmlinuz
boot-gui.txt               grub                       vmlinuz-5.11.1-rockpix
boot_ubuntu.tar.gz         initrd.img-5.11.1-rockpix  vmlinuz-5.12.1-rockpix
config-5.11.1-rockpix      initrd.img-5.12.1-rockpix  vmlinuz-5.12.2-rockpix
config-5.12.1-rockpix      initrd.img-5.12.2-rockpix  vmlinuz-5.16.6-rockpix
config-5.12.2-rockpix      initrd.img-5.16.6-rockpix  vmlinuz64

If initrd.img-5.16.6-rockpix has not been created for any reason, before reboot, type in:

sudo update-initramfs -u -k all

This will re-generate all initrd.img-X.XX.X for kernels found in /usr/lib/modules/
And examine the grub file generated in EFI (UEFI). I hope is not too late.

PS: that a good reason to boot from USB where you can edit and restore files at will

Bottable USB img file

I made a bootable USB img file with minimal ubuntu 20.04.3 LTS so you can boot from USB without messing your stock kernel in eMMC.

Hope it works with v1.41
Good luck

2 Likes