mac80211: backport brcmfmac changes from kernel 4.18
authorRafał Miłecki <rafal@milecki.pl>
Mon, 18 Jun 2018 05:32:34 +0000 (07:32 +0200)
committerRafał Miłecki <rafal@milecki.pl>
Mon, 18 Jun 2018 05:41:40 +0000 (07:41 +0200)
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
package/kernel/mac80211/patches/329-v4.18-0001-brcmfmac-add-support-for-BCM4366E-chipset.patch [new file with mode: 0644]
package/kernel/mac80211/patches/330-v4.18-0001-brcmfmac-check-p2pdev-mac-address-uniqueness.patch [new file with mode: 0644]
package/kernel/mac80211/patches/330-v4.18-0002-brcmfmac-reports-boottime_ns-while-informing-bss.patch [new file with mode: 0644]
package/kernel/mac80211/patches/330-v4.18-0003-brcmfmac-use-nl80211_band-directly-to-get-ieee80211-.patch [new file with mode: 0644]
package/kernel/mac80211/patches/330-v4.18-0004-brcmfmac-constify-firmware-mapping-tables.patch [new file with mode: 0644]
package/kernel/mac80211/patches/330-v4.18-0005-brcmfmac-add-hostready-indication.patch [new file with mode: 0644]
package/kernel/mac80211/patches/330-v4.18-0006-brcmfmac-coarse-support-for-PCIe-shared-structure-re.patch [new file with mode: 0644]
package/kernel/mac80211/patches/331-v4.18-0001-brcmfmac-Add-support-for-bcm43364-wireless-chipset.patch [new file with mode: 0644]
package/kernel/mac80211/patches/332-v4.18-0001-brcmfmac-set-WIPHY_FLAG_HAVE_AP_SME-flag.patch [new file with mode: 0644]
package/kernel/mac80211/patches/333-v4.18-0001-brcmfmac-fix-initialization-of-struct-cfg80211_infor.patch [new file with mode: 0644]
package/kernel/mac80211/patches/334-v4.18-0001-brcmfmac-add-debugfs-entry-for-reading-firmware-capa.patch [new file with mode: 0644]

