Subject: Re: [BUG] Re: [PATCH] brcmfmac: use ISO3166 country code and 0 rev as fallback

From: Shawn Guo <[email-masked]>
Date: Thu, 9 Sep 2021 10:20:37 +0800

On Wed, Sep 08, 2021 at 07:08:06AM +0200, Soeren Moch wrote:
> Hi Shawn,
> 
> On 08.09.21 03:00, Shawn Guo wrote:
> > Hi Soeren,
> >
> > On Tue, Sep 07, 2021 at 09:22:52PM +0200, Soeren Moch wrote:
> >> On 25.04.21 13:02, Shawn Guo wrote:
> >>> Instead of aborting country code setup in firmware, use ISO3166 country
> >>> code and 0 rev as fallback, when country_codes mapping table is not
> >>> configured.  This fallback saves the country_codes table setup for recent
> >>> brcmfmac chipsets/firmwares, which just use ISO3166 code and require no
> >>> revision number.
> >> This patch breaks wireless support on RockPro64. At least the access
> >> point is not usable, station mode not tested.
> >>
> >> brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4359/9 wl0: Mar  6 2017
> >> 10:16:06 version 9.87.51.7 (r686312) FWID 01-4dcc75d9
> >>
> >> Reverting this patch makes the access point show up again with linux-5.14 .
> > Sorry for breaking your device!
> >
> > So it sounds like you do not have country_codes configured for your
> > BCM4359/9 device, while it needs particular `rev` setup for the ccode
> > you are testing with.  It was "working" likely because you have a static
> > `ccode` and `regrev` setting in nvram file.
> It always has been a mystery to me how country codes are configured for
> this device. Before I read your patch I did not even know that a
> translation table is required. Is there some documentation how this is
> supposed to work? Not sure if this makes a difference, BCM4359/9 is a
> Cypress device I think, I added mainline support for it some time ago.

One way to add the translation table is using DT.  You can find more
info and example in following commits:

b41936227078 ("dt-bindings: bcm4329-fmac: add optional brcm,ccode-map")
1a3ac5c651a0 ("brcmfmac: support parse country code map from DT")

> 
> I have installed different firmware files, brcmfmac4359-sdio.clm_blob,
> brcmfmac4359-sdio.bin, brcmfmac4359-sdio.txt, the latter also linked as
> brcmfmac4359-sdio.pine64,rockpro64-2.1.txt. This probably is the nvram
> file. ccode and regrev are set to zero, which probably means
> 'international save settings".

I'm not sure how this 'international save settings' works for brcmfmac
devices.  Do you have more info or any pointers?

> > But roaming to a different
> > region will mostly get you a broken WiFi support.  Is it possible to set
> > up the country_codes for your device to get it work properly?
> In linux-5.13 it worked, probably with save settings (not all channels
> selectable, limited tx power), with linux-5.14 it stopped working, so it
> is a regression.
> I personally would like to learn how all this is configured properly.
> For general use I think save settings are better than no wifi at all
> with this patch. This fallback to ISO CC seams to work with newer
> (Synaptics?) devices only.

I do not mind you send a reverting if you have problem to add a proper
translation table for your device.  But that would mean I have to add
a pretty "meaningless" translation table for my devices :(

Shawn