bcm63xx: sprom: override the PCI device ID
authorDaniel González Cabanelas <dgcbueu@gmail.com>
Tue, 2 Feb 2021 11:11:09 +0000 (12:11 +0100)
committerÁlvaro Fernández Rojas <noltari@gmail.com>
Tue, 2 Feb 2021 19:40:31 +0000 (20:40 +0100)
commita0e0e621cadbec02fddc1311d4a10b189b3c70f4
tree3b2638c0c7288ec2a4ff9a73756cc165746f00d4
parente23a90674e1b52a6eaa3d66a621f7ff612641243
bcm63xx: sprom: override the PCI device ID

The PCI device ID detected by the wifi drivers on devices using a fallback
SPROM is wrong. Currently the chipnum is used for this parameter.

Most SSB based Broadcom wifi chips are 2.4 and 5GHz capable. But on
devices without a physical SPROM, the only one way to detect if the device
suports both bands or only the 5GHz band, is by reading the device ID from
the fallback SPROM.

In some devices, this may lead to a non working wifi on a 5GHz-only card,
or in the best case a working 2.4GHz-only in a dual band wifi card.

The offset for the deviceid in SSB SPROMs is 0x0008, whereas in BCMA is
0x0060. This is true for any SPROM version.

Override the PCI device ID with the one defined at the fallback SPROM, to
detect the correct wifi card model and allow using the 5GHz band if
supported.

The patch has been tested with the following wifi radios:

BCM43222: b43: both 2.4/5GHz working
          brcm-wl: both 2.4/5GHz working

BCM43225: b43: 2.4GHz, working
 brcmsmac: working
 brcm-wl: it lacks support

BCM43217: b43: 2.4GHz, working
 brcmsmac: it lacks support
 brcm-wl: it lacks support

Signed-off-by: Daniel González Cabanelas <dgcbueu@gmail.com>
[amend commit description, rework patch to avoid using a new global variable
and keep ssb sprom extraction code as close to ssb/pci.c as possible]
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
target/linux/bcm63xx/patches-5.4/366-MIPS-BCM63XX-fallback-sprom-override-devid.patch [new file with mode: 0644]
target/linux/bcm63xx/patches-5.4/801-ssb_export_fallback_sprom.patch