rockchip: rk3399-puma: add boot-on regulator to override BIOS_DISABLE
authorPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>
Fri, 29 Sep 2017 17:28:01 +0000 (19:28 +0200)
committerPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>
Sat, 30 Sep 2017 22:33:35 +0000 (00:33 +0200)
The (Qseven) BIOS_DISABLE signal on the RK3399-Q7 (Puma) keeps the
eMMC and SPI in reset initially and we need to write a GPIO to turn
them on before continuing the boot-up.

This adds the DTS entries for the additional regulator and makes
pinctrl and gpio3 available during SPL.  It also adds a hook to the
spl_board_init() to ensure that the regulator gets probed and enabled.

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/arm/dts/rk3399-puma.dtsi
board/theobroma-systems/puma_rk3399/puma-rk3399.c

index f95c68e9f6e8b0b9c2a8f6c98a5a5767686444be..65ab3801391b50a238e196248db1eecbf0fbbf8b 100644 (file)
                regulator-max-microvolt = <3300000>;
        };
 
+       /*
+        * The Qseven BIOS_DISABLE signal on the RK3399-Q7 keeps the on-module
+        * eMMC and SPI flash powered-down initially (in fact it keeps the
+        * reset signal asserted).  Even though it is an enable signal, we
+        * model this as a regulator.
+        */
+       bios_enable: bios_enable {
+               compatible = "regulator-fixed";
+               u-boot,dm-pre-reloc;
+               regulator-name = "bios_enable";
+               enable-active-low;
+               gpio = <&gpio3 29 GPIO_ACTIVE_HIGH>;
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
        vccadc_ref: vccadc-ref {
                compatible = "regulator-fixed";
                regulator-name = "vcc1v8_sys";
 };
 
 &pcie_phy {
-               status = "okay";
+               status = "okay";
 };
 
 &pmu_io_domains {
 };
 
 &sdmmc {
-        u-boot,dm-pre-reloc;
+       u-boot,dm-pre-reloc;
        clock-frequency = <150000000>;
        clock-freq-min-max = <100000 150000000>;
        supports-sd;
        status = "okay";
 };
 
+&gpio3 {
+       u-boot,dm-pre-reloc;
+};
+
 &pinctrl {
        /* Pins that are not explicitely used by any devices */
        pinctrl-names = "default";
        pinctrl-0 = <&puma_pin_hog>;
+
        hog {
                puma_pin_hog: puma_pin_hog {
                        rockchip,pins =
        i2c8 {
                i2c8_xfer_a: i2c8-xfer {
                        rockchip,pins = <1 21 RK_FUNC_1 &pcfg_pull_up>,
-                                       <1 20 RK_FUNC_1 &pcfg_pull_up>;
+                                       <1 20 RK_FUNC_1 &pcfg_pull_up>;
                };
        };
 };
 &spi5 {
        status = "okay";
 };
-
index 3cab7b1d48ddd54fe9894a8a608a9e1df858a358..2b4988e2d2255a306f4aa213c5cf450a65fca0f7 100644 (file)
@@ -34,6 +34,16 @@ int board_init(void)
 
 void spl_board_init(void)
 {
+       int  ret;
+
+       /*
+        * Turning the eMMC and SPI back on (if disabled via the Qseven
+        * BIOS_ENABLE) signal is done through a always-on regulator).
+        */
+       ret = regulators_enable_boot_on(false);
+       if (ret)
+               debug("%s: Cannot enable boot on regulator\n", __func__);
+
        preloader_console_init();
 }