Re: [PATCH 1/2] of: device: Allow DMA range map to be set before of_dma_configure_id
flat view
From: Paul Kocialkowski <hidden>
Date: 2021-01-27 13:05:49
Also in:
linux-devicetree, lkml
Hi, On Fri 15 Jan 21, 18:58, Paul Kocialkowski wrote:
A mechanism was recently introduced for the sunxi architecture where the DMA offset for specific devices (under the MBUS) is set by a common driver (sunxi_mbus). This driver calls dma_direct_set_offset to set the device's dma_range_map manually. However this information was overwritten by of_dma_configure_id, which obtains the map from of_dma_get_range (or keeps it NULL when it fails and the force_dma argument is true, which is the case for platform devices). As a result, the dma_range_map was always overwritten and the mechanism could not correctly take effect. This adds a check to ensure that no previous DMA range map is overwritten and prints a warning when the map was already set while also being available from dt. In this case, the map that was already set is kept.
FYI this patch has been superseded by the following: https://patchwork.kernel.org/project/linux-mediatek/patch/20210119105203.15530-1-yong.wu@mediatek.com/ Paul
quoted hunk ↗ jump to hunk
Fixes: b4bdc4fbf8d0 ("soc: sunxi: Deal with the MBUS DMA offsets in a central place") Signed-off-by: Paul Kocialkowski <redacted> --- drivers/of/device.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)diff --git a/drivers/of/device.c b/drivers/of/device.c index aedfaaafd3e7..db1b8634c2c7 100644 --- a/drivers/of/device.c +++ b/drivers/of/device.c@@ -181,7 +181,14 @@ int of_dma_configure_id(struct device *dev, struct device_node *np, arch_setup_dma_ops(dev, dma_start, size, iommu, coherent); - dev->dma_range_map = map; + if (!dev->dma_range_map) { + dev->dma_range_map = map; + } else if (map) { + dev_warn(dev, + "DMA range map was already set, ignoring range map from dt\n"); + kfree(map); + } + return 0; } EXPORT_SYMBOL_GPL(of_dma_configure_id);-- 2.30.0
-- Paul Kocialkowski, Bootlin Embedded Linux and kernel engineering https://bootlin.com