314-v4.16-0003-brcmfmac-stabilise-the-value-of-sbwad-in-use-for-som.patch 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. From 874bb8e49b7c6368f8ff9f2566c7bd06a2249be0 Mon Sep 17 00:00:00 2001
  2. From: Ian Molton <[email protected]>
  3. Date: Tue, 19 Dec 2017 13:47:09 +0100
  4. Subject: [PATCH] brcmfmac: stabilise the value of ->sbwad in use for some xfer
  5. routines.
  6. The IO functions operate within the Chipcommon IO window. Explicitly
  7. set this, rather than relying on the last initialisation IO access to
  8. leave it set to the right value by chance.
  9. Signed-off-by: Ian Molton <[email protected]>
  10. Acked-by: Arend van Spriel <[email protected]>
  11. Signed-off-by: Arend van Spriel <[email protected]>
  12. Signed-off-by: Kalle Valo <[email protected]>
  13. ---
  14. drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 8 ++++----
  15. drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 5 +++++
  16. drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h | 1 +
  17. 3 files changed, 10 insertions(+), 4 deletions(-)
  18. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
  19. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
  20. @@ -529,7 +529,7 @@ int brcmf_sdiod_recv_buf(struct brcmf_sd
  21. int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt)
  22. {
  23. - u32 addr = sdiodev->sbwad;
  24. + u32 addr = sdiodev->cc_core->base;
  25. int err = 0;
  26. brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pkt->len);
  27. @@ -552,7 +552,7 @@ int brcmf_sdiod_recv_chain(struct brcmf_
  28. {
  29. struct sk_buff *glom_skb = NULL;
  30. struct sk_buff *skb;
  31. - u32 addr = sdiodev->sbwad;
  32. + u32 addr = sdiodev->cc_core->base;
  33. int err = 0;
  34. brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n",
  35. @@ -593,7 +593,7 @@ done:
  36. int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes)
  37. {
  38. struct sk_buff *mypkt;
  39. - u32 addr = sdiodev->sbwad;
  40. + u32 addr = sdiodev->cc_core->base;
  41. int err;
  42. mypkt = brcmu_pkt_buf_get_skb(nbytes);
  43. @@ -625,7 +625,7 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
  44. struct sk_buff_head *pktq)
  45. {
  46. struct sk_buff *skb;
  47. - u32 addr = sdiodev->sbwad;
  48. + u32 addr = sdiodev->cc_core->base;
  49. int err;
  50. brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pktq->qlen);
  51. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  52. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  53. @@ -3842,6 +3842,11 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
  54. if (!bus->sdio_core)
  55. goto fail;
  56. + /* Pick up the CHIPCOMMON core info struct, for bulk IO in bcmsdh.c */
  57. + sdiodev->cc_core = brcmf_chip_get_core(bus->ci, BCMA_CORE_CHIPCOMMON);
  58. + if (!sdiodev->cc_core)
  59. + goto fail;
  60. +
  61. sdiodev->settings = brcmf_get_module_param(sdiodev->dev,
  62. BRCMF_BUSTYPE_SDIO,
  63. bus->ci->chip,
  64. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
  65. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
  66. @@ -178,6 +178,7 @@ struct brcmf_sdio_dev {
  67. struct sdio_func *func[SDIO_MAX_FUNCS];
  68. u8 num_funcs; /* Supported funcs on client */
  69. u32 sbwad; /* Save backplane window address */
  70. + struct brcmf_core *cc_core; /* chipcommon core info struct */
  71. struct brcmf_sdio *bus;
  72. struct device *dev;
  73. struct brcmf_bus *bus_if;