diff --git a/package/kernel/mac80211/patches/329-v4.18-0001-brcmfmac-add-support-for-BCM4366E-chipset.patch b/package/kernel/mac80211/patches/329-v4.18-0001-brcmfmac-add-support-for-BCM4366E-chipset.patch
new file mode 100644 (file)
index 0000000..e31d698
--- /dev/null
@@ -0,0 +1,48 @@
+From 1f589e2510d5df1192dca7c089103a2cbd028101 Mon Sep 17 00:00:00 2001
+From: Dan Haab <dhaab@luxul.com>
+Date: Tue, 3 Apr 2018 10:21:56 +0200
+Subject: [PATCH] brcmfmac: add support for BCM4366E chipset
+
+BCM4366E is a wireless chipset with a BCM43664 ChipCommon. It's
+supported by the same firmware as 4366c0.
+
+Signed-off-by: Dan Haab <dan.haab@luxul.com>
+[arend: rebase patch and remove unnecessary definition]
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c       | 1 +
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c       | 1 +
+ drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h | 1 +
+ 3 files changed, 3 insertions(+)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
+@@ -689,6 +689,7 @@ static u32 brcmf_chip_tcm_rambase(struct
+       case BRCM_CC_43525_CHIP_ID:
+       case BRCM_CC_4365_CHIP_ID:
+       case BRCM_CC_4366_CHIP_ID:
++      case BRCM_CC_43664_CHIP_ID:
+               return 0x200000;
+       case CY_CC_4373_CHIP_ID:
+               return 0x160000;
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+@@ -75,6 +75,7 @@ static struct brcmf_firmware_mapping brc
+       BRCMF_FW_ENTRY(BRCM_CC_4365_CHIP_ID, 0xFFFFFFF0, 4365C),
+       BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0x0000000F, 4366B),
+       BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0xFFFFFFF0, 4366C),
++      BRCMF_FW_ENTRY(BRCM_CC_43664_CHIP_ID, 0xFFFFFFF0, 4366C),
+       BRCMF_FW_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371),
+ };
+--- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
++++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
+@@ -57,6 +57,7 @@
+ #define BRCM_CC_43602_CHIP_ID         43602
+ #define BRCM_CC_4365_CHIP_ID          0x4365
+ #define BRCM_CC_4366_CHIP_ID          0x4366
++#define BRCM_CC_43664_CHIP_ID         43664
+ #define BRCM_CC_4371_CHIP_ID          0x4371
+ #define CY_CC_4373_CHIP_ID            0x4373
diff --git a/package/kernel/mac80211/patches/330-v4.18-0001-brcmfmac-check-p2pdev-mac-address-uniqueness.patch b/package/kernel/mac80211/patches/330-v4.18-0001-brcmfmac-check-p2pdev-mac-address-uniqueness.patch
new file mode 100644 (file)
index 0000000..909000c
--- /dev/null
@@ -0,0 +1,34 @@
+From cb746e47837ad0f35c8ae28e9aacc8eb07916d2a Mon Sep 17 00:00:00 2001
+From: Arend Van Spriel <arend.vanspriel@broadcom.com>
+Date: Thu, 26 Apr 2018 12:16:47 +0200
+Subject: [PATCH] brcmfmac: check p2pdev mac address uniqueness
+
+The mac address for p2pdev must be different from the primary interface
+due to firmware requirement. Add an explicit check for this requirement
+if user-space provides a mac address.
+
+Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
+Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
+Reviewed-by: Franky Lin <franky.lin@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
+@@ -2073,6 +2073,13 @@ static struct wireless_dev *brcmf_p2p_cr
+       }
+       pri_ifp = p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp;
++
++      /* firmware requires unique mac address for p2pdev interface */
++      if (addr && ether_addr_equal(addr, pri_ifp->mac_addr)) {
++              brcmf_err("discovery vif must be different from primary interface\n");
++              return ERR_PTR(-EINVAL);
++      }
++
+       brcmf_p2p_generate_bss_mac(p2p, addr);
+       brcmf_p2p_set_firmware(pri_ifp, p2p->dev_addr);
diff --git a/package/kernel/mac80211/patches/330-v4.18-0002-brcmfmac-reports-boottime_ns-while-informing-bss.patch b/package/kernel/mac80211/patches/330-v4.18-0002-brcmfmac-reports-boottime_ns-while-informing-bss.patch
new file mode 100644 (file)
index 0000000..4f59507
--- /dev/null
@@ -0,0 +1,76 @@
+From 7742fce4c007141617dab9bcb90034b3c0fe2347 Mon Sep 17 00:00:00 2001
+From: Franky Lin <franky.lin@broadcom.com>
+Date: Thu, 26 Apr 2018 12:18:35 +0200
+Subject: [PATCH] brcmfmac: reports boottime_ns while informing bss
+
+Provides a timestamp in bss information so user space can see when the
+bss info was updated. Since tsf is not available from the dongle events
+boottime is reported instead.
+
+Reported-by: Dmitry Shmidt <dimitrysh@google.com>
+Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Franky Lin <franky.lin@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../broadcom/brcm80211/brcmfmac/cfg80211.c         | 26 +++++++++++-----------
+ 1 file changed, 13 insertions(+), 13 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+@@ -2728,7 +2728,6 @@ static s32 brcmf_inform_single_bss(struc
+                                  struct brcmf_bss_info_le *bi)
+ {
+       struct wiphy *wiphy = cfg_to_wiphy(cfg);
+-      struct ieee80211_channel *notify_channel;
+       struct cfg80211_bss *bss;
+       struct ieee80211_supported_band *band;
+       struct brcmu_chan ch;
+@@ -2738,7 +2737,7 @@ static s32 brcmf_inform_single_bss(struc
+       u16 notify_interval;
+       u8 *notify_ie;
+       size_t notify_ielen;
+-      s32 notify_signal;
++      struct cfg80211_inform_bss bss_data = { 0 };
+       if (le32_to_cpu(bi->length) > WL_BSS_INFO_MAX) {
+               brcmf_err("Bss info is larger than buffer. Discarding\n");
+@@ -2758,27 +2757,28 @@ static s32 brcmf_inform_single_bss(struc
+               band = wiphy->bands[NL80211_BAND_5GHZ];
+       freq = ieee80211_channel_to_frequency(channel, band->band);
+-      notify_channel = ieee80211_get_channel(wiphy, freq);
++      bss_data.chan = ieee80211_get_channel(wiphy, freq);
++      bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20;
++      bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime());
+       notify_capability = le16_to_cpu(bi->capability);
+       notify_interval = le16_to_cpu(bi->beacon_period);
+       notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset);
+       notify_ielen = le32_to_cpu(bi->ie_length);
+-      notify_signal = (s16)le16_to_cpu(bi->RSSI) * 100;
++      bss_data.signal = (s16)le16_to_cpu(bi->RSSI) * 100;
+       brcmf_dbg(CONN, "bssid: %pM\n", bi->BSSID);
+       brcmf_dbg(CONN, "Channel: %d(%d)\n", channel, freq);
+       brcmf_dbg(CONN, "Capability: %X\n", notify_capability);
+       brcmf_dbg(CONN, "Beacon interval: %d\n", notify_interval);
+-      brcmf_dbg(CONN, "Signal: %d\n", notify_signal);
++      brcmf_dbg(CONN, "Signal: %d\n", bss_data.signal);
+-      bss = cfg80211_inform_bss(wiphy, notify_channel,
+-                                CFG80211_BSS_FTYPE_UNKNOWN,
+-                                (const u8 *)bi->BSSID,
+-                                0, notify_capability,
+-                                notify_interval, notify_ie,
+-                                notify_ielen, notify_signal,
+-                                GFP_KERNEL);
++      bss = cfg80211_inform_bss_data(wiphy, &bss_data,
++                                     CFG80211_BSS_FTYPE_UNKNOWN,
++                                     (const u8 *)bi->BSSID,
++                                     0, notify_capability,
++                                     notify_interval, notify_ie,
++                                     notify_ielen, GFP_KERNEL);
+       if (!bss)
+               return -ENOMEM;
diff --git a/package/kernel/mac80211/patches/330-v4.18-0003-brcmfmac-use-nl80211_band-directly-to-get-ieee80211-.patch b/package/kernel/mac80211/patches/330-v4.18-0003-brcmfmac-use-nl80211_band-directly-to-get-ieee80211-.patch
new file mode 100644 (file)
index 0000000..2d60c0d
--- /dev/null
@@ -0,0 +1,43 @@
+From aed14219067ab96e5eeb7730e9bceed10d9be989 Mon Sep 17 00:00:00 2001
+From: Franky Lin <franky.lin@broadcom.com>
+Date: Thu, 26 Apr 2018 12:16:48 +0200
+Subject: [PATCH] brcmfmac: use nl80211_band directly to get ieee80211 channel
+
+The enum nl80211_band used to retrieve wiphy->bands is the same as
+wiphy->bands->band which is checked by wiphy_register(). So it can be used
+directly as parameter of ieee80211_channel_to_frequency().
+
+Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Franky Lin <franky.lin@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+@@ -2729,7 +2729,7 @@ static s32 brcmf_inform_single_bss(struc
+ {
+       struct wiphy *wiphy = cfg_to_wiphy(cfg);
+       struct cfg80211_bss *bss;
+-      struct ieee80211_supported_band *band;
++      enum nl80211_band band;
+       struct brcmu_chan ch;
+       u16 channel;
+       u32 freq;
+@@ -2752,11 +2752,11 @@ static s32 brcmf_inform_single_bss(struc
+       channel = bi->ctl_ch;
+       if (channel <= CH_MAX_2G_CHANNEL)
+-              band = wiphy->bands[NL80211_BAND_2GHZ];
++              band = NL80211_BAND_2GHZ;
+       else
+-              band = wiphy->bands[NL80211_BAND_5GHZ];
++              band = NL80211_BAND_5GHZ;
+-      freq = ieee80211_channel_to_frequency(channel, band->band);
++      freq = ieee80211_channel_to_frequency(channel, band);
+       bss_data.chan = ieee80211_get_channel(wiphy, freq);
+       bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20;
+       bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime());
diff --git a/package/kernel/mac80211/patches/330-v4.18-0004-brcmfmac-constify-firmware-mapping-tables.patch b/package/kernel/mac80211/patches/330-v4.18-0004-brcmfmac-constify-firmware-mapping-tables.patch
new file mode 100644 (file)
index 0000000..df26483
--- /dev/null
@@ -0,0 +1,76 @@
+From ff68c9f9c06d1fd437c8f90fc05ca28c47f7d85e Mon Sep 17 00:00:00 2001
+From: Arend Van Spriel <arend.vanspriel@broadcom.com>
+Date: Thu, 26 Apr 2018 12:16:49 +0200
+Subject: [PATCH] brcmfmac: constify firmware mapping tables
+
+The information in the firmware mapping does not need to be modified
+so it can be static const.
+
+Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
+Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
+Reviewed-by: Franky Lin <franky.lin@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 2 +-
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h | 2 +-
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c     | 2 +-
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c     | 2 +-
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c      | 2 +-
+ 5 files changed, 5 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
+@@ -634,7 +634,7 @@ int brcmf_fw_get_firmwares(struct device
+ struct brcmf_fw_request *
+ brcmf_fw_alloc_request(u32 chip, u32 chiprev,
+-                     struct brcmf_firmware_mapping mapping_table[],
++                     const struct brcmf_firmware_mapping mapping_table[],
+                      u32 table_size, struct brcmf_fw_name *fwnames,
+                      u32 n_fwnames)
+ {
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
+@@ -80,7 +80,7 @@ struct brcmf_fw_name {
+ struct brcmf_fw_request *
+ brcmf_fw_alloc_request(u32 chip, u32 chiprev,
+-                     struct brcmf_firmware_mapping mapping_table[],
++                     const struct brcmf_firmware_mapping mapping_table[],
+                      u32 table_size, struct brcmf_fw_name *fwnames,
+                      u32 n_fwnames);
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+@@ -59,7 +59,7 @@ BRCMF_FW_DEF(4366B, "brcmfmac4366b-pcie"
+ BRCMF_FW_DEF(4366C, "brcmfmac4366c-pcie");
+ BRCMF_FW_DEF(4371, "brcmfmac4371-pcie");
+-static struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = {
++static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = {
+       BRCMF_FW_ENTRY(BRCM_CC_43602_CHIP_ID, 0xFFFFFFFF, 43602),
+       BRCMF_FW_ENTRY(BRCM_CC_43465_CHIP_ID, 0xFFFFFFF0, 4366C),
+       BRCMF_FW_ENTRY(BRCM_CC_4350_CHIP_ID, 0x000000FF, 4350C),
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+@@ -619,7 +619,7 @@ BRCMF_FW_DEF(4354, "brcmfmac4354-sdio");
+ BRCMF_FW_DEF(4356, "brcmfmac4356-sdio");
+ BRCMF_FW_DEF(4373, "brcmfmac4373-sdio");
+-static struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
++static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
+       BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
+       BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x0000001F, 43241B0),
+       BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x00000020, 43241B4),
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+@@ -52,7 +52,7 @@ BRCMF_FW_DEF(43242A, "brcmfmac43242a");
+ BRCMF_FW_DEF(43569, "brcmfmac43569");
+ BRCMF_FW_DEF(4373, "brcmfmac4373");
+-static struct brcmf_firmware_mapping brcmf_usb_fwnames[] = {
++static const struct brcmf_firmware_mapping brcmf_usb_fwnames[] = {
+       BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
+       BRCMF_FW_ENTRY(BRCM_CC_43235_CHIP_ID, 0x00000008, 43236B),
+       BRCMF_FW_ENTRY(BRCM_CC_43236_CHIP_ID, 0x00000008, 43236B),
diff --git a/package/kernel/mac80211/patches/330-v4.18-0005-brcmfmac-add-hostready-indication.patch b/package/kernel/mac80211/patches/330-v4.18-0005-brcmfmac-add-hostready-indication.patch
new file mode 100644 (file)
index 0000000..e3d4441
--- /dev/null
@@ -0,0 +1,74 @@
+From 84ad327d18debe19b8d509059b61db445d048b02 Mon Sep 17 00:00:00 2001
+From: Franky Lin <franky.lin@broadcom.com>
+Date: Thu, 26 Apr 2018 12:16:50 +0200
+Subject: [PATCH] brcmfmac: add hostready indication
+
+A hostready signal is introduced to inform firmware through mailbox
+doorbell1 when common ring initialized or D3 exited.
+
+Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Franky Lin <franky.lin@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+@@ -105,7 +105,8 @@ static const struct brcmf_firmware_mappi
+ #define BRCMF_PCIE_PCIE2REG_MAILBOXMASK               0x4C
+ #define BRCMF_PCIE_PCIE2REG_CONFIGADDR                0x120
+ #define BRCMF_PCIE_PCIE2REG_CONFIGDATA                0x124
+-#define BRCMF_PCIE_PCIE2REG_H2D_MAILBOX               0x140
++#define BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_0     0x140
++#define BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_1     0x144
+ #define BRCMF_PCIE2_INTA                      0x01
+ #define BRCMF_PCIE2_INTB                      0x02
+@@ -140,6 +141,7 @@ static const struct brcmf_firmware_mappi
+ #define BRCMF_PCIE_SHARED_VERSION_MASK                0x00FF
+ #define BRCMF_PCIE_SHARED_DMA_INDEX           0x10000
+ #define BRCMF_PCIE_SHARED_DMA_2B_IDX          0x100000
++#define BRCMF_PCIE_SHARED_HOSTRDY_DB1         0x10000000
+ #define BRCMF_PCIE_FLAGS_HTOD_SPLIT           0x4000
+ #define BRCMF_PCIE_FLAGS_DTOH_SPLIT           0x8000
+@@ -782,6 +784,12 @@ static void brcmf_pcie_intr_enable(struc
+                              BRCMF_PCIE_MB_INT_FN0_1);
+ }
++static void brcmf_pcie_hostready(struct brcmf_pciedev_info *devinfo)
++{
++      if (devinfo->shared.flags & BRCMF_PCIE_SHARED_HOSTRDY_DB1)
++              brcmf_pcie_write_reg32(devinfo,
++                                     BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_1, 1);
++}
+ static irqreturn_t brcmf_pcie_quick_check_isr(int irq, void *arg)
+ {
+@@ -924,7 +932,7 @@ static int brcmf_pcie_ring_mb_ring_bell(
+       brcmf_dbg(PCIE, "RING !\n");
+       /* Any arbitrary value will do, lets use 1 */
+-      brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX, 1);
++      brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_0, 1);
+       return 0;
+ }
+@@ -1728,6 +1736,7 @@ static void brcmf_pcie_setup(struct devi
+       init_waitqueue_head(&devinfo->mbdata_resp_wait);
+       brcmf_pcie_intr_enable(devinfo);
++      brcmf_pcie_hostready(devinfo);
+       if (brcmf_attach(&devinfo->pdev->dev, devinfo->settings) == 0)
+               return;
+@@ -1950,6 +1959,7 @@ static int brcmf_pcie_pm_leave_D3(struct
+               brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2);
+               brcmf_bus_change_state(bus, BRCMF_BUS_UP);
+               brcmf_pcie_intr_enable(devinfo);
++              brcmf_pcie_hostready(devinfo);
+               return 0;
+       }
diff --git a/package/kernel/mac80211/patches/330-v4.18-0006-brcmfmac-coarse-support-for-PCIe-shared-structure-re.patch b/package/kernel/mac80211/patches/330-v4.18-0006-brcmfmac-coarse-support-for-PCIe-shared-structure-re.patch
new file mode 100644 (file)
index 0000000..8750037
--- /dev/null
@@ -0,0 +1,97 @@
+From f56324baf329bc9362a52ad77a4a1a0f3356d1bc Mon Sep 17 00:00:00 2001
+From: Franky Lin <franky.lin@broadcom.com>
+Date: Thu, 26 Apr 2018 12:16:51 +0200
+Subject: [PATCH] brcmfmac: coarse support for PCIe shared structure rev7
+
+Revision 7 of PCIe dongle interface increases the item size of tx and rx
+complete rings to accommodate extra payload for new feature. This patch
+simply bump up the size of these two rings without adding the support
+for utilizing the new space. This makes brcmfmac compatible with rev7
+firmware.
+
+Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Franky Lin <franky.lin@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../wireless/broadcom/brcm80211/brcmfmac/msgbuf.h  |  6 ++++--
+ .../wireless/broadcom/brcm80211/brcmfmac/pcie.c    | 23 ++++++++++++++++++----
+ 2 files changed, 23 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h
+@@ -27,8 +27,10 @@
+ #define BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE     40
+ #define BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE      32
+ #define BRCMF_D2H_MSGRING_CONTROL_COMPLETE_ITEMSIZE   24
+-#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE                16
+-#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE                32
++#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE_PRE_V7 16
++#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE                24
++#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE_PRE_V7 32
++#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE                40
+ #define BRCMF_H2D_TXFLOWRING_ITEMSIZE                 48
+ struct msgbuf_buf_addr {
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+@@ -136,8 +136,9 @@ static const struct brcmf_firmware_mappi
+                                                BRCMF_PCIE_MB_INT_D2H3_DB0 | \
+                                                BRCMF_PCIE_MB_INT_D2H3_DB1)
++#define BRCMF_PCIE_SHARED_VERSION_7           7
+ #define BRCMF_PCIE_MIN_SHARED_VERSION         5
+-#define BRCMF_PCIE_MAX_SHARED_VERSION         6
++#define BRCMF_PCIE_MAX_SHARED_VERSION         BRCMF_PCIE_SHARED_VERSION_7
+ #define BRCMF_PCIE_SHARED_VERSION_MASK                0x00FF
+ #define BRCMF_PCIE_SHARED_DMA_INDEX           0x10000
+ #define BRCMF_PCIE_SHARED_DMA_2B_IDX          0x100000
+@@ -318,6 +319,14 @@ static const u32 brcmf_ring_max_item[BRC
+       BRCMF_D2H_MSGRING_RX_COMPLETE_MAX_ITEM
+ };
++static const u32 brcmf_ring_itemsize_pre_v7[BRCMF_NROF_COMMON_MSGRINGS] = {
++      BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE,
++      BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE,
++      BRCMF_D2H_MSGRING_CONTROL_COMPLETE_ITEMSIZE,
++      BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE_PRE_V7,
++      BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE_PRE_V7
++};
++
+ static const u32 brcmf_ring_itemsize[BRCMF_NROF_COMMON_MSGRINGS] = {
+       BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE,
+       BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE,
+@@ -1007,8 +1016,14 @@ brcmf_pcie_alloc_dma_and_ring(struct brc
+       struct brcmf_pcie_ringbuf *ring;
+       u32 size;
+       u32 addr;
++      const u32 *ring_itemsize_array;
++
++      if (devinfo->shared.version < BRCMF_PCIE_SHARED_VERSION_7)
++              ring_itemsize_array = brcmf_ring_itemsize_pre_v7;
++      else
++              ring_itemsize_array = brcmf_ring_itemsize;
+-      size = brcmf_ring_max_item[ring_id] * brcmf_ring_itemsize[ring_id];
++      size = brcmf_ring_max_item[ring_id] * ring_itemsize_array[ring_id];
+       dma_buf = brcmf_pcie_init_dmabuffer_for_device(devinfo, size,
+                       tcm_ring_phys_addr + BRCMF_RING_MEM_BASE_ADDR_OFFSET,
+                       &dma_handle);
+@@ -1018,7 +1033,7 @@ brcmf_pcie_alloc_dma_and_ring(struct brc
+       addr = tcm_ring_phys_addr + BRCMF_RING_MAX_ITEM_OFFSET;
+       brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_max_item[ring_id]);
+       addr = tcm_ring_phys_addr + BRCMF_RING_LEN_ITEMS_OFFSET;
+-      brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_itemsize[ring_id]);
++      brcmf_pcie_write_tcm16(devinfo, addr, ring_itemsize_array[ring_id]);
+       ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+       if (!ring) {
+@@ -1027,7 +1042,7 @@ brcmf_pcie_alloc_dma_and_ring(struct brc
+               return NULL;
+       }
+       brcmf_commonring_config(&ring->commonring, brcmf_ring_max_item[ring_id],
+-                              brcmf_ring_itemsize[ring_id], dma_buf);
++                              ring_itemsize_array[ring_id], dma_buf);
+       ring->dma_handle = dma_handle;
+       ring->devinfo = devinfo;
+       brcmf_commonring_register_cb(&ring->commonring,
diff --git a/package/kernel/mac80211/patches/331-v4.18-0001-brcmfmac-Add-support-for-bcm43364-wireless-chipset.patch b/package/kernel/mac80211/patches/331-v4.18-0001-brcmfmac-Add-support-for-bcm43364-wireless-chipset.patch
new file mode 100644 (file)
index 0000000..13f169b
--- /dev/null
@@ -0,0 +1,45 @@
+From 9c4a121e82634aa000a702c98cd6f05b27d6e186 Mon Sep 17 00:00:00 2001
+From: Sean Lanigan <sean@lano.id.au>
+Date: Fri, 4 May 2018 16:48:23 +1000
+Subject: [PATCH] brcmfmac: Add support for bcm43364 wireless chipset
+
+Add support for the BCM43364 chipset via an SDIO interface, as used in
+e.g. the Murata 1FX module.
+
+The BCM43364 uses the same firmware as the BCM43430 (which is already
+included), the only difference is the omission of Bluetooth.
+
+However, the SDIO_ID for the BCM43364 is 02D0:A9A4, giving it a MODALIAS
+of sdio:c00v02D0dA9A4, which doesn't get recognised and hence doesn't
+load the brcmfmac module. Adding the 'A9A4' ID in the appropriate place
+triggers the brcmfmac driver to load, and then correctly use the
+firmware file 'brcmfmac43430-sdio.bin'.
+
+Signed-off-by: Sean Lanigan <sean@lano.id.au>
+Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 1 +
+ include/linux/mmc/sdio_ids.h                              | 1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
+@@ -963,6 +963,7 @@ static const struct sdio_device_id brcmf
+       BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43340),
+       BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43341),
+       BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43362),
++      BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43364),
+       BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4335_4339),
+       BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4339),
+       BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430),
+--- a/include/linux/mmc/sdio_ids.h
++++ b/include/linux/mmc/sdio_ids.h
+@@ -34,6 +34,7 @@
+ #define SDIO_DEVICE_ID_BROADCOM_4335_4339     0x4335
+ #define SDIO_DEVICE_ID_BROADCOM_4339          0x4339
+ #define SDIO_DEVICE_ID_BROADCOM_43362         0xa962
++#define SDIO_DEVICE_ID_BROADCOM_43364         0xa9a4
+ #define SDIO_DEVICE_ID_BROADCOM_43430         0xa9a6
+ #define SDIO_DEVICE_ID_BROADCOM_4345          0x4345
+ #define SDIO_DEVICE_ID_BROADCOM_43455         0xa9bf
diff --git a/package/kernel/mac80211/patches/332-v4.18-0001-brcmfmac-set-WIPHY_FLAG_HAVE_AP_SME-flag.patch b/package/kernel/mac80211/patches/332-v4.18-0001-brcmfmac-set-WIPHY_FLAG_HAVE_AP_SME-flag.patch
new file mode 100644 (file)
index 0000000..de41e1c
--- /dev/null
@@ -0,0 +1,34 @@
+From 1204aa17f3b4f63e67ac9b7c9afa9496485969c5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Thu, 10 May 2018 15:21:39 +0200
+Subject: [PATCH] brcmfmac: set WIPHY_FLAG_HAVE_AP_SME flag
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+brcmfmac is a FullMAC driver and it implements/uses cfg80211 interface
+for stations management. At the same time it doesn't receive or pass up
+management frames.
+
+This flag indicates that authenticator doesn't have to subscribe to or
+handle management frames. Some authenticators (e.g. hostapd) were
+working with brcmfmac thanks to some extra assumptions. This commit
+clears up the situation.
+
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+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 | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+@@ -6513,6 +6513,7 @@ static int brcmf_setup_wiphy(struct wiph
+       wiphy->flags |= WIPHY_FLAG_NETNS_OK |
+                       WIPHY_FLAG_PS_ON_BY_DEFAULT |
++                      WIPHY_FLAG_HAVE_AP_SME |
+                       WIPHY_FLAG_OFFCHAN_TX |
+                       WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
+       if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_TDLS))
diff --git a/package/kernel/mac80211/patches/333-v4.18-0001-brcmfmac-fix-initialization-of-struct-cfg80211_infor.patch b/package/kernel/mac80211/patches/333-v4.18-0001-brcmfmac-fix-initialization-of-struct-cfg80211_infor.patch
new file mode 100644 (file)
index 0000000..2436bb8
--- /dev/null
@@ -0,0 +1,29 @@
+From 763ece85f45a6b93268e25a0abf02922f911dab4 Mon Sep 17 00:00:00 2001
+From: Franky Lin <franky.lin@broadcom.com>
+Date: Tue, 15 May 2018 11:14:44 +0200
+Subject: [PATCH] brcmfmac: fix initialization of struct cfg80211_inform_bss
+ variable
+
+This patch fixes a sparse warning "Using plain integer as NULL pointer"
+about cfg80211_inform_bss structure initialization.
+
+Reported-by: kbuild test robot <lkp@intel.com>
+Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Franky Lin <franky.lin@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+@@ -2737,7 +2737,7 @@ static s32 brcmf_inform_single_bss(struc
+       u16 notify_interval;
+       u8 *notify_ie;
+       size_t notify_ielen;
+-      struct cfg80211_inform_bss bss_data = { 0 };
++      struct cfg80211_inform_bss bss_data = {};
+       if (le32_to_cpu(bi->length) > WL_BSS_INFO_MAX) {
+               brcmf_err("Bss info is larger than buffer. Discarding\n");
diff --git a/package/kernel/mac80211/patches/334-v4.18-0001-brcmfmac-add-debugfs-entry-for-reading-firmware-capa.patch b/package/kernel/mac80211/patches/334-v4.18-0001-brcmfmac-add-debugfs-entry-for-reading-firmware-capa.patch
new file mode 100644 (file)
index 0000000..f350d1e
--- /dev/null
@@ -0,0 +1,75 @@
+From 88001968245c42c26416476bf0ef960442371605 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Mon, 14 May 2018 08:48:20 +0200
+Subject: [PATCH] brcmfmac: add debugfs entry for reading firmware capabilities
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This allows reading all capabilities as reported by a firmware. They are
+printed using native (raw) names, just like developers like it the most.
+It's how firmware reports support for various features, e.g. supported
+modes, supported standards, power saving details, max BSS-es.
+
+Access to all that info is useful for trying new firmwares, comparing
+them and debugging features AKA bugs.
+
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../wireless/broadcom/brcm80211/brcmfmac/feature.c | 36 ++++++++++++++++++++++
+ 1 file changed, 36 insertions(+)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
+@@ -165,6 +165,41 @@ static void brcmf_feat_firmware_capabili
+       }
+ }
++/**
++ * brcmf_feat_fwcap_debugfs_read() - expose firmware capabilities to debugfs.
++ *
++ * @seq: sequence for debugfs entry.
++ * @data: raw data pointer.
++ */
++static int brcmf_feat_fwcap_debugfs_read(struct seq_file *seq, void *data)
++{
++      struct brcmf_bus *bus_if = dev_get_drvdata(seq->private);
++      struct brcmf_if *ifp = brcmf_get_ifp(bus_if->drvr, 0);
++      char caps[MAX_CAPS_BUFFER_SIZE + 1] = { };
++      char *tmp;
++      int err;
++
++      err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
++      if (err) {
++              brcmf_err("could not get firmware cap (%d)\n", err);
++              return err;
++      }
++
++      /* Put every capability in a new line */
++      for (tmp = caps; *tmp; tmp++) {
++              if (*tmp == ' ')
++                      *tmp = '\n';
++      }
++
++      /* Usually there is a space at the end of capabilities string */
++      seq_printf(seq, "%s", caps);
++      /* So make sure we don't print two line breaks */
++      if (tmp > caps && *(tmp - 1) != '\n')
++              seq_printf(seq, "\n");
++
++      return 0;
++}
++
+ void brcmf_feat_attach(struct brcmf_pub *drvr)
+ {
+       struct brcmf_if *ifp = brcmf_get_ifp(drvr, 0);
+@@ -233,6 +268,7 @@ void brcmf_feat_attach(struct brcmf_pub
+ void brcmf_feat_debugfs_create(struct brcmf_pub *drvr)
+ {
+       brcmf_debugfs_add_entry(drvr, "features", brcmf_feat_debugfs_read);
++      brcmf_debugfs_add_entry(drvr, "fwcap", brcmf_feat_fwcap_debugfs_read);
+ }
+ bool brcmf_feat_is_enabled(struct brcmf_if *ifp, enum brcmf_feat_id id)