qtnfmac_pcie: check for correct CHIP ID at pcie probe
Make sure that wifi device is of supported variant by checking it's CHIP ID before completing a probe sequence. Signed-off-by: Igor Mitsyanko <igor.mitsyanko.os@quantenna.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
86ca238cf1
commit
033a759921
2 changed files with 38 additions and 0 deletions
|
@ -1090,6 +1090,26 @@ static void qtnf_pearl_reclaim_tasklet_fn(unsigned long data)
|
||||||
qtnf_en_txdone_irq(ps);
|
qtnf_en_txdone_irq(ps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int qtnf_pearl_check_chip_id(struct qtnf_pcie_pearl_state *ps)
|
||||||
|
{
|
||||||
|
unsigned int chipid;
|
||||||
|
|
||||||
|
chipid = qtnf_chip_id_get(ps->base.sysctl_bar);
|
||||||
|
|
||||||
|
switch (chipid) {
|
||||||
|
case QTN_CHIP_ID_PEARL:
|
||||||
|
case QTN_CHIP_ID_PEARL_B:
|
||||||
|
case QTN_CHIP_ID_PEARL_C:
|
||||||
|
pr_info("chip ID is 0x%x\n", chipid);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pr_err("incorrect chip ID 0x%x\n", chipid);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int qtnf_pcie_pearl_probe(struct pci_dev *pdev,
|
static int qtnf_pcie_pearl_probe(struct pci_dev *pdev,
|
||||||
const struct pci_device_id *id)
|
const struct pci_device_id *id)
|
||||||
{
|
{
|
||||||
|
@ -1130,6 +1150,10 @@ static int qtnf_pcie_pearl_probe(struct pci_dev *pdev,
|
||||||
qtnf_pcie_init_shm_ipc(&ps->base, &ps->bda->bda_shm_reg1,
|
qtnf_pcie_init_shm_ipc(&ps->base, &ps->bda->bda_shm_reg1,
|
||||||
&ps->bda->bda_shm_reg2, &ipc_int);
|
&ps->bda->bda_shm_reg2, &ipc_int);
|
||||||
|
|
||||||
|
ret = qtnf_pearl_check_chip_id(ps);
|
||||||
|
if (ret)
|
||||||
|
goto error;
|
||||||
|
|
||||||
ret = qtnf_pcie_pearl_init_xfer(ps);
|
ret = qtnf_pcie_pearl_init_xfer(ps);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err("PCIE xfer init failed\n");
|
pr_err("PCIE xfer init failed\n");
|
||||||
|
|
|
@ -25,8 +25,22 @@
|
||||||
|
|
||||||
#define PCIE_DEVICE_ID_QTN_PEARL (0x0008)
|
#define PCIE_DEVICE_ID_QTN_PEARL (0x0008)
|
||||||
|
|
||||||
|
#define QTN_REG_SYS_CTRL_CSR 0x14
|
||||||
|
#define QTN_CHIP_ID_MASK 0xF0
|
||||||
|
#define QTN_CHIP_ID_TOPAZ 0x40
|
||||||
|
#define QTN_CHIP_ID_PEARL 0x50
|
||||||
|
#define QTN_CHIP_ID_PEARL_B 0x60
|
||||||
|
#define QTN_CHIP_ID_PEARL_C 0x70
|
||||||
|
|
||||||
/* FW names */
|
/* FW names */
|
||||||
|
|
||||||
#define QTN_PCI_PEARL_FW_NAME "qtn/fmac_qsr10g.img"
|
#define QTN_PCI_PEARL_FW_NAME "qtn/fmac_qsr10g.img"
|
||||||
|
|
||||||
|
static inline unsigned int qtnf_chip_id_get(const void __iomem *regs_base)
|
||||||
|
{
|
||||||
|
u32 board_rev = readl(regs_base + QTN_REG_SYS_CTRL_CSR);
|
||||||
|
|
||||||
|
return board_rev & QTN_CHIP_ID_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _QTN_HW_IDS_H_ */
|
#endif /* _QTN_HW_IDS_H_ */
|
||||||
|
|
Loading…
Add table
Reference in a new issue