327-v4.17-0002-brcmfmac-use-brcmf_chip_name-to-store-name-in-revinf.patch 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. From 756a2b390874d274f2f615921318ef0856ff9313 Mon Sep 17 00:00:00 2001
  2. From: Arend Van Spriel <[email protected]>
  3. Date: Thu, 22 Mar 2018 21:28:21 +0100
  4. Subject: [PATCH] brcmfmac: use brcmf_chip_name() to store name in revinfo
  5. The chip id can either be four or five digits. For the chip name either
  6. the hexadecimal value needs to be taken (four digits) or the decimal
  7. value (five digits). The function brcmf_chip_name() does this conversion
  8. so use it to store the name in driver revision info.
  9. Reviewed-by: Hante Meuleman <[email protected]>
  10. Reviewed-by: Pieter-Paul Giesberts <[email protected]>
  11. Reviewed-by: Franky Lin <[email protected]>
  12. Signed-off-by: Arend van Spriel <[email protected]>
  13. Signed-off-by: Kalle Valo <[email protected]>
  14. ---
  15. .../wireless/broadcom/brcm80211/brcmfmac/chip.c | 9 +++++----
  16. .../wireless/broadcom/brcm80211/brcmfmac/chip.h | 3 ++-
  17. .../wireless/broadcom/brcm80211/brcmfmac/common.c | 23 ++++++++++++++++------
  18. .../wireless/broadcom/brcm80211/brcmfmac/core.c | 10 +---------
  19. .../wireless/broadcom/brcm80211/brcmfmac/core.h | 3 +--
  20. 5 files changed, 26 insertions(+), 22 deletions(-)
  21. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
  22. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
  23. @@ -464,12 +464,12 @@ static void brcmf_chip_ai_resetcore(stru
  24. ci->ops->read32(ci->ctx, core->wrapbase + BCMA_IOCTL);
  25. }
  26. -static char *brcmf_chip_name(uint chipid, char *buf, uint len)
  27. +char *brcmf_chip_name(u32 id, u32 rev, char *buf, uint len)
  28. {
  29. const char *fmt;
  30. - fmt = ((chipid > 0xa000) || (chipid < 0x4000)) ? "%d" : "%x";
  31. - snprintf(buf, len, fmt, chipid);
  32. + fmt = ((id > 0xa000) || (id < 0x4000)) ? "BCM%d/%u" : "BCM%x/%u";
  33. + snprintf(buf, len, fmt, id, rev);
  34. return buf;
  35. }
  36. @@ -924,7 +924,8 @@ static int brcmf_chip_recognition(struct
  37. ci->pub.chiprev = (regdata & CID_REV_MASK) >> CID_REV_SHIFT;
  38. socitype = (regdata & CID_TYPE_MASK) >> CID_TYPE_SHIFT;
  39. - brcmf_chip_name(ci->pub.chip, ci->pub.name, sizeof(ci->pub.name));
  40. + brcmf_chip_name(ci->pub.chip, ci->pub.chiprev,
  41. + ci->pub.name, sizeof(ci->pub.name));
  42. brcmf_dbg(INFO, "found %s chip: BCM%s, rev=%d\n",
  43. socitype == SOCI_SB ? "SB" : "AXI", ci->pub.name,
  44. ci->pub.chiprev);
  45. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h
  46. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h
  47. @@ -45,7 +45,7 @@ struct brcmf_chip {
  48. u32 rambase;
  49. u32 ramsize;
  50. u32 srsize;
  51. - char name[8];
  52. + char name[12];
  53. };
  54. /**
  55. @@ -93,5 +93,6 @@ void brcmf_chip_resetcore(struct brcmf_c
  56. void brcmf_chip_set_passive(struct brcmf_chip *ci);
  57. bool brcmf_chip_set_active(struct brcmf_chip *ci, u32 rstvec);
  58. bool brcmf_chip_sr_capable(struct brcmf_chip *pub);
  59. +char *brcmf_chip_name(u32 chipid, u32 chiprev, char *buf, uint len);
  60. #endif /* BRCMF_AXIDMP_H */
  61. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
  62. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
  63. @@ -30,6 +30,7 @@
  64. #include "common.h"
  65. #include "of.h"
  66. #include "firmware.h"
  67. +#include "chip.h"
  68. MODULE_AUTHOR("Broadcom Corporation");
  69. MODULE_DESCRIPTION("Broadcom 802.11 wireless LAN fullmac driver.");
  70. @@ -131,14 +132,13 @@ static int brcmf_c_download(struct brcmf
  71. static int brcmf_c_get_clm_name(struct brcmf_if *ifp, u8 *clm_name)
  72. {
  73. struct brcmf_bus *bus = ifp->drvr->bus_if;
  74. - struct brcmf_rev_info *ri = &ifp->drvr->revinfo;
  75. u8 fw_name[BRCMF_FW_NAME_LEN];
  76. u8 *ptr;
  77. size_t len;
  78. s32 err;
  79. memset(fw_name, 0, BRCMF_FW_NAME_LEN);
  80. - err = brcmf_bus_get_fwname(bus, ri->chipnum, ri->chiprev, fw_name);
  81. + err = brcmf_bus_get_fwname(bus, bus->chip, bus->chiprev, fw_name);
  82. if (err) {
  83. brcmf_err("get firmware name failed (%d)\n", err);
  84. goto done;
  85. @@ -238,6 +238,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
  86. {
  87. s8 eventmask[BRCMF_EVENTING_MASK_LEN];
  88. u8 buf[BRCMF_DCMD_SMLEN];
  89. + struct brcmf_bus *bus;
  90. struct brcmf_rev_info_le revinfo;
  91. struct brcmf_rev_info *ri;
  92. char *clmver;
  93. @@ -253,16 +254,18 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
  94. }
  95. memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac));
  96. + bus = ifp->drvr->bus_if;
  97. + ri = &ifp->drvr->revinfo;
  98. +
  99. err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_REVINFO,
  100. &revinfo, sizeof(revinfo));
  101. - ri = &ifp->drvr->revinfo;
  102. if (err < 0) {
  103. brcmf_err("retrieving revision info failed, %d\n", err);
  104. + strlcpy(ri->chipname, "UNKNOWN", sizeof(ri->chipname));
  105. } else {
  106. ri->vendorid = le32_to_cpu(revinfo.vendorid);
  107. ri->deviceid = le32_to_cpu(revinfo.deviceid);
  108. ri->radiorev = le32_to_cpu(revinfo.radiorev);
  109. - ri->chiprev = le32_to_cpu(revinfo.chiprev);
  110. ri->corerev = le32_to_cpu(revinfo.corerev);
  111. ri->boardid = le32_to_cpu(revinfo.boardid);
  112. ri->boardvendor = le32_to_cpu(revinfo.boardvendor);
  113. @@ -270,15 +273,23 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
  114. ri->driverrev = le32_to_cpu(revinfo.driverrev);
  115. ri->ucoderev = le32_to_cpu(revinfo.ucoderev);
  116. ri->bus = le32_to_cpu(revinfo.bus);
  117. - ri->chipnum = le32_to_cpu(revinfo.chipnum);
  118. ri->phytype = le32_to_cpu(revinfo.phytype);
  119. ri->phyrev = le32_to_cpu(revinfo.phyrev);
  120. ri->anarev = le32_to_cpu(revinfo.anarev);
  121. ri->chippkg = le32_to_cpu(revinfo.chippkg);
  122. ri->nvramrev = le32_to_cpu(revinfo.nvramrev);
  123. +
  124. + if (!bus->chip) {
  125. + bus->chip = le32_to_cpu(revinfo.chipnum);
  126. + bus->chiprev = le32_to_cpu(revinfo.chiprev);
  127. + }
  128. }
  129. ri->result = err;
  130. + if (bus->chip)
  131. + brcmf_chip_name(bus->chip, bus->chiprev,
  132. + ri->chipname, sizeof(ri->chipname));
  133. +
  134. /* Do any CLM downloading */
  135. err = brcmf_c_process_clm_blob(ifp);
  136. if (err < 0) {
  137. @@ -299,7 +310,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
  138. strsep(&ptr, "\n");
  139. /* Print fw version info */
  140. - brcmf_info("Firmware version = %s\n", buf);
  141. + brcmf_info("Firmware: %s %s\n", ri->chipname, buf);
  142. /* locate firmware version number for ethtool */
  143. ptr = strrchr(buf, ' ') + 1;
  144. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  145. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  146. @@ -1002,8 +1002,7 @@ static int brcmf_revinfo_read(struct seq
  147. seq_printf(s, "vendorid: 0x%04x\n", ri->vendorid);
  148. seq_printf(s, "deviceid: 0x%04x\n", ri->deviceid);
  149. seq_printf(s, "radiorev: %s\n", brcmu_dotrev_str(ri->radiorev, drev));
  150. - seq_printf(s, "chipnum: %u (%x)\n", ri->chipnum, ri->chipnum);
  151. - seq_printf(s, "chiprev: %u\n", ri->chiprev);
  152. + seq_printf(s, "chip: %s\n", ri->chipname);
  153. seq_printf(s, "chippkg: %u\n", ri->chippkg);
  154. seq_printf(s, "corerev: %u\n", ri->corerev);
  155. seq_printf(s, "boardid: 0x%04x\n", ri->boardid);
  156. @@ -1053,13 +1052,6 @@ static int brcmf_bus_started(struct brcm
  157. brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
  158. - /* assure we have chipid before feature attach */
  159. - if (!bus_if->chip) {
  160. - bus_if->chip = drvr->revinfo.chipnum;
  161. - bus_if->chiprev = drvr->revinfo.chiprev;
  162. - brcmf_dbg(INFO, "firmware revinfo: chip %x (%d) rev %d\n",
  163. - bus_if->chip, bus_if->chip, bus_if->chiprev);
  164. - }
  165. brcmf_feat_attach(drvr);
  166. ret = brcmf_proto_init_done(drvr);
  167. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
  168. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
  169. @@ -87,7 +87,6 @@ struct brcmf_rev_info {
  170. u32 vendorid;
  171. u32 deviceid;
  172. u32 radiorev;
  173. - u32 chiprev;
  174. u32 corerev;
  175. u32 boardid;
  176. u32 boardvendor;
  177. @@ -95,7 +94,7 @@ struct brcmf_rev_info {
  178. u32 driverrev;
  179. u32 ucoderev;
  180. u32 bus;
  181. - u32 chipnum;
  182. + char chipname[12];
  183. u32 phytype;
  184. u32 phyrev;
  185. u32 anarev;