提交 514aa68b 编写于 作者: C Cheong2K 提交者: Zheng Zengkai

brcm: adds support for BCM43341 wifi

raspberrypi inclusion
category: feature
bugzilla: 50432

--------------------------------

brcmfmac: Disable power management

Disable wireless power saving in the brcmfmac WLAN driver. This is a
temporary measure until the connectivity loss resulting from power
saving is resolved.
Signed-off-by: NPhil Elwell <phil@raspberrypi.org>

brcmfmac: Use original country code as a fallback

Commit 73345fd2:

    brcmfmac: Configure country code using device specific settings

prevents region codes from working on devices that lack a region code
translation table. In the event of an absent table, preserve the old
behaviour of using the provided code as-is.
Signed-off-by: NPhil Elwell <phil@raspberrypi.org>

brcmfmac: Plug memory leak in brcmf_fill_bss_param

See: https://github.com/raspberrypi/linux/issues/1471Signed-off-by: NPhil Elwell <phil@raspberrypi.org>

brcmfmac: do not use internal roaming engine by default

Some evidence of curing disconnects with this disabled, so make it a default.
Can be overridden with module parameter roamoff=0
See: http://projectable.me/optimize-my-pi-wi-fi/

brcmfmac: Change stop_ap sequence

Patch from Broadcom/Cypress to resolve a customer error
Signed-off-by: NPhil Elwell <phil@raspberrypi.org>

Revert "brcmfmac: Disable power management"

Shortly after the release of the Pi 3B, a loss of SSH connectivity
over WiFi was traced to the power management handling, so power
management was disabled. And so it has remained ever since.

Enabling power management saves 55mA (~270mW) on a Pi 4B, so is very
much worth the minimal effort of reverting this patch, which was
squashed and rebased many times since then to the commit hash is
meaningless.
Signed-off-by: NPhil Elwell <phil@raspberrypi.org>
Signed-off-by: NFang Yafen <yafen@iscas.ac.cn>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 8744f0f5
...@@ -2937,7 +2937,7 @@ brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev, ...@@ -2937,7 +2937,7 @@ brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev,
brcmf_dbg(INFO, "Do not enable power save for P2P clients\n"); brcmf_dbg(INFO, "Do not enable power save for P2P clients\n");
pm = PM_OFF; pm = PM_OFF;
} }
brcmf_dbg(INFO, "power save %s\n", (pm ? "enabled" : "disabled")); brcmf_err("power save %s\n", (pm ? "enabled" : "disabled"));
err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM, pm); err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM, pm);
if (err) { if (err) {
...@@ -7350,12 +7350,18 @@ static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2], ...@@ -7350,12 +7350,18 @@ static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2],
struct brcmfmac_pd_cc *country_codes; struct brcmfmac_pd_cc *country_codes;
struct brcmfmac_pd_cc_entry *cc; struct brcmfmac_pd_cc_entry *cc;
s32 found_index; s32 found_index;
char ccode[BRCMF_COUNTRY_BUF_SZ];
int rev;
int i; int i;
memcpy(ccode, alpha2, sizeof(ccode));
rev = -1;
country_codes = drvr->settings->country_codes; country_codes = drvr->settings->country_codes;
if (!country_codes) { if (!country_codes) {
brcmf_dbg(TRACE, "No country codes configured for device\n"); brcmf_dbg(TRACE, "No country codes configured for device"
return -EINVAL; " - use requested value\n");
goto use_input_value;
} }
if ((alpha2[0] == ccreq->country_abbrev[0]) && if ((alpha2[0] == ccreq->country_abbrev[0]) &&
...@@ -7379,10 +7385,14 @@ static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2], ...@@ -7379,10 +7385,14 @@ static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2],
brcmf_dbg(TRACE, "No country code match found\n"); brcmf_dbg(TRACE, "No country code match found\n");
return -EINVAL; return -EINVAL;
} }
memset(ccreq, 0, sizeof(*ccreq)); rev = country_codes->table[found_index].rev;
ccreq->rev = cpu_to_le32(country_codes->table[found_index].rev); memcpy(ccode, country_codes->table[found_index].cc,
memcpy(ccreq->ccode, country_codes->table[found_index].cc,
BRCMF_COUNTRY_BUF_SZ); BRCMF_COUNTRY_BUF_SZ);
use_input_value:
memset(ccreq, 0, sizeof(*ccreq));
ccreq->rev = cpu_to_le32(rev);
memcpy(ccreq->ccode, ccode, sizeof(ccode));
ccreq->country_abbrev[0] = alpha2[0]; ccreq->country_abbrev[0] = alpha2[0];
ccreq->country_abbrev[1] = alpha2[1]; ccreq->country_abbrev[1] = alpha2[1];
ccreq->country_abbrev[2] = 0; ccreq->country_abbrev[2] = 0;
......
...@@ -59,7 +59,7 @@ static int brcmf_fcmode; ...@@ -59,7 +59,7 @@ static int brcmf_fcmode;
module_param_named(fcmode, brcmf_fcmode, int, 0); module_param_named(fcmode, brcmf_fcmode, int, 0);
MODULE_PARM_DESC(fcmode, "Mode of firmware signalled flow control"); MODULE_PARM_DESC(fcmode, "Mode of firmware signalled flow control");
static int brcmf_roamoff; static int brcmf_roamoff = 1;
module_param_named(roamoff, brcmf_roamoff, int, 0400); module_param_named(roamoff, brcmf_roamoff, int, 0400);
MODULE_PARM_DESC(roamoff, "Do not use internal roaming engine"); MODULE_PARM_DESC(roamoff, "Do not use internal roaming engine");
......
...@@ -611,6 +611,7 @@ BRCMF_FW_DEF(4329, "brcmfmac4329-sdio"); ...@@ -611,6 +611,7 @@ BRCMF_FW_DEF(4329, "brcmfmac4329-sdio");
BRCMF_FW_DEF(4330, "brcmfmac4330-sdio"); BRCMF_FW_DEF(4330, "brcmfmac4330-sdio");
BRCMF_FW_DEF(4334, "brcmfmac4334-sdio"); BRCMF_FW_DEF(4334, "brcmfmac4334-sdio");
BRCMF_FW_DEF(43340, "brcmfmac43340-sdio"); BRCMF_FW_DEF(43340, "brcmfmac43340-sdio");
BRCMF_FW_DEF(43341, "brcmfmac43341-sdio");
BRCMF_FW_DEF(4335, "brcmfmac4335-sdio"); BRCMF_FW_DEF(4335, "brcmfmac4335-sdio");
BRCMF_FW_DEF(43362, "brcmfmac43362-sdio"); BRCMF_FW_DEF(43362, "brcmfmac43362-sdio");
BRCMF_FW_DEF(4339, "brcmfmac4339-sdio"); BRCMF_FW_DEF(4339, "brcmfmac4339-sdio");
...@@ -634,7 +635,7 @@ static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = { ...@@ -634,7 +635,7 @@ static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
BRCMF_FW_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330), BRCMF_FW_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
BRCMF_FW_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334), BRCMF_FW_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
BRCMF_FW_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340), BRCMF_FW_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
BRCMF_FW_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43340), BRCMF_FW_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43341),
BRCMF_FW_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335), BRCMF_FW_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
BRCMF_FW_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362), BRCMF_FW_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
BRCMF_FW_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339), BRCMF_FW_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册