diff options
author | Ian Molton <ian@mnementh.co.uk> | 2017-12-08 07:10:31 -0500 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2017-12-14 07:41:01 -0500 |
commit | a7c3aa1509e243a09c5b1660c8702d792ca76aed (patch) | |
tree | 2d23065e506557ea27c933ce78a383167593447b | |
parent | eeef8a5da781e11746347b3cd9f1942be48ebaf0 (diff) |
brcmfmac: Remove brcmf_sdiod_addrprep()
This function has become trivial enough that it may as well be pushed into
its callers, which has the side-benefit of clarifying what's going on.
Remove it, and rename brcmf_sdiod_set_sbaddr_window() to
brcmf_sdiod_set_backplane_window() as it's easier to understand.
Signed-off-by: Ian Molton <ian@mnementh.co.uk>
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
-rw-r--r-- | drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 84 |
1 files changed, 46 insertions, 38 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c index e0b201f8702f..5fcd19346b84 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | |||
@@ -230,41 +230,25 @@ void brcmf_sdiod_change_state(struct brcmf_sdio_dev *sdiodev, | |||
230 | sdiodev->state = state; | 230 | sdiodev->state = state; |
231 | } | 231 | } |
232 | 232 | ||
233 | static int brcmf_sdiod_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev, | 233 | static int brcmf_sdiod_set_backplane_window(struct brcmf_sdio_dev *sdiodev, |
234 | u32 address) | 234 | u32 addr) |
235 | { | 235 | { |
236 | u32 v, bar0 = addr & SBSDIO_SBWINDOW_MASK; | ||
236 | int err = 0, i; | 237 | int err = 0, i; |
237 | u32 addr; | ||
238 | 238 | ||
239 | if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM) | 239 | if (bar0 == sdiodev->sbwad) |
240 | return -ENOMEDIUM; | 240 | return 0; |
241 | 241 | ||
242 | addr = (address & SBSDIO_SBWINDOW_MASK) >> 8; | 242 | v = bar0 >> 8; |
243 | 243 | ||
244 | for (i = 0 ; i < 3 && !err ; i++, addr >>= 8) | 244 | for (i = 0 ; i < 3 && !err ; i++, v >>= 8) |
245 | brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i, | 245 | brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i, |
246 | addr & 0xff, &err); | 246 | v & 0xff, &err); |
247 | |||
248 | return err; | ||
249 | } | ||
250 | |||
251 | static int brcmf_sdiod_addrprep(struct brcmf_sdio_dev *sdiodev, u32 *addr) | ||
252 | { | ||
253 | uint bar0 = *addr & ~SBSDIO_SB_OFT_ADDR_MASK; | ||
254 | int err = 0; | ||
255 | |||
256 | if (bar0 != sdiodev->sbwad) { | ||
257 | err = brcmf_sdiod_set_sbaddr_window(sdiodev, bar0); | ||
258 | if (err) | ||
259 | return err; | ||
260 | 247 | ||
248 | if (!err) | ||
261 | sdiodev->sbwad = bar0; | 249 | sdiodev->sbwad = bar0; |
262 | } | ||
263 | |||
264 | *addr &= SBSDIO_SB_OFT_ADDR_MASK; | ||
265 | *addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; | ||
266 | 250 | ||
267 | return 0; | 251 | return err; |
268 | } | 252 | } |
269 | 253 | ||
270 | u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) | 254 | u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) |
@@ -272,11 +256,16 @@ u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) | |||
272 | u32 data = 0; | 256 | u32 data = 0; |
273 | int retval; | 257 | int retval; |
274 | 258 | ||
275 | retval = brcmf_sdiod_addrprep(sdiodev, &addr); | 259 | retval = brcmf_sdiod_set_backplane_window(sdiodev, addr); |
260 | if (retval) | ||
261 | goto out; | ||
262 | |||
263 | addr &= SBSDIO_SB_OFT_ADDR_MASK; | ||
264 | addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; | ||
276 | 265 | ||
277 | if (!retval) | 266 | data = sdio_readl(sdiodev->func[1], addr, &retval); |
278 | data = sdio_readl(sdiodev->func[1], addr, &retval); | ||
279 | 267 | ||
268 | out: | ||
280 | if (ret) | 269 | if (ret) |
281 | *ret = retval; | 270 | *ret = retval; |
282 | 271 | ||
@@ -288,11 +277,16 @@ void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, | |||
288 | { | 277 | { |
289 | int retval; | 278 | int retval; |
290 | 279 | ||
291 | retval = brcmf_sdiod_addrprep(sdiodev, &addr); | 280 | retval = brcmf_sdiod_set_backplane_window(sdiodev, addr); |
281 | if (retval) | ||
282 | goto out; | ||
283 | |||
284 | addr &= SBSDIO_SB_OFT_ADDR_MASK; | ||
285 | addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; | ||
292 | 286 | ||
293 | if (!retval) | 287 | sdio_writel(sdiodev->func[1], data, addr, &retval); |
294 | sdio_writel(sdiodev->func[1], data, addr, &retval); | ||
295 | 288 | ||
289 | out: | ||
296 | if (ret) | 290 | if (ret) |
297 | *ret = retval; | 291 | *ret = retval; |
298 | } | 292 | } |
@@ -540,10 +534,13 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt) | |||
540 | 534 | ||
541 | brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pkt->len); | 535 | brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pkt->len); |
542 | 536 | ||
543 | err = brcmf_sdiod_addrprep(sdiodev, &addr); | 537 | err = brcmf_sdiod_set_backplane_window(sdiodev, addr); |
544 | if (err) | 538 | if (err) |
545 | goto done; | 539 | goto done; |
546 | 540 | ||
541 | addr &= SBSDIO_SB_OFT_ADDR_MASK; | ||
542 | addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; | ||
543 | |||
547 | err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, pkt); | 544 | err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, pkt); |
548 | 545 | ||
549 | done: | 546 | done: |
@@ -561,10 +558,13 @@ int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev, | |||
561 | brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", | 558 | brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", |
562 | addr, pktq->qlen); | 559 | addr, pktq->qlen); |
563 | 560 | ||
564 | err = brcmf_sdiod_addrprep(sdiodev, &addr); | 561 | err = brcmf_sdiod_set_backplane_window(sdiodev, addr); |
565 | if (err) | 562 | if (err) |
566 | goto done; | 563 | goto done; |
567 | 564 | ||
565 | addr &= SBSDIO_SB_OFT_ADDR_MASK; | ||
566 | addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; | ||
567 | |||
568 | if (pktq->qlen == 1) | 568 | if (pktq->qlen == 1) |
569 | err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, | 569 | err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, |
570 | pktq->next); | 570 | pktq->next); |
@@ -606,7 +606,12 @@ int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) | |||
606 | 606 | ||
607 | memcpy(mypkt->data, buf, nbytes); | 607 | memcpy(mypkt->data, buf, nbytes); |
608 | 608 | ||
609 | err = brcmf_sdiod_addrprep(sdiodev, &addr); | 609 | err = brcmf_sdiod_set_backplane_window(sdiodev, addr); |
610 | if (err) | ||
611 | return err; | ||
612 | |||
613 | addr &= SBSDIO_SB_OFT_ADDR_MASK; | ||
614 | addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; | ||
610 | 615 | ||
611 | if (!err) | 616 | if (!err) |
612 | err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt); | 617 | err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt); |
@@ -625,10 +630,13 @@ int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev, | |||
625 | 630 | ||
626 | brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pktq->qlen); | 631 | brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pktq->qlen); |
627 | 632 | ||
628 | err = brcmf_sdiod_addrprep(sdiodev, &addr); | 633 | err = brcmf_sdiod_set_backplane_window(sdiodev, addr); |
629 | if (err) | 634 | if (err) |
630 | return err; | 635 | return err; |
631 | 636 | ||
637 | addr &= SBSDIO_SB_OFT_ADDR_MASK; | ||
638 | addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; | ||
639 | |||
632 | if (pktq->qlen == 1 || !sdiodev->sg_support) { | 640 | if (pktq->qlen == 1 || !sdiodev->sg_support) { |
633 | skb_queue_walk(pktq, skb) { | 641 | skb_queue_walk(pktq, skb) { |
634 | err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, | 642 | err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, |
@@ -673,7 +681,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address, | |||
673 | /* Do the transfer(s) */ | 681 | /* Do the transfer(s) */ |
674 | while (size) { | 682 | while (size) { |
675 | /* Set the backplane window to include the start address */ | 683 | /* Set the backplane window to include the start address */ |
676 | err = brcmf_sdiod_set_sbaddr_window(sdiodev, address); | 684 | err = brcmf_sdiod_set_backplane_window(sdiodev, address); |
677 | if (err) | 685 | if (err) |
678 | break; | 686 | break; |
679 | 687 | ||
@@ -716,7 +724,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address, | |||
716 | dev_kfree_skb(pkt); | 724 | dev_kfree_skb(pkt); |
717 | 725 | ||
718 | /* Return the window to backplane enumeration space for core access */ | 726 | /* Return the window to backplane enumeration space for core access */ |
719 | if (brcmf_sdiod_set_sbaddr_window(sdiodev, sdiodev->sbwad)) | 727 | if (brcmf_sdiod_set_backplane_window(sdiodev, sdiodev->sbwad)) |
720 | brcmf_err("FAILED to set window back to 0x%x\n", | 728 | brcmf_err("FAILED to set window back to 0x%x\n", |
721 | sdiodev->sbwad); | 729 | sdiodev->sbwad); |
722 | 730 | ||