ARM: dts: bcm2711: Move emmc2 into its own bus
authorNicolas Saenz Julienne <nsaenzjulienne@suse.de>
Wed, 4 Mar 2020 13:24:37 +0000 (14:24 +0100)
committerNicolas Saenz Julienne <nsaenzjulienne@suse.de>
Mon, 9 Mar 2020 20:18:03 +0000 (21:18 +0100)
Depending on bcm2711's revision its emmc2 controller might have
different DMA constraints. Raspberry Pi 4's firmware will take care of
updating those, but only if a certain alias is found in the device tree.
So, move emmc2 into its own bus, so as not to pollute other devices with
dma-ranges changes and create the emmc2bus alias.

Based in Phil ELwell's downstream implementation.

Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Link: https://lore.kernel.org/r/20200304132437.20164-1-nsaenzjulienne@suse.de
arch/arm/boot/dts/bcm2711-rpi-4-b.dts
arch/arm/boot/dts/bcm2711.dtsi

index cb33852..e738de3 100644 (file)
@@ -20,6 +20,7 @@
        };
 
        aliases {
+               emmc2bus = &emmc2bus;
                ethernet0 = &genet;
        };
 
index d1e684d..a91cf68 100644 (file)
                        status = "disabled";
                };
 
+               hvs@7e400000 {
+                       interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
+               };
+       };
+
+       /*
+        * emmc2 has different DMA constraints based on SoC revisions. It was
+        * moved into its own bus, so as for RPi4's firmware to update them.
+        * The firmware will find whether the emmc2bus alias is defined, and if
+        * so, it'll edit the dma-ranges property below accordingly.
+        */
+       emmc2bus: emmc2bus {
+               compatible = "simple-bus";
+               #address-cells = <2>;
+               #size-cells = <1>;
+
+               ranges = <0x0 0x7e000000  0x0 0xfe000000  0x01800000>;
+               dma-ranges = <0x0 0xc0000000  0x0 0x00000000  0x40000000>;
+
                emmc2: emmc2@7e340000 {
                        compatible = "brcm,bcm2711-emmc2";
-                       reg = <0x7e340000 0x100>;
+                       reg = <0x0 0x7e340000 0x100>;
                        interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2711_CLOCK_EMMC2>;
                        status = "disabled";
                };
-
-               hvs@7e400000 {
-                       interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
-               };
        };
 
        arm-pmu {