]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
of: Add OF_DMA_DEFAULT_COHERENT & select it on powerpc
authorMichael Ellerman <mpe@ellerman.id.au>
Sun, 26 Jan 2020 11:52:47 +0000 (22:52 +1100)
committerBen Hutchings <ben@decadent.org.uk>
Fri, 22 May 2020 20:19:39 +0000 (21:19 +0100)
commit dabf6b36b83a18d57e3d4b9d50544ed040d86255 upstream.

There's an OF helper called of_dma_is_coherent(), which checks if a
device has a "dma-coherent" property to see if the device is coherent
for DMA.

But on some platforms devices are coherent by default, and on some
platforms it's not possible to update existing device trees to add the
"dma-coherent" property.

So add a Kconfig symbol to allow arch code to tell
of_dma_is_coherent() that devices are coherent by default, regardless
of the presence of the property.

Select that symbol on powerpc when NOT_COHERENT_CACHE is not set, ie.
when the system has a coherent cache.

Fixes: 92ea637edea3 ("of: introduce of_dma_is_coherent() helper")
Reported-by: Christian Zigotzky <chzigotzky@xenosoft.de>
Tested-by: Christian Zigotzky <chzigotzky@xenosoft.de>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Rob Herring <robh@kernel.org>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/powerpc/Kconfig
drivers/of/Kconfig
drivers/of/address.c

index 5ff5ab0411b37267d06d052818c52f61037261c1..d05ea43f24e0f27ccbc23a3420166fdb6702c9b1 100644 (file)
@@ -89,6 +89,7 @@ config PPC
        select ARCH_MIGHT_HAVE_PC_SERIO
        select BINFMT_ELF
        select OF
+       select OF_DMA_DEFAULT_COHERENT          if !NOT_COHERENT_CACHE
        select OF_EARLY_FLATTREE
        select OF_RESERVED_MEM
        select HAVE_FTRACE_MCOUNT_RECORD
index 2dcb0541012d0133a417cc18ff2cd7ec2acbee2f..a3bec421551e87e3c8fa72296ff8b9d88148b958 100644 (file)
@@ -78,4 +78,8 @@ config OF_RESERVED_MEM
        help
          Helpers to allow for reservation of memory regions
 
+config OF_DMA_DEFAULT_COHERENT
+       # arches should select this if DMA is coherent by default for OF devices
+       bool
+
 endmenu # OF
index 01570bf23842e1089cc29b7d4b73ca9b6c85bc7e..2f108ab4e7f6abc6059e8ee4d098a16d7cf92613 100644 (file)
@@ -812,12 +812,16 @@ EXPORT_SYMBOL_GPL(of_dma_get_range);
  * @np:        device node
  *
  * It returns true if "dma-coherent" property was found
- * for this device in DT.
+ * for this device in the DT, or if DMA is coherent by
+ * default for OF devices on the current platform.
  */
 bool of_dma_is_coherent(struct device_node *np)
 {
        struct device_node *node = of_node_get(np);
 
+       if (IS_ENABLED(CONFIG_OF_DMA_DEFAULT_COHERENT))
+               return true;
+
        while (node) {
                if (of_property_read_bool(node, "dma-coherent")) {
                        of_node_put(node);