Commit 48622903 authored by Arend van Spriel's avatar Arend van Spriel Committed by Kalle Valo

brcmfmac: always obtain device revision info upon intialization

Obtain device revision information and store it.
Reviewed-by: default avatarHante Meuleman <meuleman@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 9b1933a3
...@@ -41,6 +41,8 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp) ...@@ -41,6 +41,8 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
s8 eventmask[BRCMF_EVENTING_MASK_LEN]; s8 eventmask[BRCMF_EVENTING_MASK_LEN];
u8 buf[BRCMF_DCMD_SMLEN]; u8 buf[BRCMF_DCMD_SMLEN];
struct brcmf_join_pref_params join_pref_params[2]; struct brcmf_join_pref_params join_pref_params[2];
struct brcmf_rev_info_le revinfo;
struct brcmf_rev_info *ri;
char *ptr; char *ptr;
s32 err; s32 err;
...@@ -48,12 +50,36 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp) ...@@ -48,12 +50,36 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
err = brcmf_fil_iovar_data_get(ifp, "cur_etheraddr", ifp->mac_addr, err = brcmf_fil_iovar_data_get(ifp, "cur_etheraddr", ifp->mac_addr,
sizeof(ifp->mac_addr)); sizeof(ifp->mac_addr));
if (err < 0) { if (err < 0) {
brcmf_err("Retreiving cur_etheraddr failed, %d\n", brcmf_err("Retreiving cur_etheraddr failed, %d\n", err);
err);
goto done; goto done;
} }
memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac)); memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac));
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_REVINFO,
&revinfo, sizeof(revinfo));
if (err < 0) {
brcmf_err("retrieving revision info failed, %d\n", err);
} else {
ri = &ifp->drvr->revinfo;
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);
ri->boardrev = le32_to_cpu(revinfo.boardrev);
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);
}
/* query for 'ver' to get version info from firmware */ /* query for 'ver' to get version info from firmware */
memset(buf, 0, sizeof(buf)); memset(buf, 0, sizeof(buf));
strcpy(buf, "ver"); strcpy(buf, "ver");
......
...@@ -948,7 +948,6 @@ int brcmf_bus_start(struct device *dev) ...@@ -948,7 +948,6 @@ int brcmf_bus_start(struct device *dev)
struct brcmf_pub *drvr = bus_if->drvr; struct brcmf_pub *drvr = bus_if->drvr;
struct brcmf_if *ifp; struct brcmf_if *ifp;
struct brcmf_if *p2p_ifp; struct brcmf_if *p2p_ifp;
struct brcmf_rev_info_le revinfo;
brcmf_dbg(TRACE, "\n"); brcmf_dbg(TRACE, "\n");
...@@ -974,17 +973,10 @@ int brcmf_bus_start(struct device *dev) ...@@ -974,17 +973,10 @@ int brcmf_bus_start(struct device *dev)
/* assure we have chipid before feature attach */ /* assure we have chipid before feature attach */
if (!bus_if->chip) { if (!bus_if->chip) {
ret = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_REVINFO, &revinfo, bus_if->chip = drvr->revinfo.chipnum;
sizeof(revinfo)); bus_if->chiprev = drvr->revinfo.chiprev;
if (ret < 0) { brcmf_dbg(INFO, "firmware revinfo: chip %x (%d) rev %d\n",
brcmf_err("no chipid determined - device may malfunction\n"); bus_if->chip, bus_if->chip, bus_if->chiprev);
} else {
bus_if->chip = le32_to_cpu(revinfo.chipnum);
bus_if->chiprev = le32_to_cpu(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); brcmf_feat_attach(drvr);
......
...@@ -71,6 +71,27 @@ struct brcmf_proto; /* device communication protocol info */ ...@@ -71,6 +71,27 @@ struct brcmf_proto; /* device communication protocol info */
struct brcmf_cfg80211_dev; /* cfg80211 device info */ struct brcmf_cfg80211_dev; /* cfg80211 device info */
struct brcmf_fws_info; /* firmware signalling info */ struct brcmf_fws_info; /* firmware signalling info */
/* see struct brcmf_rev_info_le in fwil_types.h */
struct brcmf_rev_info {
u32 vendorid;
u32 deviceid;
u32 radiorev;
u32 chiprev;
u32 corerev;
u32 boardid;
u32 boardvendor;
u32 boardrev;
u32 driverrev;
u32 ucoderev;
u32 bus;
u32 chipnum;
u32 phytype;
u32 phyrev;
u32 anarev;
u32 chippkg;
u32 nvramrev;
};
/* Common structure for module and instance linkage */ /* Common structure for module and instance linkage */
struct brcmf_pub { struct brcmf_pub {
/* Linkage ponters */ /* Linkage ponters */
...@@ -104,6 +125,7 @@ struct brcmf_pub { ...@@ -104,6 +125,7 @@ struct brcmf_pub {
u32 feat_flags; u32 feat_flags;
u32 chip_quirks; u32 chip_quirks;
struct brcmf_rev_info revinfo;
#ifdef DEBUG #ifdef DEBUG
struct dentry *dbgfs_dir; struct dentry *dbgfs_dir;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment