dmaengine: xilinx_dma: Fix devm_platform_ioremap_resource error handling
[ Upstream commit 91df7751eb890e970afc08f50b8f0fa5ea39e03d ] Add missing cleanup in devm_platform_ioremap_resource(). When probe fails remove dma channel resources and disable clocks in accordance with the order of resources allocated . Signed-off-by: Swati Agarwal <swati.agarwal@xilinx.com> Link: https://lore.kernel.org/r/20220817061125.4720-2-swati.agarwal@xilinx.com Signed-off-by: Vinod Koul <vkoul@kernel.org> Stable-dep-of: 596b53ccc36a ("dmaengine: xilinx_dma: call of_node_put() when breaking out of for_each_child_of_node()") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
fe39e74a64
commit
9b4482267e
@ -2652,9 +2652,10 @@ static int xilinx_dma_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
/* Request and map I/O memory */
|
/* Request and map I/O memory */
|
||||||
xdev->regs = devm_platform_ioremap_resource(pdev, 0);
|
xdev->regs = devm_platform_ioremap_resource(pdev, 0);
|
||||||
if (IS_ERR(xdev->regs))
|
if (IS_ERR(xdev->regs)) {
|
||||||
return PTR_ERR(xdev->regs);
|
err = PTR_ERR(xdev->regs);
|
||||||
|
goto disable_clks;
|
||||||
|
}
|
||||||
/* Retrieve the DMA engine properties from the device tree */
|
/* Retrieve the DMA engine properties from the device tree */
|
||||||
xdev->max_buffer_len = GENMASK(XILINX_DMA_MAX_TRANS_LEN_MAX - 1, 0);
|
xdev->max_buffer_len = GENMASK(XILINX_DMA_MAX_TRANS_LEN_MAX - 1, 0);
|
||||||
|
|
||||||
@ -2747,7 +2748,7 @@ static int xilinx_dma_probe(struct platform_device *pdev)
|
|||||||
for_each_child_of_node(node, child) {
|
for_each_child_of_node(node, child) {
|
||||||
err = xilinx_dma_child_probe(xdev, child);
|
err = xilinx_dma_child_probe(xdev, child);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto disable_clks;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xdev->dma_config->dmatype == XDMA_TYPE_VDMA) {
|
if (xdev->dma_config->dmatype == XDMA_TYPE_VDMA) {
|
||||||
@ -2780,12 +2781,12 @@ static int xilinx_dma_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
disable_clks:
|
|
||||||
xdma_disable_allclks(xdev);
|
|
||||||
error:
|
error:
|
||||||
for (i = 0; i < xdev->nr_channels; i++)
|
for (i = 0; i < xdev->nr_channels; i++)
|
||||||
if (xdev->chan[i])
|
if (xdev->chan[i])
|
||||||
xilinx_dma_chan_remove(xdev->chan[i]);
|
xilinx_dma_chan_remove(xdev->chan[i]);
|
||||||
|
disable_clks:
|
||||||
|
xdma_disable_allclks(xdev);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user