Check that firmware exists prior to starting firmware download.

Signed-off-by: Sergey Matyukevich <[email protected]>
---
 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

Reply via email to