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

Commit d5361f6d authored by Maya Erez's avatar Maya Erez Committed by Maya Erez
Browse files

wil6210: support devices with different PCIe bar size



wil6210 devices can have different PCIe bar size, hence get the
bar size from PCIe device instead of using a constant bar size.

Change-Id: I02fe3f05e184b141c9a5519dd97c3f2d2eb99baf
Signed-off-by: default avatarMaya Erez <qca_merez@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
Git-commit: d86d47164b227f01c3ec34c3f5a1613977d563eb
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git


Signed-off-by: default avatarMaya Erez <merez@codeaurora.org>
parent 89c523ef
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
/*
 * Copyright (c) 2014 Qualcomm Atheros, Inc.
 * Copyright (c) 2014,2017 Qualcomm Atheros, Inc.
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
@@ -54,7 +54,7 @@ static void __iomem *wil_ioc_addr(struct wil6210_priv *wil, uint32_t addr,
	}

	off = a - wil->csr;
	if (size >= WIL6210_MEM_SIZE - off) {
	if (size >= wil->bar_size - off) {
		wil_err(wil, "Requested block does not fit into memory: "
			"off = 0x%08x size = 0x%08x\n", off, size);
		return NULL;
+10 −7
Original line number Diff line number Diff line
@@ -198,16 +198,18 @@ static int wil_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
		.ramdump = wil_platform_rop_ramdump,
		.fw_recovery = wil_platform_rop_fw_recovery,
	};
	u32 bar_size = pci_resource_len(pdev, 0);

	/* check HW */
	dev_info(&pdev->dev, WIL_NAME
		 " device found [%04x:%04x] (rev %x)\n",
		 (int)pdev->vendor, (int)pdev->device, (int)pdev->revision);

	if (pci_resource_len(pdev, 0) != WIL6210_MEM_SIZE) {
		dev_err(&pdev->dev, "Not " WIL_NAME "? "
			"BAR0 size is %lu while expecting %lu\n",
			(ulong)pci_resource_len(pdev, 0), WIL6210_MEM_SIZE);
		 " device found [%04x:%04x] (rev %x) bar size 0x%x\n",
		 (int)pdev->vendor, (int)pdev->device, (int)pdev->revision,
		 bar_size);

	if ((bar_size < WIL6210_MIN_MEM_SIZE) ||
	    (bar_size > WIL6210_MAX_MEM_SIZE)) {
		dev_err(&pdev->dev, "Unexpected BAR0 size 0x%x\n",
			bar_size);
		return -ENODEV;
	}

@@ -220,6 +222,7 @@ static int wil_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)

	wil->pdev = pdev;
	pci_set_drvdata(pdev, wil);
	wil->bar_size = bar_size;
	/* rollback to if_free */

	wil->platform_handle =
+3 −1
Original line number Diff line number Diff line
@@ -59,7 +59,8 @@ static inline u32 WIL_GET_BITS(u32 x, int b0, int b1)
	return (x >> b0) & ((1 << (b1 - b0 + 1)) - 1);
}

#define WIL6210_MEM_SIZE (2*1024*1024UL)
#define WIL6210_MIN_MEM_SIZE (2 * 1024 * 1024UL)
#define WIL6210_MAX_MEM_SIZE (4 * 1024 * 1024UL)

#define WIL_TX_Q_LEN_DEFAULT		(4000)
#define WIL_RX_RING_SIZE_ORDER_DEFAULT	(10)
@@ -617,6 +618,7 @@ extern u8 led_polarity;

struct wil6210_priv {
	struct pci_dev *pdev;
	u32 bar_size;
	struct wireless_dev *wdev;
	void __iomem *csr;
	DECLARE_BITMAP(status, wil_status_last);
+2 −2
Original line number Diff line number Diff line
@@ -160,7 +160,7 @@ void __iomem *wmi_buffer(struct wil6210_priv *wil, __le32 ptr_)
		return NULL;

	off = HOSTADDR(ptr);
	if (off > WIL6210_MEM_SIZE - 4)
	if (off > wil->bar_size - 4)
		return NULL;

	return wil->csr + off;
@@ -180,7 +180,7 @@ void __iomem *wmi_addr(struct wil6210_priv *wil, u32 ptr)
		return NULL;

	off = HOSTADDR(ptr);
	if (off > WIL6210_MEM_SIZE - 4)
	if (off > wil->bar_size - 4)
		return NULL;

	return wil->csr + off;