From c16814e75e861bbfcec3f7e8d84da6e1af9853dc Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@freedombone.net>
Date: Sat, 19 Jan 2019 21:57:48 +0000
Subject: [PATCH] Create rock64 device tree blob

---
 image_build/dts/rk3328-rock64.dts    | 355 +++++++++++++++++++++++++++
 src/freedombone-image-hardware-setup |   6 +-
 2 files changed, 360 insertions(+), 1 deletion(-)
 create mode 100644 image_build/dts/rk3328-rock64.dts

diff --git a/image_build/dts/rk3328-rock64.dts b/image_build/dts/rk3328-rock64.dts
new file mode 100644
index 000000000..7abe8379f
--- /dev/null
+++ b/image_build/dts/rk3328-rock64.dts
@@ -0,0 +1,355 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2017 PINE64
+ */
+
+/dts-v1/;
+#include "rk3328.dtsi"
+
+/ {
+    model = "Pine64 Rock64";
+    compatible = "pine64,rock64", "rockchip,rk3328";
+
+    chosen {
+        stdout-path = "serial2:1500000n8";
+    };
+
+    gmac_clkin: external-gmac-clock {
+        compatible = "fixed-clock";
+        clock-frequency = <125000000>;
+        clock-output-names = "gmac_clkin";
+        #clock-cells = <0>;
+    };
+
+    vcc_sd: sdmmc-regulator {
+        compatible = "regulator-fixed";
+        gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&sdmmc0m1_gpio>;
+        regulator-name = "vcc_sd";
+        regulator-min-microvolt = <3300000>;
+        regulator-max-microvolt = <3300000>;
+        vin-supply = <&vcc_io>;
+    };
+
+    vcc_host_5v: vcc-host-5v-regulator {
+        compatible = "regulator-fixed";
+        enable-active-high;
+        gpio = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&usb30_host_drv>;
+        regulator-name = "vcc_host_5v";
+        regulator-always-on;
+        vin-supply = <&vcc_sys>;
+    };
+
+    vcc_host1_5v: vcc_otg_5v: vcc-host1-5v-regulator {
+        compatible = "regulator-fixed";
+        enable-active-high;
+        gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&usb20_host_drv>;
+        regulator-name = "vcc_host1_5v";
+        regulator-always-on;
+        vin-supply = <&vcc_sys>;
+    };
+
+    vcc_sys: vcc-sys {
+        compatible = "regulator-fixed";
+        regulator-name = "vcc_sys";
+        regulator-always-on;
+        regulator-boot-on;
+        regulator-min-microvolt = <5000000>;
+        regulator-max-microvolt = <5000000>;
+    };
+
+    sound {
+        compatible = "audio-graph-card";
+        label = "rockchip,rk3328";
+        dais = <&spdif_p0>;
+    };
+
+    spdif-dit {
+        compatible = "linux,spdif-dit";
+        #sound-dai-cells = <0>;
+
+        port {
+            dit_p0_0: endpoint {
+                remote-endpoint = <&spdif_p0_0>;
+            };
+        };
+    };
+};
+
+&cpu0 {
+    cpu-supply = <&vdd_arm>;
+};
+
+&cpu1 {
+    cpu-supply = <&vdd_arm>;
+};
+
+&cpu2 {
+    cpu-supply = <&vdd_arm>;
+};
+
+&cpu3 {
+    cpu-supply = <&vdd_arm>;
+};
+
+&emmc {
+    bus-width = <8>;
+    cap-mmc-highspeed;
+    mmc-hs200-1_8v;
+    non-removable;
+    pinctrl-names = "default";
+    pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>;
+    vmmc-supply = <&vcc_io>;
+    vqmmc-supply = <&vcc18_emmc>;
+    status = "okay";
+};
+
+&gmac2io {
+    assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
+    assigned-clock-parents = <&gmac_clkin>, <&gmac_clkin>;
+    clock_in_out = "input";
+    phy-supply = <&vcc_io>;
+    phy-mode = "rgmii";
+    pinctrl-names = "default";
+    pinctrl-0 = <&rgmiim1_pins>;
+    snps,force_thresh_dma_mode;
+    snps,reset-gpio = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>;
+    snps,reset-active-low;
+    snps,reset-delays-us = <0 10000 50000>;
+    tx_delay = <0x24>;
+    rx_delay = <0x18>;
+    status = "okay";
+};
+
+&hdmi {
+    status = "okay";
+};
+
+&hdmiphy {
+    status = "okay";
+};
+
+&i2c1 {
+    status = "okay";
+
+    rk805: rk805@18 {
+        compatible = "rockchip,rk805";
+        reg = <0x18>;
+        interrupt-parent = <&gpio2>;
+        interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
+        #clock-cells = <1>;
+        clock-output-names = "xin32k", "rk805-clkout2";
+        pinctrl-names = "default";
+        pinctrl-0 = <&pmic_int_l>;
+        rockchip,system-power-controller;
+        wakeup-source;
+
+        vcc1-supply = <&vcc_sys>;
+        vcc2-supply = <&vcc_sys>;
+        vcc3-supply = <&vcc_sys>;
+        vcc4-supply = <&vcc_sys>;
+        vcc5-supply = <&vcc_io>;
+        vcc6-supply = <&vcc_sys>;
+
+        regulators {
+            vdd_logic: DCDC_REG1 {
+                regulator-name = "vdd_logic";
+                regulator-min-microvolt = <712500>;
+                regulator-max-microvolt = <1450000>;
+                regulator-ramp-delay = <12500>;
+                regulator-always-on;
+                regulator-boot-on;
+                regulator-state-mem {
+                    regulator-on-in-suspend;
+                    regulator-suspend-microvolt = <1000000>;
+                };
+            };
+
+            vdd_arm: DCDC_REG2 {
+                regulator-name = "vdd_arm";
+                regulator-min-microvolt = <712500>;
+                regulator-max-microvolt = <1450000>;
+                regulator-ramp-delay = <12500>;
+                regulator-always-on;
+                regulator-boot-on;
+                regulator-state-mem {
+                    regulator-on-in-suspend;
+                    regulator-suspend-microvolt = <950000>;
+                };
+            };
+
+            vcc_ddr: DCDC_REG3 {
+                regulator-name = "vcc_ddr";
+                regulator-always-on;
+                regulator-boot-on;
+                regulator-state-mem {
+                    regulator-on-in-suspend;
+                };
+            };
+
+            vcc_io: DCDC_REG4 {
+                regulator-name = "vcc_io";
+                regulator-min-microvolt = <3300000>;
+                regulator-max-microvolt = <3300000>;
+                regulator-always-on;
+                regulator-boot-on;
+                regulator-state-mem {
+                    regulator-on-in-suspend;
+                    regulator-suspend-microvolt = <3300000>;
+                };
+            };
+
+            vcc_18: LDO_REG1 {
+                regulator-name = "vdd_18";
+                regulator-min-microvolt = <1800000>;
+                regulator-max-microvolt = <1800000>;
+                regulator-always-on;
+                regulator-boot-on;
+                regulator-state-mem {
+                    regulator-on-in-suspend;
+                    regulator-suspend-microvolt = <1800000>;
+                };
+            };
+
+            vcc18_emmc: LDO_REG2 {
+                regulator-name = "vcc_18emmc";
+                regulator-min-microvolt = <1800000>;
+                regulator-max-microvolt = <1800000>;
+                regulator-always-on;
+                regulator-boot-on;
+                regulator-state-mem {
+                    regulator-on-in-suspend;
+                    regulator-suspend-microvolt = <1800000>;
+                };
+            };
+
+            vdd_10: LDO_REG3 {
+                regulator-name = "vdd_10";
+                regulator-min-microvolt = <1000000>;
+                regulator-max-microvolt = <1000000>;
+                regulator-always-on;
+                regulator-boot-on;
+                regulator-state-mem {
+                    regulator-on-in-suspend;
+                    regulator-suspend-microvolt = <1000000>;
+                };
+            };
+        };
+    };
+};
+
+&io_domains {
+    status = "okay";
+
+    vccio1-supply = <&vcc_io>;
+    vccio2-supply = <&vcc18_emmc>;
+    vccio3-supply = <&vcc_io>;
+    vccio4-supply = <&vcc_18>;
+    vccio5-supply = <&vcc_io>;
+    vccio6-supply = <&vcc_io>;
+    pmuio-supply = <&vcc_io>;
+};
+
+&pinctrl {
+    pmic {
+        pmic_int_l: pmic-int-l {
+            rockchip,pins = <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>;
+        };
+    };
+
+    usb2 {
+        usb20_host_drv: usb20-host-drv {
+            rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
+        };
+    };
+
+    usb3 {
+        usb30_host_drv: usb30-host-drv {
+            rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
+        };
+    };
+};
+
+&sdmmc {
+    bus-width = <4>;
+    cap-mmc-highspeed;
+    cap-sd-highspeed;
+    disable-wp;
+    max-frequency = <150000000>;
+    pinctrl-names = "default";
+    pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_dectn &sdmmc0_bus4>;
+    vmmc-supply = <&vcc_sd>;
+    status = "okay";
+};
+
+&spdif {
+    pinctrl-0 = <&spdifm0_tx>;
+    status = "okay";
+    #sound-dai-cells = <0>;
+
+    spdif_p0: port {
+        spdif_p0_0: endpoint {
+            remote-endpoint = <&dit_p0_0>;
+        };
+    };
+};
+
+&spi0 {
+    status = "okay";
+
+    spiflash@0 {
+        compatible = "jedec,spi-nor";
+        reg = <0>;
+
+        /* maximum speed for Rockchip SPI */
+        spi-max-frequency = <50000000>;
+    };
+};
+
+&tsadc {
+    rockchip,hw-tshut-mode = <0>;
+    rockchip,hw-tshut-polarity = <0>;
+    status = "okay";
+};
+
+&uart2 {
+    status = "okay";
+};
+
+&u2phy {
+    status = "okay";
+
+    u2phy_host: host-port {
+        status = "okay";
+    };
+
+    u2phy_otg: otg-port {
+        status = "okay";
+    };
+};
+
+&usb20_otg {
+    dr_mode = "host";
+    status = "okay";
+};
+
+&usb_host0_ehci {
+    status = "okay";
+};
+
+&usb_host0_ohci {
+    status = "okay";
+};
+
+&vop {
+    status = "okay";
+};
+
+&vop_mmu {
+    status = "okay";
+};
diff --git a/src/freedombone-image-hardware-setup b/src/freedombone-image-hardware-setup
index f3e24873b..90ec37fa7 100755
--- a/src/freedombone-image-hardware-setup
+++ b/src/freedombone-image-hardware-setup
@@ -184,6 +184,7 @@ arm_setup_boot() {
                   echo "vfat"; } >> /etc/initramfs-tools/modules
                 ;;
         "rock"*) arm_arch=arm64
+                 cp /root/${PROJECT_NAME}/image_build/dts/rk3328-rock64.dtb /boot/dtbs
                  echo "vfat" >> /etc/initramfs-tools/modules
                  ;;
     esac
@@ -295,6 +296,9 @@ case "$MACHINE" in
         arm_setup_boot sun7i-a20-pcduino3
         ;;
     rock64)
-        arm_setup_boot "rockchip/rk3328-rock64"
+        if [ -f /root/${PROJECT_NAME}/image_build/dts/rk3328-rock64.dts ]; then
+            convert_dts /root/${PROJECT_NAME}/image_build/dts/rk3328-rock64
+            arm_setup_boot "rk3328-rock64"
+        fi
         ;;
 esac
-- 
GitLab