You've already forked linux-t2-patches
mirror of
https://github.com/t2linux/linux-t2-patches.git
synced 2026-04-30 13:52:11 -07:00
5.17.2
This commit is contained in:
@@ -1,50 +0,0 @@
|
||||
From 5fab9624a67973825bb62d0b1bdb104ead2937eb Mon Sep 17 00:00:00 2001
|
||||
From: Hector Martin <marcan@marcan.st>
|
||||
Date: Tue, 21 Dec 2021 19:32:16 +0900
|
||||
Subject: [PATCH 01/33] brcmfmac: pcie: Declare missing firmware files in
|
||||
pcie.c
|
||||
|
||||
Move one of the declarations from sdio.c to pcie.c, since it makes no
|
||||
sense in the former (SDIO support is optional), and add missing ones.
|
||||
|
||||
Signed-off-by: Hector Martin <marcan@marcan.st>
|
||||
Fixes: 75729e110e68 ("brcmfmac: expose firmware config files through modinfo")
|
||||
Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 7 +++++++
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 1 -
|
||||
2 files changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
index 8b149996f..aed49416c 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -59,6 +59,13 @@ BRCMF_FW_DEF(4366B, "brcmfmac4366b-pcie");
|
||||
BRCMF_FW_DEF(4366C, "brcmfmac4366c-pcie");
|
||||
BRCMF_FW_DEF(4371, "brcmfmac4371-pcie");
|
||||
|
||||
+/* firmware config files */
|
||||
+MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.txt");
|
||||
+MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txt");
|
||||
+
|
||||
+/* per-board firmware binaries */
|
||||
+MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.bin");
|
||||
+
|
||||
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),
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
index 8effeb7a7..5d156e591 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -629,7 +629,6 @@ BRCMF_FW_CLM_DEF(43752, "brcmfmac43752-sdio");
|
||||
|
||||
/* firmware config files */
|
||||
MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-sdio.*.txt");
|
||||
-MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txt");
|
||||
|
||||
/* per-board firmware binaries */
|
||||
MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-sdio.*.bin");
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -55,12 +55,10 @@ index 68627c51c..a0ee0fab6 100644
|
||||
} else if (!is_nvram_char(c) || c == ' ') {
|
||||
brcmf_dbg(INFO, "warning: ln=%d:col=%d: '=' expected, skip invalid key entry\n",
|
||||
nvp->line, nvp->column);
|
||||
@@ -207,6 +214,9 @@ static int brcmf_init_nvram_parser(struct nvram_parser *nvp,
|
||||
size = BRCMF_FW_MAX_NVRAM_SIZE;
|
||||
else
|
||||
@@ -209,6 +209,7 @@ static int brcmf_init_nvram_parser(struct nvram_parser *nvp,
|
||||
size = data_len;
|
||||
+ /* Add space for properties we may add */
|
||||
+ size += strlen(BRCMF_FW_DEFAULT_BOARDREV) + 1;
|
||||
/* Add space for properties we may add */
|
||||
size += strlen(BRCMF_FW_DEFAULT_BOARDREV) + 1;
|
||||
+ size += BRCMF_FW_MACADDR_LEN + 1;
|
||||
/* Alloc for extra 0 byte + roundup by 4 + length field */
|
||||
size += 1 + 3 + sizeof(u32);
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
From 3cbe3c1d916a842ec6be0ad484540b969f7c83ee Mon Sep 17 00:00:00 2001
|
||||
From: Hector Martin <marcan@marcan.st>
|
||||
Date: Tue, 21 Dec 2021 17:44:00 +0900
|
||||
Subject: [PATCH 11/33] brcmfmac: pcie: Fix crashes due to early IRQs
|
||||
|
||||
The driver was enabling IRQs before the message processing was
|
||||
initialized. This could cause IRQs to come in too early and crash the
|
||||
driver. Instead, move the IRQ enable and hostready to a bus preinit
|
||||
function, at which point everything is properly initialized.
|
||||
|
||||
Fixes: 9e37f045d5e7 ("brcmfmac: Adding PCIe bus layer support.")
|
||||
Signed-off-by: Hector Martin <marcan@marcan.st>
|
||||
Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/pcie.c | 18 +++++++++++++++---
|
||||
1 file changed, 15 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
index 4f14b261a..7190b7b80 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -1380,6 +1380,20 @@ static void brcmf_pcie_down(struct device *dev)
|
||||
}
|
||||
|
||||
|
||||
+static int brcmf_pcie_preinit(struct device *dev)
|
||||
+{
|
||||
+ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
+ struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie;
|
||||
+
|
||||
+ brcmf_dbg(PCIE, "Enter\n");
|
||||
+
|
||||
+ brcmf_pcie_intr_enable(buspub->devinfo);
|
||||
+ brcmf_pcie_hostready(buspub->devinfo);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int brcmf_pcie_tx(struct device *dev, struct sk_buff *skb)
|
||||
{
|
||||
return 0;
|
||||
@@ -1489,6 +1503,7 @@ static int brcmf_pcie_reset(struct device *dev)
|
||||
}
|
||||
|
||||
static const struct brcmf_bus_ops brcmf_pcie_bus_ops = {
|
||||
+ .preinit = brcmf_pcie_preinit,
|
||||
.txdata = brcmf_pcie_tx,
|
||||
.stop = brcmf_pcie_down,
|
||||
.txctl = brcmf_pcie_tx_ctlpkt,
|
||||
@@ -2055,9 +2070,6 @@ static void brcmf_pcie_setup(struct device *dev, int ret,
|
||||
|
||||
init_waitqueue_head(&devinfo->mbdata_resp_wait);
|
||||
|
||||
- brcmf_pcie_intr_enable(devinfo);
|
||||
- brcmf_pcie_hostready(devinfo);
|
||||
-
|
||||
ret = brcmf_attach(&devinfo->pdev->dev);
|
||||
if (ret)
|
||||
goto fail;
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
From 3e028855aba2a4f5ccf62afdb5ec849212902ff5 Mon Sep 17 00:00:00 2001
|
||||
From: Hector Martin <marcan@marcan.st>
|
||||
Date: Tue, 21 Dec 2021 17:39:28 +0900
|
||||
Subject: [PATCH 27/33] brcmfmac: pcie: Replace brcmf_pcie_copy_mem_todev with
|
||||
memcpy_toio
|
||||
|
||||
The alignment check was wrong (e.g. & 4 instead of & 3), and the logic
|
||||
was also inefficient if the length was not a multiple of 4, since it
|
||||
would needlessly fall back to copying the entire buffer bytewise.
|
||||
|
||||
We already have a perfectly good memcpy_toio function, so just call that
|
||||
instead of rolling our own copy logic here. brcmf_pcie_init_ringbuffers
|
||||
was already using it anyway.
|
||||
|
||||
Fixes: 9e37f045d5e7 ("brcmfmac: Adding PCIe bus layer support.")
|
||||
Signed-off-by: Hector Martin <marcan@marcan.st>
|
||||
Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/pcie.c | 53 +++----------------
|
||||
1 file changed, 6 insertions(+), 47 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
index bc2a53812..865e3f28c 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/random.h>
|
||||
#include <asm/unaligned.h>
|
||||
+#include <asm/io.h>
|
||||
|
||||
#include <soc.h>
|
||||
#include <chipcommon.h>
|
||||
@@ -562,47 +563,6 @@ brcmf_pcie_write_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
|
||||
}
|
||||
|
||||
|
||||
-static void
|
||||
-brcmf_pcie_copy_mem_todev(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
|
||||
- void *srcaddr, u32 len)
|
||||
-{
|
||||
- void __iomem *address = devinfo->tcm + mem_offset;
|
||||
- __le32 *src32;
|
||||
- __le16 *src16;
|
||||
- u8 *src8;
|
||||
-
|
||||
- if (((ulong)address & 4) || ((ulong)srcaddr & 4) || (len & 4)) {
|
||||
- if (((ulong)address & 2) || ((ulong)srcaddr & 2) || (len & 2)) {
|
||||
- src8 = (u8 *)srcaddr;
|
||||
- while (len) {
|
||||
- iowrite8(*src8, address);
|
||||
- address++;
|
||||
- src8++;
|
||||
- len--;
|
||||
- }
|
||||
- } else {
|
||||
- len = len / 2;
|
||||
- src16 = (__le16 *)srcaddr;
|
||||
- while (len) {
|
||||
- iowrite16(le16_to_cpu(*src16), address);
|
||||
- address += 2;
|
||||
- src16++;
|
||||
- len--;
|
||||
- }
|
||||
- }
|
||||
- } else {
|
||||
- len = len / 4;
|
||||
- src32 = (__le32 *)srcaddr;
|
||||
- while (len) {
|
||||
- iowrite32(le32_to_cpu(*src32), address);
|
||||
- address += 4;
|
||||
- src32++;
|
||||
- len--;
|
||||
- }
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-
|
||||
static void
|
||||
brcmf_pcie_copy_dev_tomem(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
|
||||
void *dstaddr, u32 len)
|
||||
@@ -1702,8 +1662,8 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
|
||||
return err;
|
||||
|
||||
brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name);
|
||||
- brcmf_pcie_copy_mem_todev(devinfo, devinfo->ci->rambase,
|
||||
- (void *)fw->data, fw->size);
|
||||
+ memcpy_toio(devinfo->tcm + devinfo->ci->rambase,
|
||||
+ (void *)fw->data, fw->size);
|
||||
|
||||
resetintr = get_unaligned_le32(fw->data);
|
||||
release_firmware(fw);
|
||||
@@ -1724,7 +1684,7 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
|
||||
brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name);
|
||||
address = devinfo->ci->rambase + devinfo->ci->ramsize -
|
||||
nvram_len;
|
||||
- brcmf_pcie_copy_mem_todev(devinfo, address, nvram, nvram_len);
|
||||
+ memcpy_toio(devinfo->tcm + address, nvram, nvram_len);
|
||||
brcmf_fw_nvram_free(nvram);
|
||||
|
||||
/*
|
||||
@@ -1734,13 +1694,12 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
|
||||
brcmf_dbg(PCIE, "Download random seed\n");
|
||||
|
||||
address -= sizeof(footer);
|
||||
- brcmf_pcie_copy_mem_todev(devinfo, address, &footer,
|
||||
- sizeof(footer));
|
||||
+ memcpy_toio(devinfo->tcm + address, &footer, sizeof(footer));
|
||||
|
||||
address -= rand_len;
|
||||
randbuf = kzalloc(rand_len, GFP_KERNEL);
|
||||
get_random_bytes(randbuf, rand_len);
|
||||
- brcmf_pcie_copy_mem_todev(devinfo, address, randbuf, rand_len);
|
||||
+ memcpy_toio(devinfo->tcm + address, randbuf, rand_len);
|
||||
kfree(randbuf);
|
||||
} else {
|
||||
brcmf_dbg(PCIE, "No matching NVRAM file found %s\n",
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
From 05e3617257d8301e01a6a9977dfdd54d5b0a1c99 Mon Sep 17 00:00:00 2001
|
||||
From: Hector Martin <marcan@marcan.st>
|
||||
Date: Tue, 21 Dec 2021 17:44:51 +0900
|
||||
Subject: [PATCH 29/33] brcmfmac: pcie: Release firmwares in the
|
||||
brcmf_pcie_setup error path
|
||||
|
||||
This avoids leaking memory if brcmf_chip_get_raminfo fails. Note that
|
||||
the CLM blob is released in the device remove path.
|
||||
|
||||
Fixes: 82f93cf46d60 ("brcmfmac: get chip's default RAM info during PCIe setup")
|
||||
Signed-off-by: Hector Martin <marcan@marcan.st>
|
||||
Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
index 8b67cddb7..f1b90b5e7 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -2125,6 +2125,8 @@ static void brcmf_pcie_setup(struct device *dev, int ret,
|
||||
ret = brcmf_chip_get_raminfo(devinfo->ci);
|
||||
if (ret) {
|
||||
brcmf_err(bus, "Failed to get RAM info\n");
|
||||
+ release_firmware(fw);
|
||||
+ brcmf_fw_nvram_free(nvram);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
||||
Reference in New Issue
Block a user