In the SSB SPROM a field set to all ones means the value
is not defined in the SPROM.
In case of the boardflags, we need to set them to zero
to avoid confusing drivers. For certain cards, leaving
the flags all set to 1 will prevent the card from transmitting,
as has been seen for the PCI version of a BCM4301.
This patch was included in mainline kernels with commit
4503183aa32e6886400d82282292934fa64a81b0.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
---
drivers/ssb/pci.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
+
if ((bus->chip_id & 0xFF00) == 0x4400) {
/* Workaround: The BCM44XX chip has a stupid revision
* number stored in the SPROM.
@@ -443,6 +444,10 @@ static int sprom_extract(struct ssb_bus *bus,
if (out->revision >= 4)
goto unsupported;
}
+ if (out->r1.boardflags_lo == 0xFFFF)
+ out->r1.boardflags_lo = 0; /* per specs */
+ if (out->r2.boardflags_hi == 0xFFFF)
+ out->r2.boardflags_hi = 0; /* per specs */