summaryrefslogtreecommitdiff
path: root/package/kernel/mac80211/patches/314-v4.16-0001-brcmfmac-Remove-r-w-_sdreg32.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/314-v4.16-0001-brcmfmac-Remove-r-w-_sdreg32.patch')
-rw-r--r--package/kernel/mac80211/patches/314-v4.16-0001-brcmfmac-Remove-r-w-_sdreg32.patch227
1 files changed, 227 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/314-v4.16-0001-brcmfmac-Remove-r-w-_sdreg32.patch b/package/kernel/mac80211/patches/314-v4.16-0001-brcmfmac-Remove-r-w-_sdreg32.patch
new file mode 100644
index 0000000..291cd5d
--- /dev/null
+++ b/package/kernel/mac80211/patches/314-v4.16-0001-brcmfmac-Remove-r-w-_sdreg32.patch
@@ -0,0 +1,227 @@
+From 3d110df8f74781354051e4bb1e3e97fa368b2f80 Mon Sep 17 00:00:00 2001
+From: Ian Molton <ian@mnementh.co.uk>
+Date: Tue, 19 Dec 2017 13:47:07 +0100
+Subject: [PATCH] brcmfmac: Remove {r,w}_sdreg32
+
+Remove yet another IO function from the code and replace with one
+that already exists.
+
+Signed-off-by: Ian Molton <ian@mnementh.co.uk>
+Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+[arend: keep address calculation, ie. (base + offset) in one line]
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 88 +++++++++++-----------
+ 1 file changed, 42 insertions(+), 46 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+@@ -660,30 +660,6 @@ static bool data_ok(struct brcmf_sdio *b
+ ((u8)(bus->tx_max - bus->tx_seq) & 0x80) == 0;
+ }
+
+-/*
+- * Reads a register in the SDIO hardware block. This block occupies a series of
+- * adresses on the 32 bit backplane bus.
+- */
+-static int r_sdreg32(struct brcmf_sdio *bus, u32 *regvar, u32 offset)
+-{
+- struct brcmf_core *core = bus->sdio_core;
+- int ret;
+-
+- *regvar = brcmf_sdiod_readl(bus->sdiodev, core->base + offset, &ret);
+-
+- return ret;
+-}
+-
+-static int w_sdreg32(struct brcmf_sdio *bus, u32 regval, u32 reg_offset)
+-{
+- struct brcmf_core *core = bus->sdio_core;
+- int ret;
+-
+- brcmf_sdiod_writel(bus->sdiodev, core->base + reg_offset, regval, &ret);
+-
+- return ret;
+-}
+-
+ static int
+ brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on)
+ {
+@@ -1078,6 +1054,8 @@ static void brcmf_sdio_get_console_addr(
+
+ static u32 brcmf_sdio_hostmail(struct brcmf_sdio *bus)
+ {
++ struct brcmf_sdio_dev *sdiod = bus->sdiodev;
++ struct brcmf_core *core = bus->sdio_core;
+ u32 intstatus = 0;
+ u32 hmb_data;
+ u8 fcbits;
+@@ -1086,10 +1064,14 @@ static u32 brcmf_sdio_hostmail(struct br
+ brcmf_dbg(SDIO, "Enter\n");
+
+ /* Read mailbox data and ack that we did so */
+- ret = r_sdreg32(bus, &hmb_data, SD_REG(tohostmailboxdata));
++ hmb_data = brcmf_sdiod_readl(sdiod,
++ core->base + SD_REG(tohostmailboxdata),
++ &ret);
++
++ if (!ret)
++ brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailbox),
++ SMB_INT_ACK, &ret);
+
+- if (ret == 0)
+- w_sdreg32(bus, SMB_INT_ACK, SD_REG(tosbmailbox));
+ bus->sdcnt.f1regdata += 2;
+
+ /* dongle indicates the firmware has halted/crashed */
+@@ -1163,6 +1145,8 @@ static u32 brcmf_sdio_hostmail(struct br
+
+ static void brcmf_sdio_rxfail(struct brcmf_sdio *bus, bool abort, bool rtx)
+ {
++ struct brcmf_sdio_dev *sdiod = bus->sdiodev;
++ struct brcmf_core *core = bus->sdio_core;
+ uint retries = 0;
+ u16 lastrbc;
+ u8 hi, lo;
+@@ -1204,7 +1188,8 @@ static void brcmf_sdio_rxfail(struct brc
+
+ if (rtx) {
+ bus->sdcnt.rxrtx++;
+- err = w_sdreg32(bus, SMB_NAK, SD_REG(tosbmailbox));
++ brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailbox),
++ SMB_NAK, &err);
+
+ bus->sdcnt.f1regdata++;
+ if (err == 0)
+@@ -2291,6 +2276,7 @@ static uint brcmf_sdio_sendfromq(struct
+ {
+ struct sk_buff *pkt;
+ struct sk_buff_head pktq;
++ u32 intstat_addr = bus->sdio_core->base + SD_REG(intstatus);
+ u32 intstatus = 0;
+ int ret = 0, prec_out, i;
+ uint cnt = 0;
+@@ -2329,7 +2315,8 @@ static uint brcmf_sdio_sendfromq(struct
+ if (!bus->intr) {
+ /* Check device status, signal pending interrupt */
+ sdio_claim_host(bus->sdiodev->func[1]);
+- ret = r_sdreg32(bus, &intstatus, SD_REG(intstatus));
++ intstatus = brcmf_sdiod_readl(bus->sdiodev,
++ intstat_addr, &ret);
+ sdio_release_host(bus->sdiodev->func[1]);
+ bus->sdcnt.f2txdata++;
+ if (ret != 0)
+@@ -2413,12 +2400,13 @@ static int brcmf_sdio_tx_ctrlframe(struc
+
+ static void brcmf_sdio_bus_stop(struct device *dev)
+ {
+- u32 local_hostintmask;
+- u8 saveclk;
+- int err;
+ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
+ struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
+ struct brcmf_sdio *bus = sdiodev->bus;
++ struct brcmf_core *core = bus->sdio_core;
++ u32 local_hostintmask;
++ u8 saveclk;
++ int err;
+
+ brcmf_dbg(TRACE, "Enter\n");
+
+@@ -2435,7 +2423,9 @@ static void brcmf_sdio_bus_stop(struct d
+ brcmf_sdio_bus_sleep(bus, false, false);
+
+ /* Disable and clear interrupts at the chip level also */
+- w_sdreg32(bus, 0, SD_REG(hostintmask));
++ brcmf_sdiod_writel(sdiodev, core->base + SD_REG(hostintmask),
++ 0, NULL);
++
+ local_hostintmask = bus->hostintmask;
+ bus->hostintmask = 0;
+
+@@ -2454,7 +2444,8 @@ static void brcmf_sdio_bus_stop(struct d
+ sdio_disable_func(sdiodev->func[SDIO_FUNC_2]);
+
+ /* Clear any pending interrupts now that F2 is disabled */
+- w_sdreg32(bus, local_hostintmask, SD_REG(intstatus));
++ brcmf_sdiod_writel(sdiodev, core->base + SD_REG(intstatus),
++ local_hostintmask, NULL);
+
+ sdio_release_host(sdiodev->func[1]);
+ }
+@@ -2521,7 +2512,9 @@ static int brcmf_sdio_intr_rstatus(struc
+
+ static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
+ {
++ struct brcmf_sdio_dev *sdiod = bus->sdiodev;
+ u32 newstatus = 0;
++ u32 intstat_addr = bus->sdio_core->base + SD_REG(intstatus);
+ unsigned long intstatus;
+ uint txlimit = bus->txbound; /* Tx frames to send before resched */
+ uint framecnt; /* Temporary counter of tx/rx frames */
+@@ -2576,9 +2569,10 @@ static void brcmf_sdio_dpc(struct brcmf_
+ */
+ if (intstatus & I_HMB_FC_CHANGE) {
+ intstatus &= ~I_HMB_FC_CHANGE;
+- err = w_sdreg32(bus, I_HMB_FC_CHANGE, SD_REG(intstatus));
++ brcmf_sdiod_writel(sdiod, intstat_addr, I_HMB_FC_CHANGE, &err);
++
++ newstatus = brcmf_sdiod_readl(sdiod, intstat_addr, &err);
+
+- err = r_sdreg32(bus, &newstatus, SD_REG(intstatus));
+ bus->sdcnt.f1regdata += 2;
+ atomic_set(&bus->fcstate,
+ !!(newstatus & (I_HMB_FC_STATE | I_HMB_FC_CHANGE)));
+@@ -4017,22 +4011,21 @@ static void brcmf_sdio_firmware_callback
+ const struct firmware *code,
+ void *nvram, u32 nvram_len)
+ {
+- struct brcmf_bus *bus_if;
+- struct brcmf_sdio_dev *sdiodev;
+- struct brcmf_sdio *bus;
++ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
++ struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
++ struct brcmf_sdio *bus = sdiodev->bus;
++ struct brcmf_sdio_dev *sdiod = bus->sdiodev;
++ struct brcmf_core *core = bus->sdio_core;
+ u8 saveclk;
+
+ brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
+- bus_if = dev_get_drvdata(dev);
+- sdiodev = bus_if->bus_priv.sdio;
++
+ if (err)
+ goto fail;
+
+ if (!bus_if->drvr)
+ return;
+
+- bus = sdiodev->bus;
+-
+ /* try to download image and nvram to the dongle */
+ bus->alp_only = true;
+ err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
+@@ -4063,8 +4056,9 @@ static void brcmf_sdio_firmware_callback
+ }
+
+ /* Enable function 2 (frame transfers) */
+- w_sdreg32(bus, SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT,
+- SD_REG(tosbmailboxdata));
++ brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata),
++ SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL);
++
+ err = sdio_enable_func(sdiodev->func[SDIO_FUNC_2]);
+
+
+@@ -4074,7 +4068,9 @@ static void brcmf_sdio_firmware_callback
+ if (!err) {
+ /* Set up the interrupt mask and enable interrupts */
+ bus->hostintmask = HOSTINTMASK;
+- w_sdreg32(bus, bus->hostintmask, SD_REG(hostintmask));
++ brcmf_sdiod_writel(sdiod, core->base + SD_REG(hostintmask),
++ bus->hostintmask, NULL);
++
+
+ brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
+ } else {