2
0

325-v4.17-0003-brcmfmac-call-brcmf_attach-just-before-calling-brcmf.patch 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. From 262f2b53f67936b59cc8dfc6f3899ab8905bf1ed Mon Sep 17 00:00:00 2001
  2. From: Arend Van Spriel <[email protected]>
  3. Date: Tue, 20 Feb 2018 00:14:20 +0100
  4. Subject: [PATCH] brcmfmac: call brcmf_attach() just before calling
  5. brcmf_bus_started()
  6. Now we can move brcmf_attach() until after the firmware has been downloaded
  7. to the device. Make the call just before brcmf_bus_started().
  8. Reviewed-by: Hante Meuleman <[email protected]>
  9. Reviewed-by: Pieter-Paul Giesberts <[email protected]>
  10. Reviewed-by: Franky Lin <[email protected]>
  11. Signed-off-by: Arend van Spriel <[email protected]>
  12. Signed-off-by: Kalle Valo <[email protected]>
  13. ---
  14. .../wireless/broadcom/brcm80211/brcmfmac/core.c | 6 ++++
  15. .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 34 +++++++++++-----------
  16. 2 files changed, 23 insertions(+), 17 deletions(-)
  17. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  18. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  19. @@ -1268,6 +1268,12 @@ void brcmf_bus_change_state(struct brcmf
  20. int ifidx;
  21. brcmf_dbg(TRACE, "%d -> %d\n", bus->state, state);
  22. +
  23. + if (!drvr) {
  24. + brcmf_dbg(INFO, "ignoring transition, bus not attached yet\n");
  25. + return;
  26. + }
  27. +
  28. bus->state = state;
  29. if (state == BRCMF_BUS_UP) {
  30. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  31. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  32. @@ -4048,9 +4048,6 @@ static void brcmf_sdio_firmware_callback
  33. if (err)
  34. goto fail;
  35. - if (!bus_if->drvr)
  36. - return;
  37. -
  38. /* try to download image and nvram to the dongle */
  39. bus->alp_only = true;
  40. err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
  41. @@ -4126,11 +4123,28 @@ static void brcmf_sdio_firmware_callback
  42. sdio_release_host(sdiodev->func1);
  43. + /* Assign bus interface call back */
  44. + sdiodev->bus_if->dev = sdiodev->dev;
  45. + sdiodev->bus_if->ops = &brcmf_sdio_bus_ops;
  46. + sdiodev->bus_if->chip = bus->ci->chip;
  47. + sdiodev->bus_if->chiprev = bus->ci->chiprev;
  48. +
  49. + /* Attach to the common layer, reserve hdr space */
  50. + err = brcmf_attach(sdiodev->dev, sdiodev->settings);
  51. + if (err != 0) {
  52. + brcmf_err("brcmf_attach failed\n");
  53. + goto fail;
  54. + }
  55. +
  56. + brcmf_sdio_debugfs_create(bus);
  57. +
  58. err = brcmf_bus_started(dev);
  59. if (err != 0) {
  60. brcmf_err("dongle is not responding\n");
  61. goto fail;
  62. }
  63. +
  64. + /* ready */
  65. return;
  66. release:
  67. @@ -4200,22 +4214,9 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
  68. bus->dpc_triggered = false;
  69. bus->dpc_running = false;
  70. - /* Assign bus interface call back */
  71. - bus->sdiodev->bus_if->dev = bus->sdiodev->dev;
  72. - bus->sdiodev->bus_if->ops = &brcmf_sdio_bus_ops;
  73. - bus->sdiodev->bus_if->chip = bus->ci->chip;
  74. - bus->sdiodev->bus_if->chiprev = bus->ci->chiprev;
  75. -
  76. /* default sdio bus header length for tx packet */
  77. bus->tx_hdrlen = SDPCM_HWHDR_LEN + SDPCM_SWHDR_LEN;
  78. - /* Attach to the common layer, reserve hdr space */
  79. - ret = brcmf_attach(bus->sdiodev->dev, bus->sdiodev->settings);
  80. - if (ret != 0) {
  81. - brcmf_err("brcmf_attach failed\n");
  82. - goto fail;
  83. - }
  84. -
  85. /* Query the F2 block size, set roundup accordingly */
  86. bus->blocksize = bus->sdiodev->func2->cur_blksize;
  87. bus->roundup = min(max_roundup, bus->blocksize);
  88. @@ -4240,7 +4241,6 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
  89. /* SR state */
  90. bus->sr_enabled = false;
  91. - brcmf_sdio_debugfs_create(bus);
  92. brcmf_dbg(INFO, "completed!!\n");
  93. ret = brcmf_fw_map_chip_to_name(bus->ci->chip, bus->ci->chiprev,