diff options
author | Rafał Miłecki <rafal@milecki.pl> | 2018-06-17 22:46:35 +0200 |
---|---|---|
committer | Rafał Miłecki <rafal@milecki.pl> | 2018-06-17 22:46:35 +0200 |
commit | 3c8bb92655c68a07abf5358ef23eb98422ed8d6d (patch) | |
tree | 43961eb68b7f2af4ddc99402dab68ea32a0290c3 /package/kernel/mac80211/patches/327-v4.17-0002-brcmfmac-use-brcmf_chip_name-to-store-name-in-revinf.patch | |
parent | 0da9303e5b444e2c98c24719c48c09f4c976c5a7 (diff) | |
download | mtk-20170518-3c8bb92655c68a07abf5358ef23eb98422ed8d6d.zip mtk-20170518-3c8bb92655c68a07abf5358ef23eb98422ed8d6d.tar.gz mtk-20170518-3c8bb92655c68a07abf5358ef23eb98422ed8d6d.tar.bz2 |
mac80211: backport brcmfmac data structure rework
It backports brcmfmac commits from kernel 4.17.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Diffstat (limited to 'package/kernel/mac80211/patches/327-v4.17-0002-brcmfmac-use-brcmf_chip_name-to-store-name-in-revinf.patch')
-rw-r--r-- | package/kernel/mac80211/patches/327-v4.17-0002-brcmfmac-use-brcmf_chip_name-to-store-name-in-revinf.patch | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/327-v4.17-0002-brcmfmac-use-brcmf_chip_name-to-store-name-in-revinf.patch b/package/kernel/mac80211/patches/327-v4.17-0002-brcmfmac-use-brcmf_chip_name-to-store-name-in-revinf.patch new file mode 100644 index 0000000..7908119 --- /dev/null +++ b/package/kernel/mac80211/patches/327-v4.17-0002-brcmfmac-use-brcmf_chip_name-to-store-name-in-revinf.patch @@ -0,0 +1,203 @@ +From 756a2b390874d274f2f615921318ef0856ff9313 Mon Sep 17 00:00:00 2001 +From: Arend Van Spriel <arend.vanspriel@broadcom.com> +Date: Thu, 22 Mar 2018 21:28:21 +0100 +Subject: [PATCH] brcmfmac: use brcmf_chip_name() to store name in revinfo + +The chip id can either be four or five digits. For the chip name either +the hexadecimal value needs to be taken (four digits) or the decimal +value (five digits). The function brcmf_chip_name() does this conversion +so use it to store the name in driver revision info. + +Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com> +Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com> +Reviewed-by: Franky Lin <franky.lin@broadcom.com> +Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> +Signed-off-by: Kalle Valo <kvalo@codeaurora.org> +--- + .../wireless/broadcom/brcm80211/brcmfmac/chip.c | 9 +++++---- + .../wireless/broadcom/brcm80211/brcmfmac/chip.h | 3 ++- + .../wireless/broadcom/brcm80211/brcmfmac/common.c | 23 ++++++++++++++++------ + .../wireless/broadcom/brcm80211/brcmfmac/core.c | 10 +--------- + .../wireless/broadcom/brcm80211/brcmfmac/core.h | 3 +-- + 5 files changed, 26 insertions(+), 22 deletions(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c +@@ -464,12 +464,12 @@ static void brcmf_chip_ai_resetcore(stru + ci->ops->read32(ci->ctx, core->wrapbase + BCMA_IOCTL); + } + +-static char *brcmf_chip_name(uint chipid, char *buf, uint len) ++char *brcmf_chip_name(u32 id, u32 rev, char *buf, uint len) + { + const char *fmt; + +- fmt = ((chipid > 0xa000) || (chipid < 0x4000)) ? "%d" : "%x"; +- snprintf(buf, len, fmt, chipid); ++ fmt = ((id > 0xa000) || (id < 0x4000)) ? "BCM%d/%u" : "BCM%x/%u"; ++ snprintf(buf, len, fmt, id, rev); + return buf; + } + +@@ -924,7 +924,8 @@ static int brcmf_chip_recognition(struct + ci->pub.chiprev = (regdata & CID_REV_MASK) >> CID_REV_SHIFT; + socitype = (regdata & CID_TYPE_MASK) >> CID_TYPE_SHIFT; + +- brcmf_chip_name(ci->pub.chip, ci->pub.name, sizeof(ci->pub.name)); ++ brcmf_chip_name(ci->pub.chip, ci->pub.chiprev, ++ ci->pub.name, sizeof(ci->pub.name)); + brcmf_dbg(INFO, "found %s chip: BCM%s, rev=%d\n", + socitype == SOCI_SB ? "SB" : "AXI", ci->pub.name, + ci->pub.chiprev); +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h +@@ -45,7 +45,7 @@ struct brcmf_chip { + u32 rambase; + u32 ramsize; + u32 srsize; +- char name[8]; ++ char name[12]; + }; + + /** +@@ -93,5 +93,6 @@ void brcmf_chip_resetcore(struct brcmf_c + void brcmf_chip_set_passive(struct brcmf_chip *ci); + bool brcmf_chip_set_active(struct brcmf_chip *ci, u32 rstvec); + bool brcmf_chip_sr_capable(struct brcmf_chip *pub); ++char *brcmf_chip_name(u32 chipid, u32 chiprev, char *buf, uint len); + + #endif /* BRCMF_AXIDMP_H */ +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c +@@ -30,6 +30,7 @@ + #include "common.h" + #include "of.h" + #include "firmware.h" ++#include "chip.h" + + MODULE_AUTHOR("Broadcom Corporation"); + MODULE_DESCRIPTION("Broadcom 802.11 wireless LAN fullmac driver."); +@@ -131,14 +132,13 @@ static int brcmf_c_download(struct brcmf + static int brcmf_c_get_clm_name(struct brcmf_if *ifp, u8 *clm_name) + { + struct brcmf_bus *bus = ifp->drvr->bus_if; +- struct brcmf_rev_info *ri = &ifp->drvr->revinfo; + u8 fw_name[BRCMF_FW_NAME_LEN]; + u8 *ptr; + size_t len; + s32 err; + + memset(fw_name, 0, BRCMF_FW_NAME_LEN); +- err = brcmf_bus_get_fwname(bus, ri->chipnum, ri->chiprev, fw_name); ++ err = brcmf_bus_get_fwname(bus, bus->chip, bus->chiprev, fw_name); + if (err) { + brcmf_err("get firmware name failed (%d)\n", err); + goto done; +@@ -238,6 +238,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i + { + s8 eventmask[BRCMF_EVENTING_MASK_LEN]; + u8 buf[BRCMF_DCMD_SMLEN]; ++ struct brcmf_bus *bus; + struct brcmf_rev_info_le revinfo; + struct brcmf_rev_info *ri; + char *clmver; +@@ -253,16 +254,18 @@ int brcmf_c_preinit_dcmds(struct brcmf_i + } + memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac)); + ++ bus = ifp->drvr->bus_if; ++ ri = &ifp->drvr->revinfo; ++ + err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_REVINFO, + &revinfo, sizeof(revinfo)); +- ri = &ifp->drvr->revinfo; + if (err < 0) { + brcmf_err("retrieving revision info failed, %d\n", err); ++ strlcpy(ri->chipname, "UNKNOWN", sizeof(ri->chipname)); + } else { + ri->vendorid = le32_to_cpu(revinfo.vendorid); + ri->deviceid = le32_to_cpu(revinfo.deviceid); + ri->radiorev = le32_to_cpu(revinfo.radiorev); +- ri->chiprev = le32_to_cpu(revinfo.chiprev); + ri->corerev = le32_to_cpu(revinfo.corerev); + ri->boardid = le32_to_cpu(revinfo.boardid); + ri->boardvendor = le32_to_cpu(revinfo.boardvendor); +@@ -270,15 +273,23 @@ int brcmf_c_preinit_dcmds(struct brcmf_i + ri->driverrev = le32_to_cpu(revinfo.driverrev); + ri->ucoderev = le32_to_cpu(revinfo.ucoderev); + ri->bus = le32_to_cpu(revinfo.bus); +- ri->chipnum = le32_to_cpu(revinfo.chipnum); + ri->phytype = le32_to_cpu(revinfo.phytype); + ri->phyrev = le32_to_cpu(revinfo.phyrev); + ri->anarev = le32_to_cpu(revinfo.anarev); + ri->chippkg = le32_to_cpu(revinfo.chippkg); + ri->nvramrev = le32_to_cpu(revinfo.nvramrev); ++ ++ if (!bus->chip) { ++ bus->chip = le32_to_cpu(revinfo.chipnum); ++ bus->chiprev = le32_to_cpu(revinfo.chiprev); ++ } + } + ri->result = err; + ++ if (bus->chip) ++ brcmf_chip_name(bus->chip, bus->chiprev, ++ ri->chipname, sizeof(ri->chipname)); ++ + /* Do any CLM downloading */ + err = brcmf_c_process_clm_blob(ifp); + if (err < 0) { +@@ -299,7 +310,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i + strsep(&ptr, "\n"); + + /* Print fw version info */ +- brcmf_info("Firmware version = %s\n", buf); ++ brcmf_info("Firmware: %s %s\n", ri->chipname, buf); + + /* locate firmware version number for ethtool */ + ptr = strrchr(buf, ' ') + 1; +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +@@ -1002,8 +1002,7 @@ static int brcmf_revinfo_read(struct seq + seq_printf(s, "vendorid: 0x%04x\n", ri->vendorid); + seq_printf(s, "deviceid: 0x%04x\n", ri->deviceid); + seq_printf(s, "radiorev: %s\n", brcmu_dotrev_str(ri->radiorev, drev)); +- seq_printf(s, "chipnum: %u (%x)\n", ri->chipnum, ri->chipnum); +- seq_printf(s, "chiprev: %u\n", ri->chiprev); ++ seq_printf(s, "chip: %s\n", ri->chipname); + seq_printf(s, "chippkg: %u\n", ri->chippkg); + seq_printf(s, "corerev: %u\n", ri->corerev); + seq_printf(s, "boardid: 0x%04x\n", ri->boardid); +@@ -1053,13 +1052,6 @@ static int brcmf_bus_started(struct brcm + + brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read); + +- /* assure we have chipid before feature attach */ +- if (!bus_if->chip) { +- bus_if->chip = drvr->revinfo.chipnum; +- bus_if->chiprev = drvr->revinfo.chiprev; +- brcmf_dbg(INFO, "firmware revinfo: chip %x (%d) rev %d\n", +- bus_if->chip, bus_if->chip, bus_if->chiprev); +- } + brcmf_feat_attach(drvr); + + ret = brcmf_proto_init_done(drvr); +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h +@@ -87,7 +87,6 @@ struct brcmf_rev_info { + u32 vendorid; + u32 deviceid; + u32 radiorev; +- u32 chiprev; + u32 corerev; + u32 boardid; + u32 boardvendor; +@@ -95,7 +94,7 @@ struct brcmf_rev_info { + u32 driverrev; + u32 ucoderev; + u32 bus; +- u32 chipnum; ++ char chipname[12]; + u32 phytype; + u32 phyrev; + u32 anarev; |