Commit dabf6b36 authored by Michael Ellerman's avatar Michael Ellerman Committed by Rob Herring
Browse files

of: Add OF_DMA_DEFAULT_COHERENT & select it on powerpc



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: 92ea637e ("of: introduce of_dma_is_coherent() helper")
Cc: stable@vger.kernel.org # v3.16+
Reported-by: default avatarChristian Zigotzky <chzigotzky@xenosoft.de>
Tested-by: default avatarChristian Zigotzky <chzigotzky@xenosoft.de>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Reviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarRob Herring <robh@kernel.org>
parent 9243f296
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -238,6 +238,7 @@ config PPC
	select NEED_DMA_MAP_STATE		if PPC64 || NOT_COHERENT_CACHE
	select NEED_SG_DMA_LENGTH
	select OF
	select OF_DMA_DEFAULT_COHERENT		if !NOT_COHERENT_CACHE
	select OF_EARLY_FLATTREE
	select OLD_SIGACTION			if PPC32
	select OLD_SIGSUSPEND
+4 −0
Original line number Diff line number Diff line
@@ -103,4 +103,8 @@ config OF_OVERLAY
config OF_NUMA
	bool

config OF_DMA_DEFAULT_COHERENT
	# arches should select this if DMA is coherent by default for OF devices
	bool

endif # OF
+5 −1
Original line number Diff line number Diff line
@@ -995,12 +995,16 @@ out:
 * @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);