mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-31 00:24:12 +00:00
mac80211: brcmfmac: backport remaining patches from the Linux 5.0
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
parent
248797834b
commit
0994e65c6a
@ -0,0 +1,95 @@
|
|||||||
|
From 153e22c0ff1260035cd7fe72c8aeead1f5fac757 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wright Feng <Wright.Feng@cypress.com>
|
||||||
|
Date: Mon, 5 Nov 2018 05:51:54 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: add credit numbers updating support
|
||||||
|
|
||||||
|
The credit numbers are static and tunable per chip in firmware side.
|
||||||
|
However the credit number may be changed that is based on packet pool
|
||||||
|
length and will send BRCMF_E_FIFO_CREDIT_MAP event to notify host driver
|
||||||
|
updates the credit numbers during interface up.
|
||||||
|
The purpose of this patch is making host driver has ability of updating
|
||||||
|
the credit numbers when receiving the BRCMF_E_FIFO_CREDIT_MAP event.
|
||||||
|
|
||||||
|
Signed-off-by: Wright Feng <wright.feng@cypress.com>
|
||||||
|
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
.../broadcom/brcm80211/brcmfmac/fwsignal.c | 23 ++++++++++++-------
|
||||||
|
1 file changed, 15 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||||
|
@@ -511,6 +511,7 @@ struct brcmf_fws_info {
|
||||||
|
struct work_struct fws_dequeue_work;
|
||||||
|
u32 fifo_enqpkt[BRCMF_FWS_FIFO_COUNT];
|
||||||
|
int fifo_credit[BRCMF_FWS_FIFO_COUNT];
|
||||||
|
+ int init_fifo_credit[BRCMF_FWS_FIFO_COUNT];
|
||||||
|
int credits_borrowed[BRCMF_FWS_FIFO_AC_VO + 1];
|
||||||
|
int deq_node_pos[BRCMF_FWS_FIFO_COUNT];
|
||||||
|
u32 fifo_credit_map;
|
||||||
|
@@ -1237,6 +1238,9 @@ static void brcmf_fws_return_credits(str
|
||||||
|
}
|
||||||
|
|
||||||
|
fws->fifo_credit[fifo] += credits;
|
||||||
|
+ if (fws->fifo_credit[fifo] > fws->init_fifo_credit[fifo])
|
||||||
|
+ fws->fifo_credit[fifo] = fws->init_fifo_credit[fifo];
|
||||||
|
+
|
||||||
|
}
|
||||||
|
|
||||||
|
static void brcmf_fws_schedule_deq(struct brcmf_fws_info *fws)
|
||||||
|
@@ -1595,19 +1599,21 @@ static int brcmf_fws_notify_credit_map(s
|
||||||
|
brcmf_err("event payload too small (%d)\n", e->datalen);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
- if (fws->creditmap_received)
|
||||||
|
- return 0;
|
||||||
|
|
||||||
|
fws->creditmap_received = true;
|
||||||
|
|
||||||
|
brcmf_dbg(TRACE, "enter: credits %pM\n", credits);
|
||||||
|
brcmf_fws_lock(fws);
|
||||||
|
for (i = 0; i < ARRAY_SIZE(fws->fifo_credit); i++) {
|
||||||
|
- if (*credits)
|
||||||
|
+ fws->fifo_credit[i] += credits[i] - fws->init_fifo_credit[i];
|
||||||
|
+ fws->init_fifo_credit[i] = credits[i];
|
||||||
|
+ if (fws->fifo_credit[i] > 0)
|
||||||
|
fws->fifo_credit_map |= 1 << i;
|
||||||
|
else
|
||||||
|
fws->fifo_credit_map &= ~(1 << i);
|
||||||
|
- fws->fifo_credit[i] = *credits++;
|
||||||
|
+ WARN_ONCE(fws->fifo_credit[i] < 0,
|
||||||
|
+ "fifo_credit[%d] is negative(%d)\n", i,
|
||||||
|
+ fws->fifo_credit[i]);
|
||||||
|
}
|
||||||
|
brcmf_fws_schedule_deq(fws);
|
||||||
|
brcmf_fws_unlock(fws);
|
||||||
|
@@ -2013,7 +2019,7 @@ static int brcmf_fws_borrow_credit(struc
|
||||||
|
}
|
||||||
|
|
||||||
|
for (lender_ac = 0; lender_ac <= BRCMF_FWS_FIFO_AC_VO; lender_ac++) {
|
||||||
|
- if (fws->fifo_credit[lender_ac]) {
|
||||||
|
+ if (fws->fifo_credit[lender_ac] > 0) {
|
||||||
|
fws->credits_borrowed[lender_ac]++;
|
||||||
|
fws->fifo_credit[lender_ac]--;
|
||||||
|
if (fws->fifo_credit[lender_ac] == 0)
|
||||||
|
@@ -2210,8 +2216,9 @@ static void brcmf_fws_dequeue_worker(str
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
- while ((fws->fifo_credit[fifo]) || ((!fws->bcmc_credit_check) &&
|
||||||
|
- (fifo == BRCMF_FWS_FIFO_BCMC))) {
|
||||||
|
+ while ((fws->fifo_credit[fifo] > 0) ||
|
||||||
|
+ ((!fws->bcmc_credit_check) &&
|
||||||
|
+ (fifo == BRCMF_FWS_FIFO_BCMC))) {
|
||||||
|
skb = brcmf_fws_deq(fws, fifo);
|
||||||
|
if (!skb)
|
||||||
|
break;
|
||||||
|
@@ -2222,7 +2229,7 @@ static void brcmf_fws_dequeue_worker(str
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((fifo == BRCMF_FWS_FIFO_AC_BE) &&
|
||||||
|
- (fws->fifo_credit[fifo] == 0) &&
|
||||||
|
+ (fws->fifo_credit[fifo] <= 0) &&
|
||||||
|
(!fws->bus_flow_blocked)) {
|
||||||
|
while (brcmf_fws_borrow_credit(fws) == 0) {
|
||||||
|
skb = brcmf_fws_deq(fws, fifo);
|
@ -0,0 +1,42 @@
|
|||||||
|
From a3bdc6deb60bf6be4405058ca49a686c4db08c39 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wright Feng <Wright.Feng@cypress.com>
|
||||||
|
Date: Mon, 5 Nov 2018 05:51:59 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: enable frameburst mode in default firmware setting
|
||||||
|
|
||||||
|
The frameburst feature can enable per-packet framebursting in firmware
|
||||||
|
side and get higher TX throughput in High Throughput(HT) mode. To enhance
|
||||||
|
TX throughput, we enable frameburst mode in default firmware setting.
|
||||||
|
|
||||||
|
Signed-off-by: Wright Feng <wright.feng@cypress.com>
|
||||||
|
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 6 ++++++
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h | 1 +
|
||||||
|
2 files changed, 7 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||||
|
@@ -6631,6 +6631,12 @@ static s32 brcmf_config_dongle(struct br
|
||||||
|
|
||||||
|
brcmf_configure_arp_nd_offload(ifp, true);
|
||||||
|
|
||||||
|
+ err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_FAKEFRAG, 1);
|
||||||
|
+ if (err) {
|
||||||
|
+ brcmf_err("failed to set frameburst mode\n");
|
||||||
|
+ goto default_conf_out;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
cfg->dongle_up = true;
|
||||||
|
default_conf_out:
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h
|
||||||
|
@@ -80,6 +80,7 @@
|
||||||
|
#define BRCMF_C_SCB_DEAUTHENTICATE_FOR_REASON 201
|
||||||
|
#define BRCMF_C_SET_ASSOC_PREFER 205
|
||||||
|
#define BRCMF_C_GET_VALID_CHANNELS 217
|
||||||
|
+#define BRCMF_C_SET_FAKEFRAG 219
|
||||||
|
#define BRCMF_C_GET_KEY_PRIMARY 235
|
||||||
|
#define BRCMF_C_SET_KEY_PRIMARY 236
|
||||||
|
#define BRCMF_C_SET_SCAN_PASSIVE_TIME 258
|
@ -0,0 +1,227 @@
|
|||||||
|
From e4af3ffb43d50f070134aa1b40d5c3573f57deb1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
||||||
|
Date: Mon, 5 Nov 2018 05:52:05 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: handle compressed tx status signal
|
||||||
|
|
||||||
|
Firmware inform the driver about tx status by normal tx status signal
|
||||||
|
or compressed tx status signal. This patch adds support to handle the
|
||||||
|
compressed tx status signal.
|
||||||
|
|
||||||
|
Signed-off-by: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
||||||
|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||||
|
Signed-off-by: Wright Feng <wright.feng@cypress.com>
|
||||||
|
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
.../broadcom/brcm80211/brcmfmac/fwsignal.c | 121 ++++++++++--------
|
||||||
|
1 file changed, 71 insertions(+), 50 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||||
|
@@ -1455,9 +1455,10 @@ static int brcmf_fws_txstatus_suppressed
|
||||||
|
|
||||||
|
static int
|
||||||
|
brcmf_fws_txs_process(struct brcmf_fws_info *fws, u8 flags, u32 hslot,
|
||||||
|
- u32 genbit, u16 seq)
|
||||||
|
+ u32 genbit, u16 seq, u8 compcnt)
|
||||||
|
{
|
||||||
|
u32 fifo;
|
||||||
|
+ u8 cnt = 0;
|
||||||
|
int ret;
|
||||||
|
bool remove_from_hanger = true;
|
||||||
|
struct sk_buff *skb;
|
||||||
|
@@ -1468,60 +1469,71 @@ brcmf_fws_txs_process(struct brcmf_fws_i
|
||||||
|
brcmf_dbg(DATA, "flags %d\n", flags);
|
||||||
|
|
||||||
|
if (flags == BRCMF_FWS_TXSTATUS_DISCARD)
|
||||||
|
- fws->stats.txs_discard++;
|
||||||
|
+ fws->stats.txs_discard += compcnt;
|
||||||
|
else if (flags == BRCMF_FWS_TXSTATUS_CORE_SUPPRESS) {
|
||||||
|
- fws->stats.txs_supp_core++;
|
||||||
|
+ fws->stats.txs_supp_core += compcnt;
|
||||||
|
remove_from_hanger = false;
|
||||||
|
} else if (flags == BRCMF_FWS_TXSTATUS_FW_PS_SUPPRESS) {
|
||||||
|
- fws->stats.txs_supp_ps++;
|
||||||
|
+ fws->stats.txs_supp_ps += compcnt;
|
||||||
|
remove_from_hanger = false;
|
||||||
|
} else if (flags == BRCMF_FWS_TXSTATUS_FW_TOSSED)
|
||||||
|
- fws->stats.txs_tossed++;
|
||||||
|
+ fws->stats.txs_tossed += compcnt;
|
||||||
|
else if (flags == BRCMF_FWS_TXSTATUS_HOST_TOSSED)
|
||||||
|
- fws->stats.txs_host_tossed++;
|
||||||
|
+ fws->stats.txs_host_tossed += compcnt;
|
||||||
|
else
|
||||||
|
brcmf_err("unexpected txstatus\n");
|
||||||
|
|
||||||
|
- ret = brcmf_fws_hanger_poppkt(&fws->hanger, hslot, &skb,
|
||||||
|
- remove_from_hanger);
|
||||||
|
- if (ret != 0) {
|
||||||
|
- brcmf_err("no packet in hanger slot: hslot=%d\n", hslot);
|
||||||
|
- return ret;
|
||||||
|
- }
|
||||||
|
+ while (cnt < compcnt) {
|
||||||
|
+ ret = brcmf_fws_hanger_poppkt(&fws->hanger, hslot, &skb,
|
||||||
|
+ remove_from_hanger);
|
||||||
|
+ if (ret != 0) {
|
||||||
|
+ brcmf_err("no packet in hanger slot: hslot=%d\n",
|
||||||
|
+ hslot);
|
||||||
|
+ goto cont;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- skcb = brcmf_skbcb(skb);
|
||||||
|
- entry = skcb->mac;
|
||||||
|
- if (WARN_ON(!entry)) {
|
||||||
|
- brcmu_pkt_buf_free_skb(skb);
|
||||||
|
- return -EINVAL;
|
||||||
|
- }
|
||||||
|
- entry->transit_count--;
|
||||||
|
- if (entry->suppressed && entry->suppr_transit_count)
|
||||||
|
- entry->suppr_transit_count--;
|
||||||
|
+ skcb = brcmf_skbcb(skb);
|
||||||
|
+ entry = skcb->mac;
|
||||||
|
+ if (WARN_ON(!entry)) {
|
||||||
|
+ brcmu_pkt_buf_free_skb(skb);
|
||||||
|
+ goto cont;
|
||||||
|
+ }
|
||||||
|
+ entry->transit_count--;
|
||||||
|
+ if (entry->suppressed && entry->suppr_transit_count)
|
||||||
|
+ entry->suppr_transit_count--;
|
||||||
|
|
||||||
|
- brcmf_dbg(DATA, "%s flags %d htod %X seq %X\n", entry->name, flags,
|
||||||
|
- skcb->htod, seq);
|
||||||
|
+ brcmf_dbg(DATA, "%s flags %d htod %X seq %X\n", entry->name,
|
||||||
|
+ flags, skcb->htod, seq);
|
||||||
|
|
||||||
|
- /* pick up the implicit credit from this packet */
|
||||||
|
- fifo = brcmf_skb_htod_tag_get_field(skb, FIFO);
|
||||||
|
- if ((fws->fcmode == BRCMF_FWS_FCMODE_IMPLIED_CREDIT) ||
|
||||||
|
- (brcmf_skb_if_flags_get_field(skb, REQ_CREDIT)) ||
|
||||||
|
- (flags == BRCMF_FWS_TXSTATUS_HOST_TOSSED)) {
|
||||||
|
- brcmf_fws_return_credits(fws, fifo, 1);
|
||||||
|
- brcmf_fws_schedule_deq(fws);
|
||||||
|
- }
|
||||||
|
- brcmf_fws_macdesc_return_req_credit(skb);
|
||||||
|
+ /* pick up the implicit credit from this packet */
|
||||||
|
+ fifo = brcmf_skb_htod_tag_get_field(skb, FIFO);
|
||||||
|
+ if (fws->fcmode == BRCMF_FWS_FCMODE_IMPLIED_CREDIT ||
|
||||||
|
+ (brcmf_skb_if_flags_get_field(skb, REQ_CREDIT)) ||
|
||||||
|
+ flags == BRCMF_FWS_TXSTATUS_HOST_TOSSED) {
|
||||||
|
+ brcmf_fws_return_credits(fws, fifo, 1);
|
||||||
|
+ brcmf_fws_schedule_deq(fws);
|
||||||
|
+ }
|
||||||
|
+ brcmf_fws_macdesc_return_req_credit(skb);
|
||||||
|
|
||||||
|
- ret = brcmf_proto_hdrpull(fws->drvr, false, skb, &ifp);
|
||||||
|
- if (ret) {
|
||||||
|
- brcmu_pkt_buf_free_skb(skb);
|
||||||
|
- return -EINVAL;
|
||||||
|
+ ret = brcmf_proto_hdrpull(fws->drvr, false, skb, &ifp);
|
||||||
|
+ if (ret) {
|
||||||
|
+ brcmu_pkt_buf_free_skb(skb);
|
||||||
|
+ goto cont;
|
||||||
|
+ }
|
||||||
|
+ if (!remove_from_hanger)
|
||||||
|
+ ret = brcmf_fws_txstatus_suppressed(fws, fifo, skb,
|
||||||
|
+ genbit, seq);
|
||||||
|
+ if (remove_from_hanger || ret)
|
||||||
|
+ brcmf_txfinalize(ifp, skb, true);
|
||||||
|
+
|
||||||
|
+cont:
|
||||||
|
+ hslot = (hslot + 1) & (BRCMF_FWS_TXSTAT_HSLOT_MASK >>
|
||||||
|
+ BRCMF_FWS_TXSTAT_HSLOT_SHIFT);
|
||||||
|
+ if (BRCMF_FWS_MODE_GET_REUSESEQ(fws->mode))
|
||||||
|
+ seq = (seq + 1) & BRCMF_SKB_HTOD_SEQ_NR_MASK;
|
||||||
|
+
|
||||||
|
+ cnt++;
|
||||||
|
}
|
||||||
|
- if (!remove_from_hanger)
|
||||||
|
- ret = brcmf_fws_txstatus_suppressed(fws, fifo, skb,
|
||||||
|
- genbit, seq);
|
||||||
|
- if (remove_from_hanger || ret)
|
||||||
|
- brcmf_txfinalize(ifp, skb, true);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -1547,7 +1559,8 @@ static int brcmf_fws_fifocreditback_indi
|
||||||
|
return BRCMF_FWS_RET_OK_SCHEDULE;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int brcmf_fws_txstatus_indicate(struct brcmf_fws_info *fws, u8 *data)
|
||||||
|
+static int brcmf_fws_txstatus_indicate(struct brcmf_fws_info *fws, u8 type,
|
||||||
|
+ u8 *data)
|
||||||
|
{
|
||||||
|
__le32 status_le;
|
||||||
|
__le16 seq_le;
|
||||||
|
@@ -1556,23 +1569,31 @@ static int brcmf_fws_txstatus_indicate(s
|
||||||
|
u32 genbit;
|
||||||
|
u8 flags;
|
||||||
|
u16 seq;
|
||||||
|
+ u8 compcnt;
|
||||||
|
+ u8 compcnt_offset = BRCMF_FWS_TYPE_TXSTATUS_LEN;
|
||||||
|
|
||||||
|
- fws->stats.txs_indicate++;
|
||||||
|
memcpy(&status_le, data, sizeof(status_le));
|
||||||
|
status = le32_to_cpu(status_le);
|
||||||
|
flags = brcmf_txstatus_get_field(status, FLAGS);
|
||||||
|
hslot = brcmf_txstatus_get_field(status, HSLOT);
|
||||||
|
genbit = brcmf_txstatus_get_field(status, GENERATION);
|
||||||
|
if (BRCMF_FWS_MODE_GET_REUSESEQ(fws->mode)) {
|
||||||
|
- memcpy(&seq_le, &data[BRCMF_FWS_TYPE_PKTTAG_LEN],
|
||||||
|
+ memcpy(&seq_le, &data[BRCMF_FWS_TYPE_TXSTATUS_LEN],
|
||||||
|
sizeof(seq_le));
|
||||||
|
seq = le16_to_cpu(seq_le);
|
||||||
|
+ compcnt_offset += BRCMF_FWS_TYPE_SEQ_LEN;
|
||||||
|
} else {
|
||||||
|
seq = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (type == BRCMF_FWS_TYPE_COMP_TXSTATUS)
|
||||||
|
+ compcnt = data[compcnt_offset];
|
||||||
|
+ else
|
||||||
|
+ compcnt = 1;
|
||||||
|
+ fws->stats.txs_indicate += compcnt;
|
||||||
|
+
|
||||||
|
brcmf_fws_lock(fws);
|
||||||
|
- brcmf_fws_txs_process(fws, flags, hslot, genbit, seq);
|
||||||
|
+ brcmf_fws_txs_process(fws, flags, hslot, genbit, seq, compcnt);
|
||||||
|
brcmf_fws_unlock(fws);
|
||||||
|
return BRCMF_FWS_RET_OK_NOSCHEDULE;
|
||||||
|
}
|
||||||
|
@@ -1888,8 +1909,6 @@ void brcmf_fws_hdrpull(struct brcmf_if *
|
||||||
|
|
||||||
|
err = BRCMF_FWS_RET_OK_NOSCHEDULE;
|
||||||
|
switch (type) {
|
||||||
|
- case BRCMF_FWS_TYPE_COMP_TXSTATUS:
|
||||||
|
- break;
|
||||||
|
case BRCMF_FWS_TYPE_HOST_REORDER_RXPKTS:
|
||||||
|
rd = (struct brcmf_skb_reorder_data *)skb->cb;
|
||||||
|
rd->reorder = data;
|
||||||
|
@@ -1912,7 +1931,8 @@ void brcmf_fws_hdrpull(struct brcmf_if *
|
||||||
|
err = brcmf_fws_request_indicate(fws, type, data);
|
||||||
|
break;
|
||||||
|
case BRCMF_FWS_TYPE_TXSTATUS:
|
||||||
|
- brcmf_fws_txstatus_indicate(fws, data);
|
||||||
|
+ case BRCMF_FWS_TYPE_COMP_TXSTATUS:
|
||||||
|
+ brcmf_fws_txstatus_indicate(fws, type, data);
|
||||||
|
break;
|
||||||
|
case BRCMF_FWS_TYPE_FIFO_CREDITBACK:
|
||||||
|
err = brcmf_fws_fifocreditback_indicate(fws, data);
|
||||||
|
@@ -2001,7 +2021,7 @@ static void brcmf_fws_rollback_toq(struc
|
||||||
|
fws->stats.rollback_failed++;
|
||||||
|
hslot = brcmf_skb_htod_tag_get_field(skb, HSLOT);
|
||||||
|
brcmf_fws_txs_process(fws, BRCMF_FWS_TXSTATUS_HOST_TOSSED,
|
||||||
|
- hslot, 0, 0);
|
||||||
|
+ hslot, 0, 0, 1);
|
||||||
|
} else {
|
||||||
|
fws->stats.rollback_success++;
|
||||||
|
brcmf_fws_return_credits(fws, fifo, 1);
|
||||||
|
@@ -2462,7 +2482,8 @@ void brcmf_fws_bustxfail(struct brcmf_fw
|
||||||
|
}
|
||||||
|
brcmf_fws_lock(fws);
|
||||||
|
hslot = brcmf_skb_htod_tag_get_field(skb, HSLOT);
|
||||||
|
- brcmf_fws_txs_process(fws, BRCMF_FWS_TXSTATUS_HOST_TOSSED, hslot, 0, 0);
|
||||||
|
+ brcmf_fws_txs_process(fws, BRCMF_FWS_TXSTATUS_HOST_TOSSED, hslot, 0, 0,
|
||||||
|
+ 1);
|
||||||
|
brcmf_fws_unlock(fws);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From eb6b33bfb8f56859df7264dccc2ca8ab7c57342a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Winnie Chang <winnie.chang@cypress.com>
|
||||||
|
Date: Wed, 21 Nov 2018 07:53:42 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: add 4354 raw pcie device id
|
||||||
|
|
||||||
|
Add the raw 4354 PCIe device ID for unprogrammed Cypress boards.
|
||||||
|
|
||||||
|
Reviewed-by: Arend Van Spriel <arend@broadcom.com>
|
||||||
|
Signed-off-by: Winnie Chang <winnie.chang@cypress.com>
|
||||||
|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 1 +
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h | 1 +
|
||||||
|
2 files changed, 2 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||||
|
@@ -2019,6 +2019,7 @@ static const struct dev_pm_ops brcmf_pci
|
||||||
|
static const struct pci_device_id brcmf_pcie_devid_table[] = {
|
||||||
|
BRCMF_PCIE_DEVICE(BRCM_PCIE_4350_DEVICE_ID),
|
||||||
|
BRCMF_PCIE_DEVICE_SUB(0x4355, BRCM_PCIE_VENDOR_ID_BROADCOM, 0x4355),
|
||||||
|
+ BRCMF_PCIE_DEVICE(BRCM_PCIE_4354_RAW_DEVICE_ID),
|
||||||
|
BRCMF_PCIE_DEVICE(BRCM_PCIE_4356_DEVICE_ID),
|
||||||
|
BRCMF_PCIE_DEVICE(BRCM_PCIE_43567_DEVICE_ID),
|
||||||
|
BRCMF_PCIE_DEVICE(BRCM_PCIE_43570_DEVICE_ID),
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
|
||||||
|
@@ -74,6 +74,7 @@
|
||||||
|
/* PCIE Device IDs */
|
||||||
|
#define BRCM_PCIE_4350_DEVICE_ID 0x43a3
|
||||||
|
#define BRCM_PCIE_4354_DEVICE_ID 0x43df
|
||||||
|
+#define BRCM_PCIE_4354_RAW_DEVICE_ID 0x4354
|
||||||
|
#define BRCM_PCIE_4356_DEVICE_ID 0x43ec
|
||||||
|
#define BRCM_PCIE_43567_DEVICE_ID 0x43d3
|
||||||
|
#define BRCM_PCIE_43570_DEVICE_ID 0x43d9
|
@ -0,0 +1,73 @@
|
|||||||
|
From e1a08730eeb0bad4d82c3bc40e74854872de618d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wright Feng <wright.feng@cypress.com>
|
||||||
|
Date: Wed, 21 Nov 2018 07:53:44 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: set F2 watermark to 256 for 4373
|
||||||
|
|
||||||
|
We got SDIO_CRC_ERROR with 4373 on SDR104 when doing bi-directional
|
||||||
|
throughput test. Enable watermark to 256 to guarantee the operation
|
||||||
|
stability.
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Wright Feng <wright.feng@cypress.com>
|
||||||
|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
.../broadcom/brcm80211/brcmfmac/sdio.c | 26 +++++++++++++++++--
|
||||||
|
1 file changed, 24 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
@@ -49,6 +49,10 @@
|
||||||
|
#define DCMD_RESP_TIMEOUT msecs_to_jiffies(2500)
|
||||||
|
#define CTL_DONE_TIMEOUT msecs_to_jiffies(2500)
|
||||||
|
|
||||||
|
+/* watermark expressed in number of words */
|
||||||
|
+#define DEFAULT_F2_WATERMARK 0x8
|
||||||
|
+#define CY_4373_F2_WATERMARK 0x40
|
||||||
|
+
|
||||||
|
#ifdef DEBUG
|
||||||
|
|
||||||
|
#define BRCMF_TRAP_INFO_SIZE 80
|
||||||
|
@@ -138,6 +142,8 @@ struct rte_console {
|
||||||
|
/* 1: isolate internal sdio signals, put external pads in tri-state; requires
|
||||||
|
* sdio bus power cycle to clear (rev 9) */
|
||||||
|
#define SBSDIO_DEVCTL_PADS_ISO 0x08
|
||||||
|
+/* 1: enable F2 Watermark */
|
||||||
|
+#define SBSDIO_DEVCTL_F2WM_ENAB 0x10
|
||||||
|
/* Force SD->SB reset mapping (rev 11) */
|
||||||
|
#define SBSDIO_DEVCTL_SB_RST_CTL 0x30
|
||||||
|
/* Determined by CoreControl bit */
|
||||||
|
@@ -4046,6 +4052,7 @@ static void brcmf_sdio_firmware_callback
|
||||||
|
void *nvram;
|
||||||
|
u32 nvram_len;
|
||||||
|
u8 saveclk;
|
||||||
|
+ u8 devctl;
|
||||||
|
|
||||||
|
brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
|
||||||
|
|
||||||
|
@@ -4101,8 +4108,23 @@ static void brcmf_sdio_firmware_callback
|
||||||
|
brcmf_sdiod_writel(sdiod, core->base + SD_REG(hostintmask),
|
||||||
|
bus->hostintmask, NULL);
|
||||||
|
|
||||||
|
-
|
||||||
|
- brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK, 8, &err);
|
||||||
|
+ switch (sdiod->func1->device) {
|
||||||
|
+ case SDIO_DEVICE_ID_CYPRESS_4373:
|
||||||
|
+ brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
|
||||||
|
+ CY_4373_F2_WATERMARK);
|
||||||
|
+ brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
|
||||||
|
+ CY_4373_F2_WATERMARK, &err);
|
||||||
|
+ devctl = brcmf_sdiod_readb(sdiod, SBSDIO_DEVICE_CTL,
|
||||||
|
+ &err);
|
||||||
|
+ devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
|
||||||
|
+ brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
|
||||||
|
+ &err);
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
|
||||||
|
+ DEFAULT_F2_WATERMARK, &err);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
} else {
|
||||||
|
/* Disable F2 again */
|
||||||
|
sdio_disable_func(sdiod->func2);
|
@ -0,0 +1,55 @@
|
|||||||
|
From 58e4bbea0c1d9b5ace11df968c5dc096ce052a73 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Madhan Mohan R <MadhanMohan.R@cypress.com>
|
||||||
|
Date: Wed, 21 Nov 2018 07:53:45 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: set SDIO F1 MesBusyCtrl for CYW4373
|
||||||
|
|
||||||
|
Along with F2 watermark (existing) configuration, F1 MesBusyCtrl
|
||||||
|
should be enabled & sdio device RX FIFO watermark should be
|
||||||
|
configured to avoid overflow errors.
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Madhan Mohan R <madhanmohan.r@cypress.com>
|
||||||
|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 3 +++
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h | 9 ++++++++-
|
||||||
|
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
@@ -4119,6 +4119,9 @@ static void brcmf_sdio_firmware_callback
|
||||||
|
devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
|
||||||
|
brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
|
||||||
|
&err);
|
||||||
|
+ brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
|
||||||
|
+ CY_4373_F2_WATERMARK |
|
||||||
|
+ SBSDIO_MESBUSYCTRL_ENAB, &err);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
|
||||||
|
@@ -77,7 +77,7 @@
|
||||||
|
#define SBSDIO_GPIO_OUT 0x10006
|
||||||
|
/* gpio enable */
|
||||||
|
#define SBSDIO_GPIO_EN 0x10007
|
||||||
|
-/* rev < 7, watermark for sdio device */
|
||||||
|
+/* rev < 7, watermark for sdio device TX path */
|
||||||
|
#define SBSDIO_WATERMARK 0x10008
|
||||||
|
/* control busy signal generation */
|
||||||
|
#define SBSDIO_DEVICE_CTL 0x10009
|
||||||
|
@@ -104,6 +104,13 @@
|
||||||
|
#define SBSDIO_FUNC1_RFRAMEBCHI 0x1001C
|
||||||
|
/* MesBusyCtl (rev 11) */
|
||||||
|
#define SBSDIO_FUNC1_MESBUSYCTRL 0x1001D
|
||||||
|
+/* Watermark for sdio device RX path */
|
||||||
|
+#define SBSDIO_MESBUSY_RXFIFO_WM_MASK 0x7F
|
||||||
|
+#define SBSDIO_MESBUSY_RXFIFO_WM_SHIFT 0
|
||||||
|
+/* Enable busy capability for MES access */
|
||||||
|
+#define SBSDIO_MESBUSYCTRL_ENAB 0x80
|
||||||
|
+#define SBSDIO_MESBUSYCTRL_ENAB_SHIFT 7
|
||||||
|
+
|
||||||
|
/* Sdio Core Rev 12 */
|
||||||
|
#define SBSDIO_FUNC1_WAKEUPCTRL 0x1001E
|
||||||
|
#define SBSDIO_FUNC1_WCTRL_ALPWAIT_MASK 0x1
|
@ -0,0 +1,253 @@
|
|||||||
|
From 35cb51b2162a1a7c5cd977f92595e60ab14d3b22 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chi-Hsien Lin <Chi-Hsien.Lin@cypress.com>
|
||||||
|
Date: Wed, 21 Nov 2018 07:53:47 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: add support for CYW43012 SDIO chipset
|
||||||
|
|
||||||
|
CYW43012 is a 1x1 802.11a/b/g/n Dual-Band HT20, 256-QAM/Turbo QAM. It
|
||||||
|
is an Ultra Low Power WLAN+BT combo chip.
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||||
|
Signed-off-by: Praveen Babu C <praveen.chandran@cypress.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
.../broadcom/brcm80211/brcmfmac/bcmsdh.c | 1 +
|
||||||
|
.../broadcom/brcm80211/brcmfmac/chip.c | 14 +++-
|
||||||
|
.../broadcom/brcm80211/brcmfmac/sdio.c | 74 ++++++++++++++++---
|
||||||
|
.../broadcom/brcm80211/include/brcm_hw_ids.h | 1 +
|
||||||
|
include/linux/mmc/sdio_ids.h | 1 +
|
||||||
|
5 files changed, 78 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||||
|
@@ -972,6 +972,7 @@ static const struct sdio_device_id brcmf
|
||||||
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4354),
|
||||||
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4356),
|
||||||
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_CYPRESS_4373),
|
||||||
|
+ BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_CYPRESS_43012),
|
||||||
|
{ /* end: all zeroes */ }
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(sdio, brcmf_sdmmc_ids);
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||||
|
@@ -165,6 +165,7 @@ struct sbconfig {
|
||||||
|
#define SRCI_LSS_MASK 0x00f00000
|
||||||
|
#define SRCI_LSS_SHIFT 20
|
||||||
|
#define SRCI_SRNB_MASK 0xf0
|
||||||
|
+#define SRCI_SRNB_MASK_EXT 0x100
|
||||||
|
#define SRCI_SRNB_SHIFT 4
|
||||||
|
#define SRCI_SRBSZ_MASK 0xf
|
||||||
|
#define SRCI_SRBSZ_SHIFT 0
|
||||||
|
@@ -592,7 +593,13 @@ static void brcmf_chip_socram_ramsize(st
|
||||||
|
if (lss != 0)
|
||||||
|
*ramsize += (1 << ((lss - 1) + SR_BSZ_BASE));
|
||||||
|
} else {
|
||||||
|
- nb = (coreinfo & SRCI_SRNB_MASK) >> SRCI_SRNB_SHIFT;
|
||||||
|
+ /* length of SRAM Banks increased for corerev greater than 23 */
|
||||||
|
+ if (sr->pub.rev >= 23) {
|
||||||
|
+ nb = (coreinfo & (SRCI_SRNB_MASK | SRCI_SRNB_MASK_EXT))
|
||||||
|
+ >> SRCI_SRNB_SHIFT;
|
||||||
|
+ } else {
|
||||||
|
+ nb = (coreinfo & SRCI_SRNB_MASK) >> SRCI_SRNB_SHIFT;
|
||||||
|
+ }
|
||||||
|
for (i = 0; i < nb; i++) {
|
||||||
|
retent = brcmf_chip_socram_banksize(sr, i, &banksize);
|
||||||
|
*ramsize += banksize;
|
||||||
|
@@ -1356,6 +1363,11 @@ bool brcmf_chip_sr_capable(struct brcmf_
|
||||||
|
addr = CORE_CC_REG(base, sr_control1);
|
||||||
|
reg = chip->ops->read32(chip->ctx, addr);
|
||||||
|
return reg != 0;
|
||||||
|
+ case CY_CC_43012_CHIP_ID:
|
||||||
|
+ addr = CORE_CC_REG(pmu->base, retention_ctl);
|
||||||
|
+ reg = chip->ops->read32(chip->ctx, addr);
|
||||||
|
+ return (reg & (PMU_RCTL_MACPHY_DISABLE_MASK |
|
||||||
|
+ PMU_RCTL_LOGIC_DISABLE_MASK)) == 0;
|
||||||
|
default:
|
||||||
|
addr = CORE_CC_REG(pmu->base, pmucapabilities_ext);
|
||||||
|
reg = chip->ops->read32(chip->ctx, addr);
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
@@ -624,6 +624,7 @@ BRCMF_FW_DEF(43455, "brcmfmac43455-sdio"
|
||||||
|
BRCMF_FW_DEF(4354, "brcmfmac4354-sdio");
|
||||||
|
BRCMF_FW_DEF(4356, "brcmfmac4356-sdio");
|
||||||
|
BRCMF_FW_DEF(4373, "brcmfmac4373-sdio");
|
||||||
|
+BRCMF_FW_DEF(43012, "brcmfmac43012-sdio");
|
||||||
|
|
||||||
|
static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
|
||||||
|
@@ -643,7 +644,8 @@ static const struct brcmf_firmware_mappi
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFFC0, 43455),
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, 4354),
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
|
||||||
|
- BRCMF_FW_ENTRY(CY_CC_4373_CHIP_ID, 0xFFFFFFFF, 4373)
|
||||||
|
+ BRCMF_FW_ENTRY(CY_CC_4373_CHIP_ID, 0xFFFFFFFF, 4373),
|
||||||
|
+ BRCMF_FW_ENTRY(CY_CC_43012_CHIP_ID, 0xFFFFFFFF, 43012)
|
||||||
|
};
|
||||||
|
|
||||||
|
static void pkt_align(struct sk_buff *p, int len, int align)
|
||||||
|
@@ -677,6 +679,14 @@ brcmf_sdio_kso_control(struct brcmf_sdio
|
||||||
|
/* 1st KSO write goes to AOS wake up core if device is asleep */
|
||||||
|
brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val, &err);
|
||||||
|
|
||||||
|
+ /* In case of 43012 chip, the chip could go down immediately after
|
||||||
|
+ * KSO bit is cleared. So the further reads of KSO register could
|
||||||
|
+ * fail. Thereby just bailing out immediately after clearing KSO
|
||||||
|
+ * bit, to avoid polling of KSO bit.
|
||||||
|
+ */
|
||||||
|
+ if (!on && bus->ci->chip == CY_CC_43012_CHIP_ID)
|
||||||
|
+ return err;
|
||||||
|
+
|
||||||
|
if (on) {
|
||||||
|
/* device WAKEUP through KSO:
|
||||||
|
* write bit 0 & read back until
|
||||||
|
@@ -2402,6 +2412,14 @@ static int brcmf_sdio_tx_ctrlframe(struc
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static bool brcmf_chip_is_ulp(struct brcmf_chip *ci)
|
||||||
|
+{
|
||||||
|
+ if (ci->chip == CY_CC_43012_CHIP_ID)
|
||||||
|
+ return true;
|
||||||
|
+ else
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void brcmf_sdio_bus_stop(struct device *dev)
|
||||||
|
{
|
||||||
|
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||||
|
@@ -2409,7 +2427,7 @@ static void brcmf_sdio_bus_stop(struct d
|
||||||
|
struct brcmf_sdio *bus = sdiodev->bus;
|
||||||
|
struct brcmf_core *core = bus->sdio_core;
|
||||||
|
u32 local_hostintmask;
|
||||||
|
- u8 saveclk;
|
||||||
|
+ u8 saveclk, bpreq;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
brcmf_dbg(TRACE, "Enter\n");
|
||||||
|
@@ -2436,9 +2454,14 @@ static void brcmf_sdio_bus_stop(struct d
|
||||||
|
/* Force backplane clocks to assure F2 interrupt propagates */
|
||||||
|
saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
|
||||||
|
&err);
|
||||||
|
- if (!err)
|
||||||
|
- brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
|
||||||
|
- (saveclk | SBSDIO_FORCE_HT), &err);
|
||||||
|
+ if (!err) {
|
||||||
|
+ bpreq = saveclk;
|
||||||
|
+ bpreq |= brcmf_chip_is_ulp(bus->ci) ?
|
||||||
|
+ SBSDIO_HT_AVAIL_REQ : SBSDIO_FORCE_HT;
|
||||||
|
+ brcmf_sdiod_writeb(sdiodev,
|
||||||
|
+ SBSDIO_FUNC1_CHIPCLKCSR,
|
||||||
|
+ bpreq, &err);
|
||||||
|
+ }
|
||||||
|
if (err)
|
||||||
|
brcmf_err("Failed to force clock for F2: err %d\n",
|
||||||
|
err);
|
||||||
|
@@ -3328,20 +3351,45 @@ err:
|
||||||
|
return bcmerror;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static bool brcmf_sdio_aos_no_decode(struct brcmf_sdio *bus)
|
||||||
|
+{
|
||||||
|
+ if (bus->ci->chip == CY_CC_43012_CHIP_ID)
|
||||||
|
+ return true;
|
||||||
|
+ else
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void brcmf_sdio_sr_init(struct brcmf_sdio *bus)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
u8 val;
|
||||||
|
+ u8 wakeupctrl;
|
||||||
|
+ u8 cardcap;
|
||||||
|
+ u8 chipclkcsr;
|
||||||
|
|
||||||
|
brcmf_dbg(TRACE, "Enter\n");
|
||||||
|
|
||||||
|
+ if (brcmf_chip_is_ulp(bus->ci)) {
|
||||||
|
+ wakeupctrl = SBSDIO_FUNC1_WCTRL_ALPWAIT_SHIFT;
|
||||||
|
+ chipclkcsr = SBSDIO_HT_AVAIL_REQ;
|
||||||
|
+ } else {
|
||||||
|
+ wakeupctrl = SBSDIO_FUNC1_WCTRL_HTWAIT_SHIFT;
|
||||||
|
+ chipclkcsr = SBSDIO_FORCE_HT;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (brcmf_sdio_aos_no_decode(bus)) {
|
||||||
|
+ cardcap = SDIO_CCCR_BRCM_CARDCAP_CMD_NODEC;
|
||||||
|
+ } else {
|
||||||
|
+ cardcap = (SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT |
|
||||||
|
+ SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, &err);
|
||||||
|
if (err) {
|
||||||
|
brcmf_err("error reading SBSDIO_FUNC1_WAKEUPCTRL\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- val |= 1 << SBSDIO_FUNC1_WCTRL_HTWAIT_SHIFT;
|
||||||
|
+ val |= 1 << wakeupctrl;
|
||||||
|
brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, val, &err);
|
||||||
|
if (err) {
|
||||||
|
brcmf_err("error writing SBSDIO_FUNC1_WAKEUPCTRL\n");
|
||||||
|
@@ -3350,8 +3398,7 @@ static void brcmf_sdio_sr_init(struct br
|
||||||
|
|
||||||
|
/* Add CMD14 Support */
|
||||||
|
brcmf_sdiod_func0_wb(bus->sdiodev, SDIO_CCCR_BRCM_CARDCAP,
|
||||||
|
- (SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT |
|
||||||
|
- SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT),
|
||||||
|
+ cardcap,
|
||||||
|
&err);
|
||||||
|
if (err) {
|
||||||
|
brcmf_err("error writing SDIO_CCCR_BRCM_CARDCAP\n");
|
||||||
|
@@ -3359,7 +3406,7 @@ static void brcmf_sdio_sr_init(struct br
|
||||||
|
}
|
||||||
|
|
||||||
|
brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
|
||||||
|
- SBSDIO_FORCE_HT, &err);
|
||||||
|
+ chipclkcsr, &err);
|
||||||
|
if (err) {
|
||||||
|
brcmf_err("error writing SBSDIO_FUNC1_CHIPCLKCSR\n");
|
||||||
|
return;
|
||||||
|
@@ -4051,7 +4098,7 @@ static void brcmf_sdio_firmware_callback
|
||||||
|
const struct firmware *code;
|
||||||
|
void *nvram;
|
||||||
|
u32 nvram_len;
|
||||||
|
- u8 saveclk;
|
||||||
|
+ u8 saveclk, bpreq;
|
||||||
|
u8 devctl;
|
||||||
|
|
||||||
|
brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
|
||||||
|
@@ -4085,8 +4132,11 @@ static void brcmf_sdio_firmware_callback
|
||||||
|
/* Force clocks on backplane to be sure F2 interrupt propagates */
|
||||||
|
saveclk = brcmf_sdiod_readb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR, &err);
|
||||||
|
if (!err) {
|
||||||
|
+ bpreq = saveclk;
|
||||||
|
+ bpreq |= brcmf_chip_is_ulp(bus->ci) ?
|
||||||
|
+ SBSDIO_HT_AVAIL_REQ : SBSDIO_FORCE_HT;
|
||||||
|
brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR,
|
||||||
|
- (saveclk | SBSDIO_FORCE_HT), &err);
|
||||||
|
+ bpreq, &err);
|
||||||
|
}
|
||||||
|
if (err) {
|
||||||
|
brcmf_err("Failed to force clock for F2: err %d\n", err);
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
|
||||||
|
@@ -60,6 +60,7 @@
|
||||||
|
#define BRCM_CC_43664_CHIP_ID 43664
|
||||||
|
#define BRCM_CC_4371_CHIP_ID 0x4371
|
||||||
|
#define CY_CC_4373_CHIP_ID 0x4373
|
||||||
|
+#define CY_CC_43012_CHIP_ID 43012
|
||||||
|
|
||||||
|
/* USB Device IDs */
|
||||||
|
#define BRCM_USB_43143_DEVICE_ID 0xbd1e
|
||||||
|
--- a/include/linux/mmc/sdio_ids.h
|
||||||
|
+++ b/include/linux/mmc/sdio_ids.h
|
||||||
|
@@ -42,6 +42,7 @@
|
||||||
|
#define SDIO_DEVICE_ID_BROADCOM_4354 0x4354
|
||||||
|
#define SDIO_DEVICE_ID_BROADCOM_4356 0x4356
|
||||||
|
#define SDIO_DEVICE_ID_CYPRESS_4373 0x4373
|
||||||
|
+#define SDIO_DEVICE_ID_CYPRESS_43012 43012
|
||||||
|
|
||||||
|
#define SDIO_VENDOR_ID_INTEL 0x0089
|
||||||
|
#define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX 0x1402
|
@ -0,0 +1,60 @@
|
|||||||
|
From b021a6bc1175442609af0b66d64f850883e155fb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chi-Hsien Lin <Chi-Hsien.Lin@cypress.com>
|
||||||
|
Date: Wed, 21 Nov 2018 07:53:48 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: allow GCI core enumuration
|
||||||
|
|
||||||
|
GCI core is needed for ULP operation. Allow GCI core enumuration with
|
||||||
|
below changes:
|
||||||
|
- Allow GCI to be added to core list even when it doesn't have a wrapper.
|
||||||
|
- Allow 8K address space size.
|
||||||
|
- Don't overwrite the address value when an additional size descriptor
|
||||||
|
is in place.
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
.../wireless/broadcom/brcm80211/brcmfmac/chip.c | 14 ++++++++------
|
||||||
|
1 file changed, 8 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||||
|
@@ -786,7 +786,7 @@ static int brcmf_chip_dmp_get_regaddr(st
|
||||||
|
u32 *regbase, u32 *wrapbase)
|
||||||
|
{
|
||||||
|
u8 desc;
|
||||||
|
- u32 val;
|
||||||
|
+ u32 val, szdesc;
|
||||||
|
u8 mpnum = 0;
|
||||||
|
u8 stype, sztype, wraptype;
|
||||||
|
|
||||||
|
@@ -832,14 +832,15 @@ static int brcmf_chip_dmp_get_regaddr(st
|
||||||
|
|
||||||
|
/* next size descriptor can be skipped */
|
||||||
|
if (sztype == DMP_SLAVE_SIZE_DESC) {
|
||||||
|
- val = brcmf_chip_dmp_get_desc(ci, eromaddr, NULL);
|
||||||
|
+ szdesc = brcmf_chip_dmp_get_desc(ci, eromaddr, NULL);
|
||||||
|
/* skip upper size descriptor if present */
|
||||||
|
- if (val & DMP_DESC_ADDRSIZE_GT32)
|
||||||
|
+ if (szdesc & DMP_DESC_ADDRSIZE_GT32)
|
||||||
|
brcmf_chip_dmp_get_desc(ci, eromaddr, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* only look for 4K register regions */
|
||||||
|
- if (sztype != DMP_SLAVE_SIZE_4K)
|
||||||
|
+ /* look for 4K or 8K register regions */
|
||||||
|
+ if (sztype != DMP_SLAVE_SIZE_4K &&
|
||||||
|
+ sztype != DMP_SLAVE_SIZE_8K)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
stype = (val & DMP_SLAVE_TYPE) >> DMP_SLAVE_TYPE_S;
|
||||||
|
@@ -896,7 +897,8 @@ int brcmf_chip_dmp_erom_scan(struct brcm
|
||||||
|
|
||||||
|
/* need core with ports */
|
||||||
|
if (nmw + nsw == 0 &&
|
||||||
|
- id != BCMA_CORE_PMU)
|
||||||
|
+ id != BCMA_CORE_PMU &&
|
||||||
|
+ id != BCMA_CORE_GCI)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* try to obtain register address info */
|
@ -0,0 +1,49 @@
|
|||||||
|
From f95a8d9c6aca196f1ace5b2e53a3dd3bc491b1b3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Naveen Gupta <naveen.gupta@cypress.com>
|
||||||
|
Date: Wed, 21 Nov 2018 07:53:49 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: update 43012 F2 watermark setting to fix DMA Error
|
||||||
|
during UDP RX Traffic
|
||||||
|
|
||||||
|
The number of words that the read FIFO has to contain except
|
||||||
|
the end of frame before sends data back to the host.
|
||||||
|
Max watermark = (512B - 2* (BurstLength))/4 =
|
||||||
|
(512 - 128)/4 = 384/4 = 0x60
|
||||||
|
so if burst length (i.e. BurstLength = 64) is increased,
|
||||||
|
watermark has to be reduced. This is the optimal setting for this chip.
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Naveen Gupta <naveen.gupta@cypress.com>
|
||||||
|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
.../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 12 ++++++++++++
|
||||||
|
1 file changed, 12 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
@@ -52,6 +52,7 @@
|
||||||
|
/* watermark expressed in number of words */
|
||||||
|
#define DEFAULT_F2_WATERMARK 0x8
|
||||||
|
#define CY_4373_F2_WATERMARK 0x40
|
||||||
|
+#define CY_43012_F2_WATERMARK 0x60
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
|
||||||
|
@@ -4173,6 +4174,17 @@ static void brcmf_sdio_firmware_callback
|
||||||
|
CY_4373_F2_WATERMARK |
|
||||||
|
SBSDIO_MESBUSYCTRL_ENAB, &err);
|
||||||
|
break;
|
||||||
|
+ case SDIO_DEVICE_ID_CYPRESS_43012:
|
||||||
|
+ brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
|
||||||
|
+ CY_43012_F2_WATERMARK);
|
||||||
|
+ brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
|
||||||
|
+ CY_43012_F2_WATERMARK, &err);
|
||||||
|
+ devctl = brcmf_sdiod_readb(sdiod, SBSDIO_DEVICE_CTL,
|
||||||
|
+ &err);
|
||||||
|
+ devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
|
||||||
|
+ brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
|
||||||
|
+ &err);
|
||||||
|
+ break;
|
||||||
|
default:
|
||||||
|
brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
|
||||||
|
DEFAULT_F2_WATERMARK, &err);
|
@ -0,0 +1,57 @@
|
|||||||
|
From 2f2d389efda4caa4c1b69cb4fa2ab217f0fe6d6f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chi-Hsien Lin <Chi-Hsien.Lin@cypress.com>
|
||||||
|
Date: Wed, 21 Nov 2018 07:53:50 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: 4373 save-restore support
|
||||||
|
|
||||||
|
Use chipcommon sr_control0 register to check 4373 sr support.
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
.../broadcom/brcm80211/brcmfmac/chip.c | 5 +++++
|
||||||
|
.../broadcom/brcm80211/include/chipcommon.h | 19 +++++++++++++++++++
|
||||||
|
2 files changed, 24 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||||
|
@@ -1365,6 +1365,11 @@ bool brcmf_chip_sr_capable(struct brcmf_
|
||||||
|
addr = CORE_CC_REG(base, sr_control1);
|
||||||
|
reg = chip->ops->read32(chip->ctx, addr);
|
||||||
|
return reg != 0;
|
||||||
|
+ case CY_CC_4373_CHIP_ID:
|
||||||
|
+ /* explicitly check SR engine enable bit */
|
||||||
|
+ addr = CORE_CC_REG(base, sr_control0);
|
||||||
|
+ reg = chip->ops->read32(chip->ctx, addr);
|
||||||
|
+ return (reg & CC_SR_CTL0_ENABLE_MASK) != 0;
|
||||||
|
case CY_CC_43012_CHIP_ID:
|
||||||
|
addr = CORE_CC_REG(pmu->base, retention_ctl);
|
||||||
|
reg = chip->ops->read32(chip->ctx, addr);
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/include/chipcommon.h
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/include/chipcommon.h
|
||||||
|
@@ -269,6 +269,25 @@ struct chipcregs {
|
||||||
|
/* GSIO (spi/i2c) present, rev >= 37 */
|
||||||
|
#define CC_CAP2_GSIO 0x00000002
|
||||||
|
|
||||||
|
+/* sr_control0, rev >= 48 */
|
||||||
|
+#define CC_SR_CTL0_ENABLE_MASK BIT(0)
|
||||||
|
+#define CC_SR_CTL0_ENABLE_SHIFT 0
|
||||||
|
+#define CC_SR_CTL0_EN_SR_ENG_CLK_SHIFT 1 /* sr_clk to sr_memory enable */
|
||||||
|
+#define CC_SR_CTL0_RSRC_TRIGGER_SHIFT 2 /* Rising edge resource trigger 0 to
|
||||||
|
+ * sr_engine
|
||||||
|
+ */
|
||||||
|
+#define CC_SR_CTL0_MIN_DIV_SHIFT 6 /* Min division value for fast clk
|
||||||
|
+ * in sr_engine
|
||||||
|
+ */
|
||||||
|
+#define CC_SR_CTL0_EN_SBC_STBY_SHIFT 16
|
||||||
|
+#define CC_SR_CTL0_EN_SR_ALP_CLK_MASK_SHIFT 18
|
||||||
|
+#define CC_SR_CTL0_EN_SR_HT_CLK_SHIFT 19
|
||||||
|
+#define CC_SR_CTL0_ALLOW_PIC_SHIFT 20 /* Allow pic to separate power
|
||||||
|
+ * domains
|
||||||
|
+ */
|
||||||
|
+#define CC_SR_CTL0_MAX_SR_LQ_CLK_CNT_SHIFT 25
|
||||||
|
+#define CC_SR_CTL0_EN_MEM_DISABLE_FOR_SLEEP 30
|
||||||
|
+
|
||||||
|
/* pmucapabilities */
|
||||||
|
#define PCAP_REV_MASK 0x000000ff
|
||||||
|
#define PCAP_RC_MASK 0x00001f00
|
@ -0,0 +1,45 @@
|
|||||||
|
From 29f6589140a10ece8c1d73f58043ea5b3473ab3e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wright Feng <wright.feng@cypress.com>
|
||||||
|
Date: Wed, 21 Nov 2018 07:53:52 +0000
|
||||||
|
Subject: [PATCH] brcmfmac: disable command decode in sdio_aos
|
||||||
|
|
||||||
|
AOS is a part of the SDIOD core that becomes active when the rest of
|
||||||
|
SDIOD is sleeping to keep SDIO bus alive responding to reduced set of
|
||||||
|
commands.
|
||||||
|
|
||||||
|
Transaction between AOS and SDIOD is not protected, and if cmd 52 is
|
||||||
|
received in AOS and in the middle of response state changed from AOS to
|
||||||
|
SDIOD, response is corrupted and it causes to SDIO Host controller to
|
||||||
|
hang.
|
||||||
|
|
||||||
|
Command decode for below chips are disabled in this commit:
|
||||||
|
- 4339
|
||||||
|
- 4345
|
||||||
|
- 4354
|
||||||
|
- 4373
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Wright Feng <wright.feng@cypress.com>
|
||||||
|
Signed-off-by: Double Lo <double.lo@cypress.com>
|
||||||
|
Signed-off-by: Madhan Mohan R <madhanmohan.r@cypress.com>
|
||||||
|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
@@ -3354,7 +3354,11 @@ err:
|
||||||
|
|
||||||
|
static bool brcmf_sdio_aos_no_decode(struct brcmf_sdio *bus)
|
||||||
|
{
|
||||||
|
- if (bus->ci->chip == CY_CC_43012_CHIP_ID)
|
||||||
|
+ if (bus->ci->chip == CY_CC_43012_CHIP_ID ||
|
||||||
|
+ bus->ci->chip == CY_CC_4373_CHIP_ID ||
|
||||||
|
+ bus->ci->chip == BRCM_CC_4339_CHIP_ID ||
|
||||||
|
+ bus->ci->chip == BRCM_CC_4345_CHIP_ID ||
|
||||||
|
+ bus->ci->chip == BRCM_CC_4354_CHIP_ID)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
@ -0,0 +1,34 @@
|
|||||||
|
From 412dd15c8177d93abe0c8787b83b31c5eb061405 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Arnd Bergmann <arnd@arndb.de>
|
||||||
|
Date: Mon, 10 Dec 2018 21:55:37 +0100
|
||||||
|
Subject: [PATCH] brcmfmac: fix false-positive -Wmaybe-unintialized warning
|
||||||
|
|
||||||
|
When CONFIG_NO_AUTO_INLINE is set, we get a false-postive warning
|
||||||
|
for the brcmf_fw_request_nvram_done() function, after gcc figures
|
||||||
|
out that brcmf_fw_nvram_from_efi() might not set the 'data_len'
|
||||||
|
variable, but fails to notice that it always returns NULL:
|
||||||
|
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c: In function 'brcmf_fw_request_nvram_done':
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c:560:11: error: 'data_len' may be used uninitialized in this function [-Werror=maybe-uninitialized]
|
||||||
|
|
||||||
|
Mark it 'inline' to force gcc to understand this.
|
||||||
|
|
||||||
|
Fixes: ce2e6db554fa ("brcmfmac: Add support for getting nvram contents from EFI variables")
|
||||||
|
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
|
||||||
|
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||||
|
@@ -512,7 +512,7 @@ fail:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
-static u8 *brcmf_fw_nvram_from_efi(size_t *data_len) { return NULL; }
|
||||||
|
+static inline u8 *brcmf_fw_nvram_from_efi(size_t *data_len) { return NULL; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void brcmf_fw_free_request(struct brcmf_fw_request *req)
|
@ -1,7 +1,7 @@
|
|||||||
From 22d319f2665dd3458d59c934fa0c8cf1b1d7227f Mon Sep 17 00:00:00 2001
|
From 8c892df41500469729e0d662816300196e4f463d Mon Sep 17 00:00:00 2001
|
||||||
From: Stijn Tintel <stijn@linux-ipv6.be>
|
From: Stijn Tintel <stijn@linux-ipv6.be>
|
||||||
Date: Sat, 10 Nov 2018 13:25:20 +0200
|
Date: Tue, 4 Dec 2018 20:29:05 +0200
|
||||||
Subject: [PATCH wireless-drivers] brcmfmac: fix roamoff=1 modparam
|
Subject: [PATCH] brcmfmac: fix roamoff=1 modparam
|
||||||
|
|
||||||
When the update_connect_param callback is set, nl80211 expects the flag
|
When the update_connect_param callback is set, nl80211 expects the flag
|
||||||
WIPHY_FLAG_SUPPORTS_FW_ROAM to be set as well. However, this flag is
|
WIPHY_FLAG_SUPPORTS_FW_ROAM to be set as well. However, this flag is
|
||||||
@ -15,6 +15,7 @@ Fixes: 7f9a3e150ec7 ("nl80211: Update ERP info using NL80211_CMD_UPDATE_CONNECT_
|
|||||||
Cc: Stable <stable@vger.kernel.org> # 4.19+
|
Cc: Stable <stable@vger.kernel.org> # 4.19+
|
||||||
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||||
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
|
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
---
|
---
|
||||||
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 11 +++++++++--
|
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 11 +++++++++--
|
||||||
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.h | 2 +-
|
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.h | 2 +-
|
@ -0,0 +1,41 @@
|
|||||||
|
From 861cb5eb467f5e38dce1aabe4e8db379255bd89b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stefan Wahren <stefan.wahren@i2se.com>
|
||||||
|
Date: Wed, 12 Dec 2018 20:20:06 +0100
|
||||||
|
Subject: [PATCH] brcmfmac: Fix access point mode
|
||||||
|
|
||||||
|
Since commit 1204aa17f3b4 ("brcmfmac: set WIPHY_FLAG_HAVE_AP_SME flag")
|
||||||
|
the Raspberry Pi 3 A+ (BCM43455) isn't able to operate in AP mode with
|
||||||
|
hostapd (device_ap_sme=1 use_monitor=0):
|
||||||
|
|
||||||
|
brcmfmac: brcmf_cfg80211_stop_ap: setting AP mode failed -52
|
||||||
|
|
||||||
|
So add the missing mgmt_stypes for AP mode to fix this.
|
||||||
|
|
||||||
|
Fixes: 1204aa17f3b4 ("brcmfmac: set WIPHY_FLAG_HAVE_AP_SME flag")
|
||||||
|
Suggested-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
|
||||||
|
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 10 ++++++++++
|
||||||
|
1 file changed, 10 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||||
|
@@ -6308,6 +6308,16 @@ brcmf_txrx_stypes[NUM_NL80211_IFTYPES] =
|
||||||
|
.tx = 0xffff,
|
||||||
|
.rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
|
||||||
|
BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
|
||||||
|
+ },
|
||||||
|
+ [NL80211_IFTYPE_AP] = {
|
||||||
|
+ .tx = 0xffff,
|
||||||
|
+ .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
|
||||||
|
+ BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
|
||||||
|
+ BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
|
||||||
|
+ BIT(IEEE80211_STYPE_DISASSOC >> 4) |
|
||||||
|
+ BIT(IEEE80211_STYPE_AUTH >> 4) |
|
||||||
|
+ BIT(IEEE80211_STYPE_DEAUTH >> 4) |
|
||||||
|
+ BIT(IEEE80211_STYPE_ACTION >> 4)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user