Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 033a7599 authored by Igor Mitsyanko's avatar Igor Mitsyanko Committed by Kalle Valo
Browse files

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: default avatarIgor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 86ca238c
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -1090,6 +1090,26 @@ static void qtnf_pearl_reclaim_tasklet_fn(unsigned long data)
	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,
				 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,
			       &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);
	if (ret) {
		pr_err("PCIE xfer init failed\n");
+14 −0
Original line number Diff line number Diff line
@@ -25,8 +25,22 @@

#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 */

#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_ */