From 424b091d9322896ead2d104e3b414805ff493652 Mon Sep 17 00:00:00 2001 From: Nicolas Saenz Julienne Date: Thu, 7 Nov 2019 10:56:11 +0100 Subject: [PATCH 1/6] arm64: mm: reserve CMA and crashkernel in ZONE_DMA32 commit bff3b04460a80f425442fe8e5c6ee8c3ebef611f upstream. With the introduction of ZONE_DMA in arm64 we moved the default CMA and crashkernel reservation into that area. This caused a regression on big machines that need big CMA and crashkernel reservations. Note that ZONE_DMA is only 1GB big. Restore the previous behavior as the wide majority of devices are OK with reserving these in ZONE_DMA32. The ones that need them in ZONE_DMA will configure it explicitly. Fixes: 1a8e1cef7603 ("arm64: use both ZONE_DMA and ZONE_DMA32") Reported-by: Qian Cai Signed-off-by: Nicolas Saenz Julienne Signed-off-by: Catalin Marinas --- arch/arm64/mm/init.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index ddd6a6ce158e1e..9ee7894d6414f2 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -91,7 +91,7 @@ static void __init reserve_crashkernel(void) if (crash_base == 0) { /* Current arm64 boot protocol requires 2MB alignment */ - crash_base = memblock_find_in_range(0, ARCH_LOW_ADDRESS_LIMIT, + crash_base = memblock_find_in_range(0, arm64_dma32_phys_limit, crash_size, SZ_2M); if (crash_base == 0) { pr_warn("cannot allocate crashkernel (size:0x%llx)\n", @@ -459,7 +459,7 @@ void __init arm64_memblock_init(void) high_memory = __va(memblock_end_of_DRAM() - 1) + 1; - dma_contiguous_reserve(arm64_dma_phys_limit ? : arm64_dma32_phys_limit); + dma_contiguous_reserve(arm64_dma32_phys_limit); } void __init bootmem_init(void) From d68e0fdea70df54774ff7f2fa6d35eeddb88a7b8 Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Tue, 3 Dec 2019 12:10:13 +0000 Subject: [PATCH 2/6] arm64: mm: Fix initialisation of DMA zones on non-NUMA systems commit 93b90414c33f59b7960bc8d607da0ce83377e021 upstream. John reports that the recently merged commit 1a8e1cef7603 ("arm64: use both ZONE_DMA and ZONE_DMA32") breaks the boot on his DB845C board: | Booting Linux on physical CPU 0x0000000000 [0x517f803c] | Linux version 5.4.0-mainline-10675-g957a03b9e38f | Machine model: Thundercomm Dragonboard 845c | [...] | Built 1 zonelists, mobility grouping on. Total pages: -188245 | Kernel command line: earlycon | firmware_class.path=/vendor/firmware/ androidboot.hardware=db845c | init=/init androidboot.boot_devices=soc/1d84000.ufshc | printk.devkmsg=on buildvariant=userdebug root=/dev/sda2 | androidboot.bootdevice=1d84000.ufshc androidboot.serialno=c4e1189c | androidboot.baseband=sda | msm_drm.dsi_display0=dsi_lt9611_1080_video_display: | androidboot.slot_suffix=_a skip_initramfs rootwait ro init=/init | | This is because, when CONFIG_NUMA=n, zone_sizes_init() fails to handle memblocks that fall entirely within the ZONE_DMA region and erroneously ends up trying to add a negatively-sized region into the following ZONE_DMA32, which is later interpreted as a large unsigned region by the core MM code. Rework the non-NUMA implementation of zone_sizes_init() so that the start address of the memblock being processed is adjusted according to the end of the previous zone, which is then range-checked before updating the hole information of subsequent zones. Cc: Nicolas Saenz Julienne Cc: Christoph Hellwig Cc: Bjorn Andersson Link: https://lore.kernel.org/lkml/CALAqxLVVcsmFrDKLRGRq7GewcW405yTOxG=KR3csVzQ6bXutkA@mail.gmail.com Fixes: 1a8e1cef7603 ("arm64: use both ZONE_DMA and ZONE_DMA32") Reported-by: John Stultz Tested-by: John Stultz Signed-off-by: Will Deacon Signed-off-by: Catalin Marinas --- arch/arm64/mm/init.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9ee7894d6414f2..9af647dafa5135 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -214,15 +214,14 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max) { struct memblock_region *reg; unsigned long zone_size[MAX_NR_ZONES], zhole_size[MAX_NR_ZONES]; - unsigned long max_dma32 = min; - unsigned long max_dma = min; + unsigned long __maybe_unused max_dma, max_dma32; memset(zone_size, 0, sizeof(zone_size)); + max_dma = max_dma32 = min; #ifdef CONFIG_ZONE_DMA - max_dma = PFN_DOWN(arm64_dma_phys_limit); + max_dma = max_dma32 = PFN_DOWN(arm64_dma_phys_limit); zone_size[ZONE_DMA] = max_dma - min; - max_dma32 = max_dma; #endif #ifdef CONFIG_ZONE_DMA32 max_dma32 = PFN_DOWN(arm64_dma32_phys_limit); @@ -236,25 +235,23 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max) unsigned long start = memblock_region_memory_base_pfn(reg); unsigned long end = memblock_region_memory_end_pfn(reg); - if (start >= max) - continue; #ifdef CONFIG_ZONE_DMA - if (start < max_dma) { - unsigned long dma_end = min_not_zero(end, max_dma); + if (start >= min && start < max_dma) { + unsigned long dma_end = min(end, max_dma); zhole_size[ZONE_DMA] -= dma_end - start; + start = dma_end; } #endif #ifdef CONFIG_ZONE_DMA32 - if (start < max_dma32) { + if (start >= max_dma && start < max_dma32) { unsigned long dma32_end = min(end, max_dma32); - unsigned long dma32_start = max(start, max_dma); - zhole_size[ZONE_DMA32] -= dma32_end - dma32_start; + zhole_size[ZONE_DMA32] -= dma32_end - start; + start = dma32_end; } #endif - if (end > max_dma32) { + if (start >= max_dma32 && start < max) { unsigned long normal_end = min(end, max); - unsigned long normal_start = max(start, max_dma32); - zhole_size[ZONE_NORMAL] -= normal_end - normal_start; + zhole_size[ZONE_NORMAL] -= normal_end - start; } } From a8ada11e5c0cf28244c938be020fc4d1249314a1 Mon Sep 17 00:00:00 2001 From: Nicolas Saenz Julienne Date: Fri, 10 Jan 2020 18:29:35 +0100 Subject: [PATCH 3/6] ARM: dts: bcm283x: Unify CMA configuration commit c5a1e5375d19bd4001c59dc5d482ac5b1ba51cbf upstream. With the introduction of the Raspberry Pi 4 we were forced to explicitly configure CMA's location, since arm64 defaults it into the ZONE_DMA32 memory area, which is not good enough to perform DMA operations on that device. To bypass this limitation a dedicated CMA DT node was created, explicitly indicating the acceptable memory range and size. That said, compatibility between boards is a must on the Raspberry Pi ecosystem so this creates a common CMA DT node so as for DT overlays to be able to update CMA's properties regardless of the board being used. Signed-off-by: Nicolas Saenz Julienne Reviewed-by: Phil Elwell Signed-off-by: Florian Fainelli --- arch/arm/boot/dts/bcm2711.dtsi | 32 +++++++++++++------------------- arch/arm/boot/dts/bcm283x.dtsi | 13 +++++++++++++ 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/arch/arm/boot/dts/bcm2711.dtsi b/arch/arm/boot/dts/bcm2711.dtsi index 3ecff12736adc9..72cbd23c9796de 100644 --- a/arch/arm/boot/dts/bcm2711.dtsi +++ b/arch/arm/boot/dts/bcm2711.dtsi @@ -12,25 +12,6 @@ interrupt-parent = <&gicv2>; - reserved-memory { - #address-cells = <2>; - #size-cells = <1>; - ranges; - - /* - * arm64 reserves the CMA by default somewhere in ZONE_DMA32, - * that's not good enough for the BCM2711 as some devices can - * only address the lower 1G of memory (ZONE_DMA). - */ - linux,cma { - compatible = "shared-dma-pool"; - size = <0x2000000>; /* 32MB */ - alloc-ranges = <0x0 0x00000000 0x40000000>; - reusable; - linux,cma-default; - }; - }; - vc4: gpu { compatible = "brcm,bcm2711-vc5"; status = "disabled"; @@ -992,6 +973,19 @@ }; }; +&rmem { + #address-cells = <2>; +}; + +&cma { + /* + * arm64 reserves the CMA by default somewhere in ZONE_DMA32, + * that's not good enough for the BCM2711 as some devices can + * only address the lower 1G of memory (ZONE_DMA). + */ + alloc-ranges = <0x0 0x00000000 0x40000000>; +}; + &i2c0 { compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c"; interrupts = ; diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi index 839491628e87b3..6128baed83c244 100644 --- a/arch/arm/boot/dts/bcm283x.dtsi +++ b/arch/arm/boot/dts/bcm283x.dtsi @@ -30,6 +30,19 @@ stdout-path = "serial0:115200n8"; }; + rmem: reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + cma: linux,cma { + compatible = "shared-dma-pool"; + size = <0x4000000>; /* 64MB */ + reusable; + linux,cma-default; + }; + }; + thermal-zones { cpu_thermal: cpu-thermal { polling-delay-passive = <0>; From 2d89ca3f1a24c131e82437a74ea8e0cc4b8a5774 Mon Sep 17 00:00:00 2001 From: Nicolas Saenz Julienne Date: Fri, 10 Jan 2020 18:19:33 +0100 Subject: [PATCH 4/6] dma-contiguous: CMA: give precedence to cmdline commit 8c8c5a4994a306c217fd061cbfc5903399fd4c1c upstream. Although the device tree might contain a reserved-memory DT node dedicated as the default CMA pool, users might want to change CMA's parameters using the kernel command line for debugging purposes and whatnot. Honor this by bypassing the reserved memory CMA setup, which will ultimately end up freeing the memblock and allow the command line CMA configuration routine to run. Signed-off-by: Nicolas Saenz Julienne Reviewed-by: Phil Elwell Signed-off-by: Christoph Hellwig --- kernel/dma/contiguous.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/kernel/dma/contiguous.c b/kernel/dma/contiguous.c index 69cfb4345388c3..8477bf549dc918 100644 --- a/kernel/dma/contiguous.c +++ b/kernel/dma/contiguous.c @@ -301,9 +301,16 @@ static int __init rmem_cma_setup(struct reserved_mem *rmem) phys_addr_t align = PAGE_SIZE << max(MAX_ORDER - 1, pageblock_order); phys_addr_t mask = align - 1; unsigned long node = rmem->fdt_node; + bool default_cma = of_get_flat_dt_prop(node, "linux,cma-default", NULL); struct cma *cma; int err; + if (size_cmdline != -1 && default_cma) { + pr_info("Reserved memory: bypass %s node, using cmdline CMA params instead\n", + rmem->name); + return -EBUSY; + } + if (!of_get_flat_dt_prop(node, "reusable", NULL) || of_get_flat_dt_prop(node, "no-map", NULL)) return -EINVAL; @@ -321,7 +328,7 @@ static int __init rmem_cma_setup(struct reserved_mem *rmem) /* Architecture specific contiguous memory fixup. */ dma_contiguous_early_fixup(rmem->base, rmem->size); - if (of_get_flat_dt_prop(node, "linux,cma-default", NULL)) + if (default_cma) dma_contiguous_set_default(cma); rmem->ops = &rmem_cma_ops; From 2a64d31c91950a00ea2b98dbc9db1313b9c37971 Mon Sep 17 00:00:00 2001 From: Nicolas Saenz Julienne Date: Thu, 2 Apr 2020 19:22:46 +0200 Subject: [PATCH 5/6] ARM: dts: Use upstream CMA configuration Now that the kernel command line has precedence over the device tree, we can use the upstream CMA setup without breaking backward compatibility. Signed-off-by: Nicolas Saenz Julienne --- arch/arm/boot/dts/bcm2711-rpi-4-b.dts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts index 83a8431d9e5fd3..996112381eefbc 100644 --- a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts +++ b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts @@ -195,7 +195,7 @@ / { chosen { - bootargs = "coherent_pool=1M 8250.nr_uarts=1 cma=64M"; + bootargs = "coherent_pool=1M 8250.nr_uarts=1"; }; aliases { @@ -215,10 +215,6 @@ }; /delete-node/ wifi-pwrseq; - - reserved-memory { - /delete-node/ linux,cma; - }; }; &mmcnr { From 04fdae97c4fe9aa19162676ea5a7098c24019c6d Mon Sep 17 00:00:00 2001 From: Nicolas Saenz Julienne Date: Thu, 2 Apr 2020 19:54:33 +0200 Subject: [PATCH 6/6] ARM: dts: overlays: Unify overlay CMA handling Now that we don't have to abuse the kernel command line to change CMA's size we can clean-up and centralize CMA usage in overlays. A new file, cma-overlay.dts is created to be used as a standalone overlay or included on other overlays. All CMA users are converted to this scheme. Ultimately upstream-overlay.dts is also updated to use the default CMA size provided by upstream. Signed-off-by: Nicolas Saenz Julienne --- arch/arm/boot/dts/overlays/Makefile | 1 + arch/arm/boot/dts/overlays/README | 19 +++++ arch/arm/boot/dts/overlays/cma-overlay.dts | 32 ++++++++ .../boot/dts/overlays/upstream-overlay.dts | 56 ++++--------- .../dts/overlays/upstream-pi4-overlay.dts | 66 +++++---------- .../dts/overlays/vc4-fkms-v3d-overlay.dts | 51 ++---------- .../boot/dts/overlays/vc4-kms-v3d-overlay.dts | 66 ++++----------- .../dts/overlays/vc4-kms-v3d-pi4-overlay.dts | 80 +++++-------------- 8 files changed, 129 insertions(+), 242 deletions(-) create mode 100644 arch/arm/boot/dts/overlays/cma-overlay.dts diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile index 3f60596cdbeb2c..96f96c98561e5c 100644 --- a/arch/arm/boot/dts/overlays/Makefile +++ b/arch/arm/boot/dts/overlays/Makefile @@ -28,6 +28,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ audiosense-pi.dtbo \ audremap.dtbo \ balena-fin.dtbo \ + cma.dtbo \ dht11.dtbo \ dionaudio-loco.dtbo \ dionaudio-loco-v2.dtbo \ diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README index 38459f67ddcf7d..1df13b1fbc513c 100644 --- a/arch/arm/boot/dts/overlays/README +++ b/arch/arm/boot/dts/overlays/README @@ -554,6 +554,19 @@ Info: This overlay is now deprecated - see i2c-sensor Load: +Name: cma +Info: Set custom CMA sizes, only use if you know what you are doing, might + clash with other overlays like vc4-fkms-v3d and vc4-kms-v3d. +Load: dtoverlay=cma,= +Params: cma-256 CMA is 256MB (needs 1GB) + cma-192 CMA is 192MB (needs 1GB) + cma-128 CMA is 128MB + cma-96 CMA is 96MB + cma-64 CMA is 64MB + cma-size CMA size in bytes, 4MB aligned + cma-default Use upstream's default value + + Name: dht11 Info: Overlay for the DHT11/DHT21/DHT22 humidity/temperature sensors Also sometimes found with the part number(s) AM230x. @@ -2675,6 +2688,8 @@ Params: cma-256 CMA is 256MB (needs 1GB) cma-128 CMA is 128MB cma-96 CMA is 96MB cma-64 CMA is 64MB + cma-size CMA size in bytes, 4MB aligned + cma-default Use upstream's default value Name: vc4-kms-kippah-7inch @@ -2692,6 +2707,8 @@ Params: cma-256 CMA is 256MB (needs 1GB) cma-128 CMA is 128MB cma-96 CMA is 96MB cma-64 CMA is 64MB + cma-size CMA size in bytes, 4MB aligned + cma-default Use upstream's default value audio Enable or disable audio over HDMI (default "on") @@ -2703,6 +2720,8 @@ Params: cma-256 CMA is 256MB cma-128 CMA is 128MB cma-96 CMA is 96MB cma-64 CMA is 64MB + cma-size CMA size in bytes, 4MB aligned + cma-default Use upstream's default value audio Enable or disable audio over HDMI0 (default "on") audio1 Enable or disable audio over HDMI1 (default diff --git a/arch/arm/boot/dts/overlays/cma-overlay.dts b/arch/arm/boot/dts/overlays/cma-overlay.dts new file mode 100644 index 00000000000000..4fbdf161672e3d --- /dev/null +++ b/arch/arm/boot/dts/overlays/cma-overlay.dts @@ -0,0 +1,32 @@ +/* + * cma.dts + */ + +/dts-v1/; +/plugin/; + +/ { + compatible = "brcm,bcm2835"; + + fragment@0 { + target = <&cma>; + frag0: __overlay__ { + /* + * The default size when using this overlay is 256 MB + * and should be kept as is for backwards + * compatibility. + */ + size = <0x10000000>; + }; + }; + + __overrides__ { + cma-256 = <&frag0>,"size:0=",<0x10000000>; + cma-192 = <&frag0>,"size:0=",<0xC000000>; + cma-128 = <&frag0>,"size:0=",<0x8000000>; + cma-96 = <&frag0>,"size:0=",<0x6000000>; + cma-64 = <&frag0>,"size:0=",<0x4000000>; + cma-size = <&frag0>,"size:0"; /* in bytes, 4MB aligned */ + cma-default = <0>,"-0"; + }; +}; diff --git a/arch/arm/boot/dts/overlays/upstream-overlay.dts b/arch/arm/boot/dts/overlays/upstream-overlay.dts index 96837d962188cb..4d46790d81c9cb 100644 --- a/arch/arm/boot/dts/overlays/upstream-overlay.dts +++ b/arch/arm/boot/dts/overlays/upstream-overlay.dts @@ -1,4 +1,4 @@ -// redo: ovmerge -c vc4-kms-v3d-overlay.dts,cma-96 dwc2-overlay.dts,dr_mode=otg +// redo: ovmerge -c vc4-kms-v3d-overlay.dts,cma-default dwc2-overlay.dts,dr_mode=otg /dts-v1/; /plugin/; @@ -8,114 +8,90 @@ / { compatible = "brcm,bcm2835"; fragment@0 { - target-path = "/chosen"; + target = <&cma>; __dormant__ { - bootargs = "cma=256M"; + size = <0x10000000>; }; }; fragment@1 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=192M"; - }; - }; - fragment@2 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=128M"; - }; - }; - fragment@3 { - target-path = "/chosen"; - __overlay__ { - bootargs = "cma=96M"; - }; - }; - fragment@4 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=64M"; - }; - }; - fragment@5 { target = <&i2c2>; __overlay__ { status = "okay"; }; }; - fragment@6 { + fragment@2 { target = <&fb>; __overlay__ { status = "disabled"; }; }; - fragment@7 { + fragment@3 { target = <&pixelvalve0>; __overlay__ { status = "okay"; }; }; - fragment@8 { + fragment@4 { target = <&pixelvalve1>; __overlay__ { status = "okay"; }; }; - fragment@9 { + fragment@5 { target = <&pixelvalve2>; __overlay__ { status = "okay"; }; }; - fragment@10 { + fragment@6 { target = <&hvs>; __overlay__ { status = "okay"; }; }; - fragment@11 { + fragment@7 { target = <&hdmi>; __overlay__ { status = "okay"; }; }; - fragment@12 { + fragment@8 { target = <&v3d>; __overlay__ { status = "okay"; }; }; - fragment@13 { + fragment@9 { target = <&vc4>; __overlay__ { status = "okay"; }; }; - fragment@14 { + fragment@10 { target = <&clocks>; __overlay__ { claim-clocks = ; }; }; - fragment@15 { + fragment@11 { target = <&vec>; __overlay__ { status = "okay"; }; }; - fragment@16 { + fragment@12 { target = <&txp>; __overlay__ { status = "okay"; }; }; - fragment@17 { + fragment@13 { target = <&hdmi>; __dormant__ { dmas; }; }; - fragment@18 { + fragment@14 { target = <&usb>; #address-cells = <1>; #size-cells = <1>; diff --git a/arch/arm/boot/dts/overlays/upstream-pi4-overlay.dts b/arch/arm/boot/dts/overlays/upstream-pi4-overlay.dts index 2db343ef2237f6..428aa5dcc38f04 100644 --- a/arch/arm/boot/dts/overlays/upstream-pi4-overlay.dts +++ b/arch/arm/boot/dts/overlays/upstream-pi4-overlay.dts @@ -8,144 +8,120 @@ / { compatible = "brcm,bcm2835"; fragment@0 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=256M"; - }; - }; - fragment@1 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=192M"; - }; - }; - fragment@2 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=128M"; - }; - }; - fragment@3 { - target-path = "/chosen"; + target = <&cma>; __overlay__ { - bootargs = "cma=96M"; + size = <100663296>; }; }; - fragment@4 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=64M"; - }; - }; - fragment@5 { + fragment@1 { target = <&ddc0>; __overlay__ { status = "okay"; }; }; - fragment@6 { + fragment@2 { target = <&ddc1>; __overlay__ { status = "okay"; }; }; - fragment@7 { + fragment@3 { target = <&hdmi0>; __overlay__ { status = "okay"; }; }; - fragment@8 { + fragment@4 { target = <&hdmi1>; __overlay__ { status = "okay"; }; }; - fragment@9 { + fragment@5 { target = <&hvs>; __overlay__ { status = "okay"; }; }; - fragment@10 { + fragment@6 { target = <&pixelvalve0>; __overlay__ { status = "okay"; }; }; - fragment@11 { + fragment@7 { target = <&pixelvalve1>; __overlay__ { status = "okay"; }; }; - fragment@12 { + fragment@8 { target = <&pixelvalve2>; __overlay__ { status = "okay"; }; }; - fragment@13 { + fragment@9 { target = <&pixelvalve3>; __overlay__ { status = "okay"; }; }; - fragment@14 { + fragment@10 { target = <&pixelvalve4>; __overlay__ { status = "okay"; }; }; - fragment@15 { + fragment@11 { target = <&v3d>; __overlay__ { status = "okay"; }; }; - fragment@16 { + fragment@12 { target = <&vc4>; __overlay__ { status = "okay"; }; }; - fragment@17 { + fragment@13 { target = <&txp>; __overlay__ { status = "okay"; }; }; - fragment@18 { + fragment@14 { target = <&fb>; __overlay__ { status = "disabled"; }; }; - fragment@19 { + fragment@15 { target = <&firmwarekms>; __overlay__ { status = "disabled"; }; }; - fragment@20 { + fragment@16 { target = <&vec>; __overlay__ { status = "disabled"; }; }; - fragment@21 { + fragment@17 { target = <&hdmi0>; __dormant__ { dmas; }; }; - fragment@22 { + fragment@18 { target = <&hdmi1>; __dormant__ { dmas; }; }; - fragment@23 { + fragment@19 { target = <&usb>; #address-cells = <1>; #size-cells = <1>; diff --git a/arch/arm/boot/dts/overlays/vc4-fkms-v3d-overlay.dts b/arch/arm/boot/dts/overlays/vc4-fkms-v3d-overlay.dts index d9af97c8414f03..ca344492bed861 100644 --- a/arch/arm/boot/dts/overlays/vc4-fkms-v3d-overlay.dts +++ b/arch/arm/boot/dts/overlays/vc4-fkms-v3d-overlay.dts @@ -5,77 +5,36 @@ /dts-v1/; /plugin/; +#include "cma-overlay.dts" + / { compatible = "brcm,bcm2835"; - fragment@0 { - target-path = "/chosen"; - __overlay__ { - bootargs = "cma=256M"; - }; - }; - fragment@1 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=192M"; - }; - }; - - fragment@2 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=128M"; - }; - }; - - fragment@3 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=96M"; - }; - }; - - fragment@4 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=64M"; - }; - }; - - fragment@5 { target = <&fb>; __overlay__ { status = "disabled"; }; }; - fragment@6 { + fragment@2 { target = <&firmwarekms>; __overlay__ { status = "okay"; }; }; - fragment@7 { + fragment@3 { target = <&v3d>; __overlay__ { status = "okay"; }; }; - fragment@8 { + fragment@4 { target = <&vc4>; __overlay__ { status = "okay"; }; }; - - __overrides__ { - cma-256 = <0>,"+0-1-2-3-4"; - cma-192 = <0>,"-0+1-2-3-4"; - cma-128 = <0>,"-0-1+2-3-4"; - cma-96 = <0>,"-0-1-2+3-4"; - cma-64 = <0>,"-0-1-2-3+4"; - }; }; diff --git a/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts index c5f687e8bcb9a8..b40aa1d8f432b3 100644 --- a/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts +++ b/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts @@ -7,108 +7,75 @@ #include +#include "cma-overlay.dts" + / { compatible = "brcm,bcm2835"; - fragment@0 { - target-path = "/chosen"; - __overlay__ { - bootargs = "cma=256M"; - }; - }; - fragment@1 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=192M"; - }; - }; - - fragment@2 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=128M"; - }; - }; - - fragment@3 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=96M"; - }; - }; - - fragment@4 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=64M"; - }; - }; - - fragment@5 { target = <&i2c2>; __overlay__ { status = "okay"; }; }; - fragment@6 { + fragment@2 { target = <&fb>; __overlay__ { status = "disabled"; }; }; - fragment@7 { + fragment@3 { target = <&pixelvalve0>; __overlay__ { status = "okay"; }; }; - fragment@8 { + fragment@4 { target = <&pixelvalve1>; __overlay__ { status = "okay"; }; }; - fragment@9 { + fragment@5 { target = <&pixelvalve2>; __overlay__ { status = "okay"; }; }; - fragment@10 { + fragment@6 { target = <&hvs>; __overlay__ { status = "okay"; }; }; - fragment@11 { + fragment@7 { target = <&hdmi>; __overlay__ { status = "okay"; }; }; - fragment@12 { + fragment@8 { target = <&v3d>; __overlay__ { status = "okay"; }; }; - fragment@13 { + fragment@9 { target = <&vc4>; __overlay__ { status = "okay"; }; }; - fragment@14 { + fragment@10 { target = <&clocks>; __overlay__ { claim-clocks = < @@ -120,21 +87,21 @@ }; }; - fragment@15 { + fragment@11 { target = <&vec>; __overlay__ { status = "okay"; }; }; - fragment@16 { + fragment@12 { target = <&txp>; __overlay__ { status = "okay"; }; }; - fragment@17 { + fragment@13 { target = <&hdmi>; __dormant__ { dmas; @@ -142,11 +109,6 @@ }; __overrides__ { - cma-256 = <0>,"+0-1-2-3-4"; - cma-192 = <0>,"-0+1-2-3-4"; - cma-128 = <0>,"-0-1+2-3-4"; - cma-96 = <0>,"-0-1-2+3-4"; - cma-64 = <0>,"-0-1-2-3+4"; audio = <0>,"!17"; }; }; diff --git a/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts index 7d59a30a3662a4..134ad9ecbd4ab8 100644 --- a/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts +++ b/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts @@ -7,164 +7,131 @@ #include +#include "cma-overlay.dts" + / { compatible = "brcm,bcm2835"; - fragment@0 { - target-path = "/chosen"; - __overlay__ { - bootargs = "cma=256M"; - }; - }; - fragment@1 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=192M"; - }; - }; - - fragment@2 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=128M"; - }; - }; - - fragment@3 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=96M"; - }; - }; - - fragment@4 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=64M"; - }; - }; - - fragment@5 { target = <&ddc0>; __overlay__ { status = "okay"; }; }; - fragment@6 { + fragment@2 { target = <&ddc1>; __overlay__ { status = "okay"; }; }; - fragment@7 { + fragment@3 { target = <&hdmi0>; __overlay__ { status = "okay"; }; }; - fragment@8 { + fragment@4 { target = <&hdmi1>; __overlay__ { status = "okay"; }; }; - fragment@9 { + fragment@5 { target = <&hvs>; __overlay__ { status = "okay"; }; }; - fragment@10 { + fragment@6 { target = <&pixelvalve0>; __overlay__ { status = "okay"; }; }; - fragment@11 { + fragment@7 { target = <&pixelvalve1>; __overlay__ { status = "okay"; }; }; - fragment@12 { + fragment@8 { target = <&pixelvalve2>; __overlay__ { status = "okay"; }; }; - fragment@13 { + fragment@9 { target = <&pixelvalve3>; __overlay__ { status = "okay"; }; }; - fragment@14 { + fragment@10 { target = <&pixelvalve4>; __overlay__ { status = "okay"; }; }; - fragment@15 { + fragment@11 { target = <&v3d>; __overlay__ { status = "okay"; }; }; - fragment@16 { + fragment@12 { target = <&vc4>; __overlay__ { status = "okay"; }; }; - fragment@17 { + fragment@13 { target = <&txp>; __overlay__ { status = "okay"; }; }; - fragment@18 { + fragment@14 { target = <&fb>; __overlay__ { status = "disabled"; }; }; - fragment@19 { + fragment@15 { target = <&firmwarekms>; __overlay__ { status = "disabled"; }; }; - fragment@20 { + fragment@16 { target = <&vec>; __overlay__ { status = "disabled"; }; }; - fragment@21 { + fragment@17 { target = <&hdmi0>; __dormant__ { dmas; }; }; - fragment@22 { + fragment@18 { target = <&hdmi1>; __dormant__ { dmas; @@ -172,12 +139,7 @@ }; __overrides__ { - cma-256 = <0>,"+0-1-2-3-4"; - cma-192 = <0>,"-0+1-2-3-4"; - cma-128 = <0>,"-0-1+2-3-4"; - cma-96 = <0>,"-0-1-2+3-4"; - cma-64 = <0>,"-0-1-2-3+4"; - audio = <0>,"!21"; - audio1 = <0>,"!22"; + audio = <0>,"!17"; + audio1 = <0>,"!18"; }; };