]> git.baikalelectronics.ru Git - kernel.git/commit
of: Make of_dma_get_range() work on bus nodes
authorRobin Murphy <robin.murphy@arm.com>
Wed, 3 Jul 2019 17:42:20 +0000 (18:42 +0100)
committerRob Herring <robh@kernel.org>
Wed, 9 Oct 2019 17:30:09 +0000 (12:30 -0500)
commitf93614df9e20ba4710e467a476496ff2071800b6
tree209f582eeb8e951035c30c3eca45a102d597bff9
parentdbb6c0bc21bbc8db36bd2e4ae9724fed65ddf7c5
of: Make of_dma_get_range() work on bus nodes

Since the "dma-ranges" property is only valid for a node representing a
bus, of_dma_get_range() currently assumes the node passed in is a leaf
representing a device, and starts the walk from its parent. In cases
like PCI host controllers on typical FDT systems, however, where the PCI
endpoints are probed dynamically the initial leaf node represents the
'bus' itself, and this logic means we fail to consider any "dma-ranges"
describing the host bridge itself. Rework the logic such that
of_dma_get_range() also works correctly starting from a bus node
containing "dma-ranges".

While this does mean "dma-ranges" could incorrectly be in a device leaf
node, there isn't really any way in this function to ensure that a leaf
node is or isn't a bus node.

Signed-off-by: Robin Murphy <robin.murphy@arm.com>
[robh: Allow for the bus child node to still be passed in]
Signed-off-by: Rob Herring <robh@kernel.org>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Reviewed-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Tested-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
drivers/of/address.c