12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- From 874bb8e49b7c6368f8ff9f2566c7bd06a2249be0 Mon Sep 17 00:00:00 2001
- From: Ian Molton <[email protected]>
- Date: Tue, 19 Dec 2017 13:47:09 +0100
- Subject: [PATCH] brcmfmac: stabilise the value of ->sbwad in use for some xfer
- routines.
- The IO functions operate within the Chipcommon IO window. Explicitly
- set this, rather than relying on the last initialisation IO access to
- leave it set to the right value by chance.
- Signed-off-by: Ian Molton <[email protected]>
- Acked-by: Arend van Spriel <[email protected]>
- Signed-off-by: Arend van Spriel <[email protected]>
- Signed-off-by: Kalle Valo <[email protected]>
- ---
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 8 ++++----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 5 +++++
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h | 1 +
- 3 files changed, 10 insertions(+), 4 deletions(-)
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
- @@ -529,7 +529,7 @@ int brcmf_sdiod_recv_buf(struct brcmf_sd
-
- int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt)
- {
- - u32 addr = sdiodev->sbwad;
- + u32 addr = sdiodev->cc_core->base;
- int err = 0;
-
- brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pkt->len);
- @@ -552,7 +552,7 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- {
- struct sk_buff *glom_skb = NULL;
- struct sk_buff *skb;
- - u32 addr = sdiodev->sbwad;
- + u32 addr = sdiodev->cc_core->base;
- int err = 0;
-
- brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n",
- @@ -593,7 +593,7 @@ done:
- int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes)
- {
- struct sk_buff *mypkt;
- - u32 addr = sdiodev->sbwad;
- + u32 addr = sdiodev->cc_core->base;
- int err;
-
- mypkt = brcmu_pkt_buf_get_skb(nbytes);
- @@ -625,7 +625,7 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
- struct sk_buff_head *pktq)
- {
- struct sk_buff *skb;
- - u32 addr = sdiodev->sbwad;
- + u32 addr = sdiodev->cc_core->base;
- int err;
-
- brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pktq->qlen);
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
- @@ -3842,6 +3842,11 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- if (!bus->sdio_core)
- goto fail;
-
- + /* Pick up the CHIPCOMMON core info struct, for bulk IO in bcmsdh.c */
- + sdiodev->cc_core = brcmf_chip_get_core(bus->ci, BCMA_CORE_CHIPCOMMON);
- + if (!sdiodev->cc_core)
- + goto fail;
- +
- sdiodev->settings = brcmf_get_module_param(sdiodev->dev,
- BRCMF_BUSTYPE_SDIO,
- bus->ci->chip,
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
- @@ -178,6 +178,7 @@ struct brcmf_sdio_dev {
- struct sdio_func *func[SDIO_MAX_FUNCS];
- u8 num_funcs; /* Supported funcs on client */
- u32 sbwad; /* Save backplane window address */
- + struct brcmf_core *cc_core; /* chipcommon core info struct */
- struct brcmf_sdio *bus;
- struct device *dev;
- struct brcmf_bus *bus_if;
|