Thread (16 messages) 16 messages, 4 authors, 2018-02-27
STALE3031d
Revisions (2)
  1. v1 current
  2. v2 [diff vs current]

[PATCH 4/6] qtnfmac: fix rmmod for missing firmware

From: Sergey Matyukevich <hidden>
Date: 2018-02-05 15:05:46
Subsystem: quantenna qtnfmac wireless driver, the rest · Maintainers: Igor Mitsyanko, Linus Torvalds

Check that firmware exists prior to starting firmware download.

Signed-off-by: Sergey Matyukevich <redacted>
---
 drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
diff --git a/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c b/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c
index c0d1c5d94ef0..86368e345276 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c
@@ -1104,6 +1104,20 @@ static void qtnf_firmware_load(const struct firmware *fw, void *context)
 	complete(&bus->request_firmware_complete);
 }
 
+static int qtnf_fw_exists(struct qtnf_bus *bus)
+{
+	struct qtnf_pcie_bus_priv *priv = (void *)get_bus_priv(bus);
+	struct pci_dev *pdev = priv->pdev;
+	const struct firmware *fw;
+	int ret;
+
+	ret = request_firmware(&fw, bus->fwname, &pdev->dev);
+	if (!ret)
+		release_firmware(fw);
+
+	return !ret;
+}
+
 static int qtnf_bringup_fw(struct qtnf_bus *bus)
 {
 	struct qtnf_pcie_bus_priv *priv = (void *)get_bus_priv(bus);
@@ -1358,6 +1372,12 @@ static int qtnf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	netif_napi_add(&bus->mux_dev, &bus->mux_napi,
 		       qtnf_rx_poll, 10);
 
+	if (!flashboot && !qtnf_fw_exists(bus)) {
+		pr_err("failed to get firmware %s\n", bus->fwname);
+		ret = -ENOENT;
+		goto err_fw;
+	}
+
 	ret = qtnf_bringup_fw(bus);
 	if (ret < 0)
 		goto err_fw;
-- 
2.11.0
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help