of: Add OF_DMA_DEFAULT_COHERENT & select it on powerpc
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: 92ea637ede
("of: introduce of_dma_is_coherent() helper")
Cc: stable@vger.kernel.org # v3.16+
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
76d587bd57
commit
8a7c008c64
3 changed files with 10 additions and 1 deletions
|
@ -230,6 +230,7 @@ config PPC
|
||||||
select NEED_SG_DMA_LENGTH
|
select NEED_SG_DMA_LENGTH
|
||||||
select NO_BOOTMEM
|
select NO_BOOTMEM
|
||||||
select OF
|
select OF
|
||||||
|
select OF_DMA_DEFAULT_COHERENT if !NOT_COHERENT_CACHE
|
||||||
select OF_EARLY_FLATTREE
|
select OF_EARLY_FLATTREE
|
||||||
select OF_RESERVED_MEM
|
select OF_RESERVED_MEM
|
||||||
select OLD_SIGACTION if PPC32
|
select OLD_SIGACTION if PPC32
|
||||||
|
|
|
@ -103,4 +103,8 @@ config OF_OVERLAY
|
||||||
config OF_NUMA
|
config OF_NUMA
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config OF_DMA_DEFAULT_COHERENT
|
||||||
|
# arches should select this if DMA is coherent by default for OF devices
|
||||||
|
bool
|
||||||
|
|
||||||
endif # OF
|
endif # OF
|
||||||
|
|
|
@ -970,12 +970,16 @@ EXPORT_SYMBOL_GPL(of_dma_get_range);
|
||||||
* @np: device node
|
* @np: device node
|
||||||
*
|
*
|
||||||
* It returns true if "dma-coherent" property was found
|
* 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)
|
bool of_dma_is_coherent(struct device_node *np)
|
||||||
{
|
{
|
||||||
struct device_node *node = of_node_get(np);
|
struct device_node *node = of_node_get(np);
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_OF_DMA_DEFAULT_COHERENT))
|
||||||
|
return true;
|
||||||
|
|
||||||
while (node) {
|
while (node) {
|
||||||
if (of_property_read_bool(node, "dma-coherent")) {
|
if (of_property_read_bool(node, "dma-coherent")) {
|
||||||
of_node_put(node);
|
of_node_put(node);
|
||||||
|
|
Loading…
Reference in a new issue