Message ID | 20211218185643.158182-1-hdegoede@redhat.com |
---|---|
State | New |
Headers | show |
Series | brcmfmac: use ISO3166 country code and 0 rev as fallback on some devices | expand |
Hans de Goede <hdegoede@redhat.com> wrote: > This is a second attempt at honering the country code send out by access > points. This was first added in commit b0b524f079a2 ("brcmfmac: use > ISO3166 country code and 0 rev as fallback"). > > Subsequently this was reverted in commit 151a7c12c4fc ("Revert "brcmfmac: > use ISO3166 country code and 0 rev as fallback""), because it was causing > issues with AP mode on some brcmfmac models (specifically on BCM4359/9). > > Many devices ship with a nvram ccode value of X2/XT/XU/XV/ALL which are > all special world-wide compatibility ccode-s. Most of these world-wide > ccode-s allow passive scan mode only for 2.4GHz channels 12-14, > only enabling them when an AP is seen on them. > > But at least on brcmfmac43455 devices this is not working correctly, these > do not see accesspoints on channels 12-14 unless the ccode is changes to > a country where these channels are allowed. > > Translating received country codes to an ISO3166 country code and 0 rev > ccreq fixes devices using a brcmfmac43455 with a X2/XT/XU/XV/ALL ccode > not seeing accesspoints on channels 12-14. > > To avoid this causing issues on other brcmfmac models again, the > fallback is limited to only brcmfmac4345* chips this time. > > Cc: Shawn Guo <shawn.guo@linaro.org> > Cc: Soeren Moch <smoch@web.de> > Cc: Fabio Aiuto <fabioaiuto83@gmail.com> > Signed-off-by: Hans de Goede <hdegoede@redhat.com> Arend, can you take a look?
On 18.12.21 19:56, Hans de Goede wrote: > This is a second attempt at honering the country code send out by access > points. This was first added in commit b0b524f079a2 ("brcmfmac: use > ISO3166 country code and 0 rev as fallback"). > > Subsequently this was reverted in commit 151a7c12c4fc ("Revert "brcmfmac: > use ISO3166 country code and 0 rev as fallback""), because it was causing > issues with AP mode on some brcmfmac models (specifically on BCM4359/9). > > Many devices ship with a nvram ccode value of X2/XT/XU/XV/ALL which are > all special world-wide compatibility ccode-s. Most of these world-wide > ccode-s allow passive scan mode only for 2.4GHz channels 12-14, > only enabling them when an AP is seen on them. > > But at least on brcmfmac43455 devices this is not working correctly, these > do not see accesspoints on channels 12-14 unless the ccode is changes to > a country where these channels are allowed. > > Translating received country codes to an ISO3166 country code and 0 rev > ccreq fixes devices using a brcmfmac43455 with a X2/XT/XU/XV/ALL ccode > not seeing accesspoints on channels 12-14. > > To avoid this causing issues on other brcmfmac models again, the > fallback is limited to only brcmfmac4345* chips this time. > > Cc: Shawn Guo <shawn.guo@linaro.org> > Cc: Soeren Moch <smoch@web.de> > Cc: Fabio Aiuto <fabioaiuto83@gmail.com> > Signed-off-by: Hans de Goede <hdegoede@redhat.com> Unsurprisingly this does not hurt on BCM4359/9. So FWIW Tested-by: Soeren Moch <smoch@web.de> # on BCM4359/9 > --- > .../broadcom/brcm80211/brcmfmac/cfg80211.c | 33 +++++++++++++++---- > 1 file changed, 27 insertions(+), 6 deletions(-) > > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c > index fb727778312c..c10ac839dd26 100644 > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c > @@ -16,6 +16,7 @@ > #include <brcmu_utils.h> > #include <defs.h> > #include <brcmu_wifi.h> > +#include <brcm_hw_ids.h> > #include "core.h" > #include "debug.h" > #include "tracepoint.h" > @@ -7455,6 +7456,16 @@ int brcmf_cfg80211_wait_vif_event(struct brcmf_cfg80211_info *cfg, > vif_event_equals(event, action), timeout); > } > > +static bool brmcf_use_iso3166_ccode_fallback(struct brcmf_pub *drvr) > +{ > + switch (drvr->bus_if->chip) { > + case BRCM_CC_4345_CHIP_ID: > + return true; > + default: > + return false; > + } > +} > + > static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2], > struct brcmf_fil_country_le *ccreq) > { > @@ -7463,18 +7474,28 @@ 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) { > + if (brmcf_use_iso3166_ccode_fallback(drvr)) { > + 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; > + } > + > + brcmf_dbg(TRACE, "No country codes configured for device\n"); > + return -EINVAL; > + } > + > found_index = -1; > for (i = 0; i < country_codes->table_size; i++) { > cc = &country_codes->table[i];
Hans de Goede <hdegoede@redhat.com> wrote: > This is a second attempt at honering the country code send out by access > points. This was first added in commit b0b524f079a2 ("brcmfmac: use > ISO3166 country code and 0 rev as fallback"). > > Subsequently this was reverted in commit 151a7c12c4fc ("Revert "brcmfmac: > use ISO3166 country code and 0 rev as fallback""), because it was causing > issues with AP mode on some brcmfmac models (specifically on BCM4359/9). > > Many devices ship with a nvram ccode value of X2/XT/XU/XV/ALL which are > all special world-wide compatibility ccode-s. Most of these world-wide > ccode-s allow passive scan mode only for 2.4GHz channels 12-14, > only enabling them when an AP is seen on them. > > But at least on brcmfmac43455 devices this is not working correctly, these > do not see accesspoints on channels 12-14 unless the ccode is changes to > a country where these channels are allowed. > > Translating received country codes to an ISO3166 country code and 0 rev > ccreq fixes devices using a brcmfmac43455 with a X2/XT/XU/XV/ALL ccode > not seeing accesspoints on channels 12-14. > > To avoid this causing issues on other brcmfmac models again, the > fallback is limited to only brcmfmac4345* chips this time. > > Cc: Shawn Guo <shawn.guo@linaro.org> > Cc: Soeren Moch <smoch@web.de> > Cc: Fabio Aiuto <fabioaiuto83@gmail.com> > Signed-off-by: Hans de Goede <hdegoede@redhat.com> > Tested-by: Soeren Moch <smoch@web.de> # on BCM4359/9 Patch applied to wireless-next.git, thanks. a21bf90e927f brcmfmac: use ISO3166 country code and 0 rev as fallback on some devices
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c index fb727778312c..c10ac839dd26 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c @@ -16,6 +16,7 @@ #include <brcmu_utils.h> #include <defs.h> #include <brcmu_wifi.h> +#include <brcm_hw_ids.h> #include "core.h" #include "debug.h" #include "tracepoint.h" @@ -7455,6 +7456,16 @@ int brcmf_cfg80211_wait_vif_event(struct brcmf_cfg80211_info *cfg, vif_event_equals(event, action), timeout); } +static bool brmcf_use_iso3166_ccode_fallback(struct brcmf_pub *drvr) +{ + switch (drvr->bus_if->chip) { + case BRCM_CC_4345_CHIP_ID: + return true; + default: + return false; + } +} + static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2], struct brcmf_fil_country_le *ccreq) { @@ -7463,18 +7474,28 @@ 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) { + if (brmcf_use_iso3166_ccode_fallback(drvr)) { + 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; + } + + brcmf_dbg(TRACE, "No country codes configured for device\n"); + return -EINVAL; + } + found_index = -1; for (i = 0; i < country_codes->table_size; i++) { cc = &country_codes->table[i];
This is a second attempt at honering the country code send out by access points. This was first added in commit b0b524f079a2 ("brcmfmac: use ISO3166 country code and 0 rev as fallback"). Subsequently this was reverted in commit 151a7c12c4fc ("Revert "brcmfmac: use ISO3166 country code and 0 rev as fallback""), because it was causing issues with AP mode on some brcmfmac models (specifically on BCM4359/9). Many devices ship with a nvram ccode value of X2/XT/XU/XV/ALL which are all special world-wide compatibility ccode-s. Most of these world-wide ccode-s allow passive scan mode only for 2.4GHz channels 12-14, only enabling them when an AP is seen on them. But at least on brcmfmac43455 devices this is not working correctly, these do not see accesspoints on channels 12-14 unless the ccode is changes to a country where these channels are allowed. Translating received country codes to an ISO3166 country code and 0 rev ccreq fixes devices using a brcmfmac43455 with a X2/XT/XU/XV/ALL ccode not seeing accesspoints on channels 12-14. To avoid this causing issues on other brcmfmac models again, the fallback is limited to only brcmfmac4345* chips this time. Cc: Shawn Guo <shawn.guo@linaro.org> Cc: Soeren Moch <smoch@web.de> Cc: Fabio Aiuto <fabioaiuto83@gmail.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- .../broadcom/brcm80211/brcmfmac/cfg80211.c | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-)