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

Commit df6fb694 authored by Jitendra Sharma's avatar Jitendra Sharma
Browse files

soc: qcom: pil: Fix error handling during PIL driver probe



During probe function of the Linux PIL kernel driver
Initialization of various resources are done.
This fix is for acquired resource cleanup, in case of error.

Change-Id: I0b3511cff7e2917fe83bddfc15086e939f5c2abc
Signed-off-by: default avatarJitendra Sharma <shajit@codeaurora.org>
parent e0cf17f7
Loading
Loading
Loading
Loading
+28 −1
Original line number Diff line number Diff line
@@ -1042,20 +1042,46 @@ static int pil_tz_driver_probe(struct platform_device *pdev)
		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
						"sp2soc_irq_status");
		d->irq_status = devm_ioremap_resource(&pdev->dev, res);
		if (IS_ERR(d->irq_status)) {
			dev_err(&pdev->dev, "Invalid resource for sp2soc_irq_status\n");
			rc = PTR_ERR(d->irq_status);
			goto err_ramdump;
		}

		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
						"sp2soc_irq_clr");
		d->irq_clear = devm_ioremap_resource(&pdev->dev, res);
		if (IS_ERR(d->irq_clear)) {
			dev_err(&pdev->dev, "Invalid resource for sp2soc_irq_clr\n");
			rc = PTR_ERR(d->irq_clear);
			goto err_ramdump;
		}

		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
						"sp2soc_irq_mask");
		d->irq_mask = devm_ioremap_resource(&pdev->dev, res);
		if (IS_ERR(d->irq_mask)) {
			dev_err(&pdev->dev, "Invalid resource for sp2soc_irq_mask\n");
			rc = PTR_ERR(d->irq_mask);
			goto err_ramdump;
		}

		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
						"rmb_err");
		d->err_status = devm_ioremap_resource(&pdev->dev, res);
		if (IS_ERR(d->err_status)) {
			dev_err(&pdev->dev, "Invalid resource for rmb_err\n");
			rc = PTR_ERR(d->err_status);
			goto err_ramdump;
		}

		rc = of_property_read_u32_array(pdev->dev.of_node,
		       "qcom,spss-scsr-bits", d->bits_arr, sizeof(d->bits_arr)/
							sizeof(d->bits_arr[0]));
		if (rc)
		if (rc) {
			dev_err(&pdev->dev, "Failed to read qcom,spss-scsr-bits");
			goto err_ramdump;
		}
	} else {
		d->subsys_desc.err_fatal_handler =
						subsys_err_fatal_intr_handler;
@@ -1080,6 +1106,7 @@ err_subsys:
	destroy_ramdump_device(d->ramdump_dev);
err_ramdump:
	pil_desc_release(&d->desc);
	platform_set_drvdata(pdev, NULL);

	return rc;
}