mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-20 09:31:09 +00:00
ARM: dts: integrator: Fix DMA ranges
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: af6f23b88e
("ARM/dma-mapping: use the generic versions of dma_to_phys/phys_to_dma by default")
Signed-off-by: Linus 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: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
2653853e2a
commit
7bea67a994
2 changed files with 5 additions and 4 deletions
|
@ -249,6 +249,7 @@ display@1000000 {
|
|||
/* 640x480 16bpp @ 25.175MHz is 36827428 bytes/s */
|
||||
max-memory-bandwidth = <40000000>;
|
||||
memory-region = <&impd1_ram>;
|
||||
dma-ranges;
|
||||
|
||||
port@0 {
|
||||
#address-cells = <1>;
|
||||
|
|
|
@ -262,7 +262,7 @@ bus@c0000000 {
|
|||
lm0: bus@c0000000 {
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x00000000 0xc0000000 0x10000000>;
|
||||
dma-ranges = <0x00000000 0x80000000 0x10000000>;
|
||||
dma-ranges = <0x00000000 0xc0000000 0x10000000>;
|
||||
reg = <0xc0000000 0x10000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
@ -270,7 +270,7 @@ lm0: bus@c0000000 {
|
|||
lm1: bus@d0000000 {
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x00000000 0xd0000000 0x10000000>;
|
||||
dma-ranges = <0x00000000 0x80000000 0x10000000>;
|
||||
dma-ranges = <0x00000000 0xd0000000 0x10000000>;
|
||||
reg = <0xd0000000 0x10000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
@ -278,7 +278,7 @@ lm1: bus@d0000000 {
|
|||
lm2: bus@e0000000 {
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x00000000 0xe0000000 0x10000000>;
|
||||
dma-ranges = <0x00000000 0x80000000 0x10000000>;
|
||||
dma-ranges = <0x00000000 0xe0000000 0x10000000>;
|
||||
reg = <0xe0000000 0x10000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
@ -286,7 +286,7 @@ lm2: bus@e0000000 {
|
|||
lm3: bus@f0000000 {
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x00000000 0xf0000000 0x10000000>;
|
||||
dma-ranges = <0x00000000 0x80000000 0x10000000>;
|
||||
dma-ranges = <0x00000000 0xf0000000 0x10000000>;
|
||||
reg = <0xf0000000 0x10000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
|
Loading…
Reference in a new issue