ARM: dts: Add Raspberry Pi Compute Module 4
authorStefan Wahren <stefan.wahren@i2se.com>
Sat, 7 Aug 2021 11:06:39 +0000 (13:06 +0200)
committerNicolas Saenz Julienne <nsaenz@kernel.org>
Wed, 6 Oct 2021 07:53:29 +0000 (09:53 +0200)
The Raspberry Pi Compute Module 4 (CM4) are SoMs which contain the
following:
  * BCM2711 quad core processor
  * up to 8 GB RAM
  * up to 32 GB eMMC
  * a GPIO expander
  * Gigabit PHY BCM54210PE
  * Wifi/BT module with internal and external antenna

The eMMC and the Wifi/BT module are optional.

Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Link: https://lore.kernel.org/r/1628334401-6577-9-git-send-email-stefan.wahren@i2se.com
Signed-off-by: Nicolas Saenz Julienne <nsaenz@kernel.org>
arch/arm/boot/dts/bcm2711-rpi-cm4.dtsi [new file with mode: 0644]

diff --git a/arch/arm/boot/dts/bcm2711-rpi-cm4.dtsi b/arch/arm/boot/dts/bcm2711-rpi-cm4.dtsi
new file mode 100644 (file)
index 0000000..a2954d4
--- /dev/null
@@ -0,0 +1,113 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+#include "bcm2711.dtsi"
+#include "bcm2711-rpi.dtsi"
+#include "bcm283x-rpi-wifi-bt.dtsi"
+
+/ {
+       compatible = "raspberrypi,4-compute-module", "brcm,bcm2711";
+
+       chosen {
+               /* 8250 auxiliary UART instead of pl011 */
+               stdout-path = "serial1:115200n8";
+       };
+
+       sd_io_1v8_reg: sd_io_1v8_reg {
+               compatible = "regulator-gpio";
+               regulator-name = "vdd-sd-io";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               regulator-always-on;
+               regulator-settling-time-us = <5000>;
+               gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>;
+               states = <1800000 0x1>,
+                        <3300000 0x0>;
+               status = "okay";
+       };
+
+       sd_vcc_reg: sd_vcc_reg {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc-sd";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&expgpio 6 GPIO_ACTIVE_HIGH>;
+       };
+};
+
+&bt {
+       shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
+};
+
+/* EMMC2 is used to drive the eMMC */
+&emmc2 {
+       bus-width = <8>;
+       vqmmc-supply = <&sd_io_1v8_reg>;
+       vmmc-supply = <&sd_vcc_reg>;
+       broken-cd;
+       /* Even the IP block is limited to 100 MHz
+        * this provides a throughput gain
+        */
+       mmc-hs200-1_8v;
+       status = "okay";
+};
+
+&expgpio {
+       gpio-line-names = "BT_ON",
+                         "WL_ON",
+                         "PWR_LED_OFF",
+                         "ANT1",
+                         "VDD_SD_IO_SEL",
+                         "CAM_GPIO",
+                         "SD_PWR_ON",
+                         "ANT2";
+
+       ant1: ant1-hog {
+               gpio-hog;
+               gpios = <3 GPIO_ACTIVE_HIGH>;
+               /* internal antenna enabled */
+               output-high;
+               line-name = "ant1";
+       };
+
+       ant2: ant2-hog {
+               gpio-hog;
+               gpios = <7 GPIO_ACTIVE_HIGH>;
+               /* external antenna disabled */
+               output-low;
+               line-name = "ant2";
+       };
+};
+
+&genet {
+       phy-handle = <&phy1>;
+       phy-mode = "rgmii-rxid";
+       status = "okay";
+};
+
+&genet_mdio {
+       phy1: ethernet-phy@0 {
+               /* No PHY interrupt */
+               reg = <0x0>;
+       };
+};
+
+/* uart0 communicates with the BT module */
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>;
+       uart-has-rtscts;
+};
+
+/* uart1 is mapped to the pin header */
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_gpio14>;
+       status = "okay";
+};
+
+&wifi_pwrseq {
+       reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
+};