Messages in this thread | | | Subject | Re: [RFC 2/2] drivers: dma-mapping: parse per device reserved mem at probe time | From | Marek Szyprowski <> | Date | Mon, 27 Nov 2017 09:44:20 +0100 |
| |
Hi Peng,
On 2017-11-27 09:37, Peng Fan wrote: > Hi Marek, > > On Mon, Nov 27, 2017 at 09:31:00AM +0100, Marek Szyprowski wrote: >> Hi >> >> On 2017-11-26 14:13, Peng Fan wrote: >>> Invoke of_reserved_mem_device_init at dma_configure, then >>> there is no need to call of_reserved_mem_device_init in device >>> specific probe function. >>> >>> Signed-off-by: Peng Fan <peng.fan@nxp.com> >> This has been already tried long time ago, without success: >> http://patches.linaro.org/patch/33558/ > Thanks for the info. I should first search mail list before > sending out patches.
It doesn't mean that I'm against such idea. I just pointed that I've already tried. That time, however there was no dma_configure() function yet, which seems to be better place for of_rmem_device_init().
I would however always call of_dma_configure(), even when reserved mem node is there. IIRC on ARM64 that function configures dma_ops, without which no dma is possible at all.
> > Thanks, > Peng. > >>> --- >>> drivers/base/dma-mapping.c | 6 +++++- >>> 1 file changed, 5 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/base/dma-mapping.c b/drivers/base/dma-mapping.c >>> index e584eddef0a7..55dca06a7b55 100644 >>> --- a/drivers/base/dma-mapping.c >>> +++ b/drivers/base/dma-mapping.c >>> @@ -12,6 +12,7 @@ >>> #include <linux/export.h> >>> #include <linux/gfp.h> >>> #include <linux/of_device.h> >>> +#include <linux/of_reserved_mem.h> >>> #include <linux/slab.h> >>> #include <linux/vmalloc.h> >>> @@ -351,7 +352,9 @@ int dma_configure(struct device *dev) >>> } >>> if (dma_dev->of_node) { >>> - ret = of_dma_configure(dev, dma_dev->of_node); >>> + ret = of_reserved_mem_device_init(dev); >>> + if (ret) >>> + ret = of_dma_configure(dev, dma_dev->of_node); >>> } else if (has_acpi_companion(dma_dev)) { >>> attr = acpi_get_dma_attr(to_acpi_device_node(dma_dev->fwnode)); >>> if (attr != DEV_DMA_NOT_SUPPORTED) >>> @@ -367,5 +370,6 @@ int dma_configure(struct device *dev) >>> void dma_deconfigure(struct device *dev) >>> { >>> of_dma_deconfigure(dev); >>> + of_reserved_mem_device_release(dev); >>> acpi_dma_deconfigure(dev); >>> }
Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland
| |