mac80211: brcmfmac: backport remaining patches from the Linux 5.0
[openwrt/staging/lynxis.git] / package / kernel / mac80211 / patches / brcm / 329-v5.0-0005-brcmfmac-allow-GCI-core-enumuration.patch
diff --git a/package/kernel/mac80211/patches/brcm/329-v5.0-0005-brcmfmac-allow-GCI-core-enumuration.patch b/package/kernel/mac80211/patches/brcm/329-v5.0-0005-brcmfmac-allow-GCI-core-enumuration.patch
new file mode 100644 (file)
index 0000000..809ee9a
--- /dev/null
@@ -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 */