• Robin Murphy's avatar
    of: Make of_dma_get_range() work on bus nodes · 951d4885
    Robin Murphy authored
    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: default avatarRobin Murphy <robin.murphy@arm.com>
    [robh: Allow for the bus child node to still be passed in]
    Signed-off-by: default avatarRob Herring <robh@kernel.org>
    Reviewed-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Reviewed-by: default avatarNicolas Saenz Julienne <nsaenzjulienne@suse.de>
    Tested-by: default avatarNicolas Saenz Julienne <nsaenzjulienne@suse.de>
    951d4885
address.c 25 KB