brcmfmac: use ISO3166 country code and 0 rev as fallback

Message ID 20210425110200.3050-1-shawn.guo@linaro.org
State New
Headers show
Series
  • brcmfmac: use ISO3166 country code and 0 rev as fallback
Related show

Commit Message

Shawn Guo April 25, 2021, 11:02 a.m.
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.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
 .../broadcom/brcm80211/brcmfmac/cfg80211.c      | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

Comments

Arend van Spriel April 28, 2021, 12:03 p.m. | #1
On 4/25/2021 1:02 PM, 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.


I am somewhat surprised, but with the brcm-spinoffs (cypress/infineon 
and synaptics) my understanding may have been surpassed by reality. 
Would you happen to know which chipsets/firmwares require only ISO3166 
code and no rev?

Regards,
Arend
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>

> ---

>   .../broadcom/brcm80211/brcmfmac/cfg80211.c      | 17 +++++++++++------

>   1 file changed, 11 insertions(+), 6 deletions(-)

> 

> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

> index f4405d7861b6..6cb09c7c37b6 100644

> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

> @@ -7442,18 +7442,23 @@ static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2],

>   	s32 found_index;

>   	int i;

>   

> -	country_codes = drvr->settings->country_codes;

> -	if (!country_codes) {

> -		brcmf_dbg(TRACE, "No country codes configured for device\n");

> -		return -EINVAL;

> -	}

> -

>   	if ((alpha2[0] == ccreq->country_abbrev[0]) &&

>   	    (alpha2[1] == ccreq->country_abbrev[1])) {

>   		brcmf_dbg(TRACE, "Country code already set\n");

>   		return -EAGAIN;

>   	}

>   

> +	country_codes = drvr->settings->country_codes;

> +	if (!country_codes) {

> +		brcmf_dbg(TRACE, "No country codes configured for device, using ISO3166 code and 0 rev\n");

> +		memset(ccreq, 0, sizeof(*ccreq));

> +		ccreq->country_abbrev[0] = alpha2[0];

> +		ccreq->country_abbrev[1] = alpha2[1];

> +		ccreq->ccode[0] = alpha2[0];

> +		ccreq->ccode[1] = alpha2[1];

> +		return 0;

> +	}

> +

>   	found_index = -1;

