]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
memory: brcmstb: dpfe: support for deferred firmware download
authorMarkus Mayer <mmayer@broadcom.com>
Tue, 15 Oct 2019 22:45:11 +0000 (15:45 -0700)
committerFlorian Fainelli <f.fainelli@gmail.com>
Fri, 18 Oct 2019 17:07:43 +0000 (10:07 -0700)
We add support for deferred downloading of the DPFE firmware. It may be
necessary to do this if the root file system containing the firmware
image is not yet available at the time the driver's probe function is
being called.

Signed-off-by: Markus Mayer <mmayer@broadcom.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
drivers/memory/brcmstb_dpfe.c

index f905a0076db7582c6a9700f7bb0ceb98e1a9c62c..cf320302d2c0f90cc928378f20cedd907fd9b685 100644 (file)
@@ -614,10 +614,13 @@ static int brcmstb_dpfe_download_firmware(struct brcmstb_dpfe_priv *priv)
        if (!priv->dpfe_api->fw_name)
                return -ENODEV;
 
-       ret = request_firmware(&fw, priv->dpfe_api->fw_name, dev);
-       /* request_firmware() prints its own error messages. */
+       ret = firmware_request_nowarn(&fw, priv->dpfe_api->fw_name, dev);
+       /*
+        * Defer the firmware download if the firmware file couldn't be found.
+        * The root file system may not be available yet.
+        */
        if (ret)
-               return ret;
+               return (ret == -ENOENT) ? -EPROBE_DEFER : ret;
 
        ret = __verify_firmware(&init, fw);
        if (ret)
@@ -862,7 +865,8 @@ static int brcmstb_dpfe_probe(struct platform_device *pdev)
 
        ret = brcmstb_dpfe_download_firmware(priv);
        if (ret) {
-               dev_err(dev, "Couldn't download firmware -- %d\n", ret);
+               if (ret != -EPROBE_DEFER)
+                       dev_err(dev, "Couldn't download firmware -- %d\n", ret);
                return ret;
        }