brcm2708: bcm2710: add 64 bit support for Raspberry Pi 3
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-4.9 / 0092-brcm-adds-support-for-BCM43341-wifi.patch
1 From 2d888bed201222f294deb8a27641f7f9919dab54 Mon Sep 17 00:00:00 2001
2 From: Cheong2K <cheong@redbear.cc>
3 Date: Fri, 26 Feb 2016 18:20:10 +0800
4 Subject: [PATCH] brcm: adds support for BCM43341 wifi
5
6 brcmfmac: Disable power management
7
8 Disable wireless power saving in the brcmfmac WLAN driver. This is a
9 temporary measure until the connectivity loss resulting from power
10 saving is resolved.
11
12 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
13
14 brcmfmac: Use original country code as a fallback
15
16 Commit 73345fd212980d2e28a5c6d83801c903bd773680:
17
18 brcmfmac: Configure country code using device specific settings
19
20 prevents region codes from working on devices that lack a region code
21 translation table. In the event of an absent table, preserve the old
22 behaviour of using the provided code as-is.
23
24 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
25
26 brcmfmac: Plug memory leak in brcmf_fill_bss_param
27
28 See: https://github.com/raspberrypi/linux/issues/1471
29
30 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
31
32 brcmfmac: do not use internal roaming engine by default
33
34 Some evidence of curing disconnects with this disabled, so make it a default.
35 Can be overridden with module parameter roamoff=0
36 See: http://projectable.me/optimize-my-pi-wi-fi/
37
38 brcmfmac: Change stop_ap sequence
39
40 Patch from Broadcom/Cypress to resolve a customer error
41
42 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
43 ---
44 .../broadcom/brcm80211/brcmfmac/cfg80211.c | 31 ++++++++++++++++------
45 .../wireless/broadcom/brcm80211/brcmfmac/common.c | 2 +-
46 .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 ++
47 .../broadcom/brcm80211/include/brcm_hw_ids.h | 1 +
48 4 files changed, 27 insertions(+), 9 deletions(-)
49
50 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
51 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
52 @@ -2756,6 +2756,8 @@ brcmf_cfg80211_set_power_mgmt(struct wip
53 * preference in cfg struct to apply this to
54 * FW later while initializing the dongle
55 */
56 + pr_info("power management disabled\n");
57 + enabled = false;
58 cfg->pwr_save = enabled;
59 if (!check_vif_up(ifp->vif)) {
60
61 @@ -4750,12 +4752,15 @@ static int brcmf_cfg80211_stop_ap(struct
62 err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_DOWN, 1);
63 if (err < 0)
64 brcmf_err("BRCMF_C_DOWN error %d\n", err);
65 - err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_AP, 0);
66 - if (err < 0)
67 - brcmf_err("setting AP mode failed %d\n", err);
68 +
69 err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_INFRA, 0);
70 if (err < 0)
71 brcmf_err("setting INFRA mode failed %d\n", err);
72 +
73 + err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_AP, 0);
74 + if (err < 0)
75 + brcmf_err("setting AP mode failed %d\n", err);
76 +
77 if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MBSS))
78 brcmf_fil_iovar_int_set(ifp, "mbss", 0);
79 brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_REGULATORY,
80 @@ -6737,12 +6742,18 @@ static s32 brcmf_translate_country_code(
81 struct brcmfmac_pd_cc *country_codes;
82 struct brcmfmac_pd_cc_entry *cc;
83 s32 found_index;
84 + char ccode[BRCMF_COUNTRY_BUF_SZ];
85 + int rev;
86 int i;
87
88 + memcpy(ccode, alpha2, sizeof(ccode));
89 + rev = -1;
90 +
91 country_codes = drvr->settings->country_codes;
92 if (!country_codes) {
93 - brcmf_dbg(TRACE, "No country codes configured for device\n");
94 - return -EINVAL;
95 + brcmf_dbg(TRACE, "No country codes configured for device"
96 + " - use requested value\n");
97 + goto use_input_value;
98 }
99
100 if ((alpha2[0] == ccreq->country_abbrev[0]) &&
101 @@ -6766,10 +6777,14 @@ static s32 brcmf_translate_country_code(
102 brcmf_dbg(TRACE, "No country code match found\n");
103 return -EINVAL;
104 }
105 - memset(ccreq, 0, sizeof(*ccreq));
106 - ccreq->rev = cpu_to_le32(country_codes->table[found_index].rev);
107 - memcpy(ccreq->ccode, country_codes->table[found_index].cc,
108 + rev = country_codes->table[found_index].rev;
109 + memcpy(ccode, country_codes->table[found_index].cc,
110 BRCMF_COUNTRY_BUF_SZ);
111 +
112 +use_input_value:
113 + memset(ccreq, 0, sizeof(*ccreq));
114 + ccreq->rev = cpu_to_le32(rev);
115 + memcpy(ccreq->ccode, ccode, sizeof(ccode));
116 ccreq->country_abbrev[0] = alpha2[0];
117 ccreq->country_abbrev[1] = alpha2[1];
118 ccreq->country_abbrev[2] = 0;
119 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
120 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
121 @@ -69,7 +69,7 @@ static int brcmf_fcmode;
122 module_param_named(fcmode, brcmf_fcmode, int, 0);
123 MODULE_PARM_DESC(fcmode, "Mode of firmware signalled flow control");
124
125 -static int brcmf_roamoff;
126 +static int brcmf_roamoff = 1;
127 module_param_named(roamoff, brcmf_roamoff, int, S_IRUSR);
128 MODULE_PARM_DESC(roamoff, "Do not use internal roaming engine");
129
130 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
131 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
132 @@ -604,6 +604,7 @@ BRCMF_FW_NVRAM_DEF(4329, "brcmfmac4329-s
133 BRCMF_FW_NVRAM_DEF(4330, "brcmfmac4330-sdio.bin", "brcmfmac4330-sdio.txt");
134 BRCMF_FW_NVRAM_DEF(4334, "brcmfmac4334-sdio.bin", "brcmfmac4334-sdio.txt");
135 BRCMF_FW_NVRAM_DEF(43340, "brcmfmac43340-sdio.bin", "brcmfmac43340-sdio.txt");
136 +BRCMF_FW_NVRAM_DEF(43341, "brcmfmac43341-sdio.bin", "brcmfmac43341-sdio.txt");
137 BRCMF_FW_NVRAM_DEF(4335, "brcmfmac4335-sdio.bin", "brcmfmac4335-sdio.txt");
138 BRCMF_FW_NVRAM_DEF(43362, "brcmfmac43362-sdio.bin", "brcmfmac43362-sdio.txt");
139 BRCMF_FW_NVRAM_DEF(4339, "brcmfmac4339-sdio.bin", "brcmfmac4339-sdio.txt");
140 @@ -621,6 +622,7 @@ static struct brcmf_firmware_mapping brc
141 BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
142 BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
143 BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
144 + BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43341),
145 BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
146 BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
147 BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
148 --- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
149 +++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
150 @@ -36,6 +36,7 @@
151 #define BRCM_CC_4330_CHIP_ID 0x4330
152 #define BRCM_CC_4334_CHIP_ID 0x4334
153 #define BRCM_CC_43340_CHIP_ID 43340
154 +#define BRCM_CC_43341_CHIP_ID 43341
155 #define BRCM_CC_43362_CHIP_ID 43362
156 #define BRCM_CC_4335_CHIP_ID 0x4335
157 #define BRCM_CC_4339_CHIP_ID 0x4339