>   	for (i = 0; i < country_codes->table_size; i++) {

>   		cc = &country_codes->table[i];

>
Shawn Guo April 28, 2021, 12:42 p.m. | #2
On Wed, Apr 28, 2021 at 02:03:07PM +0200, Arend van Spriel wrote:
> On 4/25/2021 1:02 PM, 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.

> 

> I am somewhat surprised, but with the brcm-spinoffs (cypress/infineon and

> synaptics) my understanding may have been surpassed by reality. Would you

> happen to know which chipsets/firmwares require only ISO3166 code and no

> rev?


The "no rev" here actually means 'rev' field being zero.  The chipset
I'm running is a BCM43012 from Synaptics, I think.

Firmware: BCM43012/2 wl0: Apr 16 2021 15:25:36 version 18.35.389.63.t2 (wlan=r836194) FWID 01-a8c7bac

Shawn
Shawn Guo May 23, 2021, 6:12 a.m. | #3
On Wed, Apr 28, 2021 at 08:42:29PM +0800, Shawn Guo wrote:
> On Wed, Apr 28, 2021 at 02:03:07PM +0200, Arend van Spriel wrote:

> > On 4/25/2021 1:02 PM, 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.

> > 

> > I am somewhat surprised, but with the brcm-spinoffs (cypress/infineon and

> > synaptics) my understanding may have been surpassed by reality. Would you

> > happen to know which chipsets/firmwares require only ISO3166 code and no

> > rev?

> 

> The "no rev" here actually means 'rev' field being zero.  The chipset

> I'm running is a BCM43012 from Synaptics, I think.

> 

> Firmware: BCM43012/2 wl0: Apr 16 2021 15:25:36 version 18.35.389.63.t2 (wlan=r836194) FWID 01-a8c7bac


Arend,

Does it make sense?  Or is there actually a country code mapping table
I'm not aware of?

Shawn
Arend van Spriel May 23, 2021, 6:54 a.m. | #4
On May 23, 2021 8:12:29 AM Shawn Guo <shawn.guo@linaro.org> wrote:

> On Wed, Apr 28, 2021 at 08:42:29PM +0800, Shawn Guo wrote:

>> On Wed, Apr 28, 2021 at 02:03:07PM +0200, Arend van Spriel wrote:

>>> On 4/25/2021 1:02 PM, 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.

>>>

>>> I am somewhat surprised, but with the brcm-spinoffs (cypress/infineon and

>>> synaptics) my understanding may have been surpassed by reality. Would you

>>> happen to know which chipsets/firmwares require only ISO3166 code and no

>>> rev?

>>

>> The "no rev" here actually means 'rev' field being zero.  The chipset

>> I'm running is a BCM43012 from Synaptics, I think.

>>

>> Firmware: BCM43012/2 wl0: Apr 16 2021 15:25:36 version 18.35.389.63.t2 

>> (wlan=r836194) FWID 01-a8c7bac

>

> Arend,

>

> Does it make sense?  Or is there actually a country code mapping table

> I'm not aware of?


I recall the firmware always include a rev 0 for each country code. I will 
have to ask internally whether that may be used for any chipset. If so, it 
seems reasonable to use rev 0 as fallback when no mapping table is provided.

Regards,
Arend




-- 
This electronic communication and the information and any files transmitted 
with it, or attached to it, are confidential and are intended solely for 
the use of the individual or entity to whom it is addressed and may contain 
information that is confidential, legally privileged, protected by privacy 
laws, or otherwise restricted from disclosure to anyone else. If you are 
not the intended recipient or the person responsible for delivering the 
e-mail to the intended recipient, you are hereby notified that any use, 
copying, distributing, dissemination, forwarding, printing, or copying of 
this e-mail is strictly prohibited. If you received this e-mail in error, 
please return the e-mail to the sender, delete it from your computer, and 
destroy any printed copy of it.
Kalle Valo June 15, 2021, 10:36 a.m. | #5
Shawn Guo <shawn.guo@linaro.org> 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.

> 

> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>


Patch applied to wireless-drivers-next.git, thanks.

b0b524f079a2 brcmfmac: use ISO3166 country code and 0 rev as fallback

-- 
https://patchwork.kernel.org/project/linux-wireless/patch/20210425110200.3050-1-shawn.guo@linaro.org/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

Patch

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index f4405d7861b6..6cb09c7c37b6 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -7442,18 +7442,23 @@  static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2],
 	s32 found_index;
 	int i;
 
-	country_codes = drvr->settings->country_codes;
-	if (!country_codes) {
-		brcmf_dbg(TRACE, "No country codes configured for device\n");
-		return -EINVAL;
-	}
-
 	if ((alpha2[0] == ccreq->country_abbrev[0]) &&
 	    (alpha2[1] == ccreq->country_abbrev[1])) {
 		brcmf_dbg(TRACE, "Country code already set\n");
 		return -EAGAIN;
 	}
 
+	country_codes = drvr->settings->country_codes;
+	if (!country_codes) {
+		brcmf_dbg(TRACE, "No country codes configured for device, using ISO3166 code and 0 rev\n");
+		memset(ccreq, 0, sizeof(*ccreq));
+		ccreq->country_abbrev[0] = alpha2[0];
+		ccreq->country_abbrev[1] = alpha2[1];
+		ccreq->ccode[0] = alpha2[0];
+		ccreq->ccode[1] = alpha2[1];
+		return 0;
+	}
+
 	found_index = -1;
 	for (i = 0; i < country_codes->table_size; i++) {
 		cc = &country_codes->table[i];