• Linus Walleij's avatar
    ARM: dts: integrator: Fix DMA ranges · 7bea67a9
    Linus Walleij authored
    A recent change affecting the behaviour of phys_to_dma() to
    actually require the device tree ranges to work unmasked a
    bug in the Integrator DMA ranges.
    
    The PL110 uses the CMA allocator to obtain coherent allocations
    from a dedicated 1MB video memory, leading to the following
    call chain:
    
    drm_gem_cma_create()
      dma_alloc_attrs()
        dma_alloc_from_dev_coherent()
          __dma_alloc_from_coherent()
            dma_get_device_base()
              phys_to_dma()
                translate_phys_to_dma()
    
    phys_to_dma() by way of translate_phys_to_dma() will nowadays not
    provide 1:1 mappings unless the ranges are properly defined in
    the device tree and reflected into the dev->dma_range_map.
    
    There is a bug in the device trees because the DMA ranges are
    incorrectly specified, and the patch uncovers this bug.
    
    Solution:
    
    - Fix the LB (logic bus) ranges to be 1-to-1 like they should
      have always been.
    - Provide a 1:1 dma-ranges attribute to the PL110.
    - Mark the PL110 display controller as DMA coherent.
    
    This makes the DMA ranges work right and makes the PL110
    framebuffer work again.
    
    Fixes: af6f23b8 ("ARM/dma-mapping: use the generic versions of dma_to_phys/phys_to_dma by default")
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20220926073311.1610568-1-linus.walleij@linaro.org'
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    7bea67a9
integratorap.dts 7.9 KB