|
|
@@ -2039,27 +2039,6 @@ static int sdma_probe(struct platform_device *pdev)
|
|
|
if (pdata && pdata->script_addrs)
|
|
|
sdma_add_scripts(sdma, pdata->script_addrs);
|
|
|
|
|
|
- if (pdata) {
|
|
|
- ret = sdma_get_firmware(sdma, pdata->fw_name);
|
|
|
- if (ret)
|
|
|
- dev_warn(&pdev->dev, "failed to get firmware from platform data\n");
|
|
|
- } else {
|
|
|
- /*
|
|
|
- * Because that device tree does not encode ROM script address,
|
|
|
- * the RAM script in firmware is mandatory for device tree
|
|
|
- * probe, otherwise it fails.
|
|
|
- */
|
|
|
- ret = of_property_read_string(np, "fsl,sdma-ram-script-name",
|
|
|
- &fw_name);
|
|
|
- if (ret)
|
|
|
- dev_warn(&pdev->dev, "failed to get firmware name\n");
|
|
|
- else {
|
|
|
- ret = sdma_get_firmware(sdma, fw_name);
|
|
|
- if (ret)
|
|
|
- dev_warn(&pdev->dev, "failed to get firmware from device tree\n");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
sdma->dma_device.dev = &pdev->dev;
|
|
|
|
|
|
sdma->dma_device.device_alloc_chan_resources = sdma_alloc_chan_resources;
|
|
|
@@ -2103,6 +2082,33 @@ static int sdma_probe(struct platform_device *pdev)
|
|
|
of_node_put(spba_bus);
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * Kick off firmware loading as the very last step:
|
|
|
+ * attempt to load firmware only if we're not on the error path, because
|
|
|
+ * the firmware callback requires a fully functional and allocated sdma
|
|
|
+ * instance.
|
|
|
+ */
|
|
|
+ if (pdata) {
|
|
|
+ ret = sdma_get_firmware(sdma, pdata->fw_name);
|
|
|
+ if (ret)
|
|
|
+ dev_warn(&pdev->dev, "failed to get firmware from platform data\n");
|
|
|
+ } else {
|
|
|
+ /*
|
|
|
+ * Because that device tree does not encode ROM script address,
|
|
|
+ * the RAM script in firmware is mandatory for device tree
|
|
|
+ * probe, otherwise it fails.
|
|
|
+ */
|
|
|
+ ret = of_property_read_string(np, "fsl,sdma-ram-script-name",
|
|
|
+ &fw_name);
|
|
|
+ if (ret) {
|
|
|
+ dev_warn(&pdev->dev, "failed to get firmware name\n");
|
|
|
+ } else {
|
|
|
+ ret = sdma_get_firmware(sdma, fw_name);
|
|
|
+ if (ret)
|
|
|
+ dev_warn(&pdev->dev, "failed to get firmware from device tree\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
|
|
|
err_register:
|