]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
rockchip: ARM64: split RK3399-Q7 board off the RK3399-EVB board
authorKlaus Goger <klaus.goger@theobroma-systems.com>
Fri, 7 Apr 2017 17:13:38 +0000 (19:13 +0200)
committerSimon Glass <sjg@chromium.org>
Sat, 15 Apr 2017 16:13:17 +0000 (10:13 -0600)
The RK3399-Q7 SoM is a Qseven-compatible (70mm x 70mm, MXM-230
connector) system-on-module from Theobroma Systems, featuring the
Rockchip RK3399.

It provides the following feature set:
 * up to 4GB DDR3
 * on-module SPI-NOR flash
 * on-module eMMC (with 8-bit interace)
 * SD card (on a baseboad) via edge connector
 * Gigabit Ethernet w/ on-module Micrel KSZ9031 GbE PHY
 * HDMI/eDP/MIPI displays
 * 2x MIPI-CSI
 * USB
   - 1x USB 3.0 dual-role (direct connection)
   - 2x USB 3.0 host + 1x USB 2.0 (on-module USB 3.0 hub)
 * on-module STM32 Cortex-M0 companion controller, implementing:
   - low-power RTC functionality (ISL1208 emulation)
   - fan controller (AMC6821 emulation)
   - USB<->CAN bridge controller

Note that we use a multi-payload FIT image for booting and have
Cortex-M0 payload in a separate subimage: we thus rely on the FIT
image loader to put it into the SRAM region that ATF expects it in.

Signed-off-by: Klaus Goger <klaus.goger@theobroma-systems.com>
Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Fixed build warning on puma-rk3399:
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/arm/mach-rockchip/rk3399/Kconfig
board/theobroma-systems/puma_rk3399/Kconfig [new file with mode: 0644]
board/theobroma-systems/puma_rk3399/MAINTAINERS [new file with mode: 0644]
board/theobroma-systems/puma_rk3399/Makefile [new file with mode: 0644]
board/theobroma-systems/puma_rk3399/README [new file with mode: 0644]
board/theobroma-systems/puma_rk3399/fit_spl_atf.its [new file with mode: 0644]
board/theobroma-systems/puma_rk3399/puma-rk3399.c [new file with mode: 0644]
configs/puma-rk3399_defconfig
include/configs/puma_rk3399.h [new file with mode: 0644]

index 83bd04add2462dbaf39bde0030e667f671877447..415466a49bbcb23081ff4abfbd8f87afdb234b70 100644 (file)
@@ -10,6 +10,24 @@ config TARGET_EVB_RK3399
          with full function and phisical connectors support like type-C ports,
          usb2.0 host ports, LVDS, JTAG, MAC, SDcard, HDMI, USB-2-serial...
 
+config TARGET_PUMA_RK3399
+       bool "Theobroma Systems RK3399-Q7 (Puma)"
+       help
+         The RK3399-Q7 (Puma) is a system-on-module (designed and
+         marketed by Theobroma Systems) featuring the Rockchip RK3399
+         in a Qseven-compatible form-factor (running of a single 5V
+         supply and exposing its external interfaces on a MXM-230
+         connector).
+
+         Key features of the RK3399-Q7 include:
+          * on-module USB 3.0 hub (2x USB 3.0 host + 1x USB 2.0 host)
+          * USB 3.0 dual-role
+          * on-module Micrel KSZ9031 GbE PHY
+          * on-module eMMC (up to 256GB configurations available)
+          * on-module DDR3 (1GB, 2GB and 4GB configurations available)
+          * HDMI, eDP, MIPI-DSI, MIPI-DSI/CSI and MIPI-CSI
+          * SPI, I2C, I2S, UART, GPIO, ...
+
 endchoice
 
 config SYS_SOC
@@ -19,5 +37,6 @@ config SYS_MALLOC_F_LEN
        default 0x0800
 
 source "board/rockchip/evb_rk3399/Kconfig"
+source "board/theobroma-systems/puma_rk3399/Kconfig"
 
 endif
diff --git a/board/theobroma-systems/puma_rk3399/Kconfig b/board/theobroma-systems/puma_rk3399/Kconfig
new file mode 100644 (file)
index 0000000..a645590
--- /dev/null
@@ -0,0 +1,15 @@
+if TARGET_PUMA_RK3399
+
+config SYS_BOARD
+       default "puma_rk3399"
+
+config SYS_VENDOR
+       default "theobroma-systems"
+
+config SYS_CONFIG_NAME
+       default "puma_rk3399"
+
+config BOARD_SPECIFIC_OPTIONS # dummy
+       def_bool y
+
+endif
diff --git a/board/theobroma-systems/puma_rk3399/MAINTAINERS b/board/theobroma-systems/puma_rk3399/MAINTAINERS
new file mode 100644 (file)
index 0000000..ccec09c
--- /dev/null
@@ -0,0 +1,10 @@
+PUMA-RK3399
+M:     Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
+M:     Klaus Goger <klaus.goger@theobroma-systems.com>
+S:     Maintained
+F:     board/theobroma-systems/puma_rk3399
+F:     include/configs/puma_rk3399.h
+F:     arch/arm/dts/rk3399-puma.dts
+F:     configs/puma-rk3399_defconfig
+W:     https://www.theobroma-systems.com/rk3399-q7/tech-specs
+T:     git git://git.theobroma-systems.com/puma-u-boot.git
diff --git a/board/theobroma-systems/puma_rk3399/Makefile b/board/theobroma-systems/puma_rk3399/Makefile
new file mode 100644 (file)
index 0000000..d962b56
--- /dev/null
@@ -0,0 +1,7 @@
+#
+# (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
+#
+# SPDX-License-Identifier:     GPL-2.0+
+#
+
+obj-y  += puma-rk3399.o
diff --git a/board/theobroma-systems/puma_rk3399/README b/board/theobroma-systems/puma_rk3399/README
new file mode 100644 (file)
index 0000000..1a8d02b
--- /dev/null
@@ -0,0 +1,73 @@
+Introduction
+============
+
+The RK3399-Q7 (Puma) is a system-on-module featuring the Rockchip
+RK3399 in a Qseven-compatible form-factor.
+
+RK3399-Q7 features:
+       * CPU: ARMv8 64bit Big-Little architecture,
+               * Big: dual-core Cortex-A72
+               * Little: quad-core Cortex-A53
+               * IRAM: 200KB
+       * DRAM: 4GB-128MB dual-channel
+       * eMMC: onboard eMMC
+       * SD/MMC
+       * GbE (onboard Micrel KSZ9031) Gigabit ethernet PHY
+       * USB:
+               * USB3.0 dual role port
+               * 2x USB3.0 host, 1x USB2.0 host via onboard USB3.0 hub
+       * Display: HDMI/eDP/MIPI
+       * Camera: 2x CSI (one on the edge connector, one on the Q7 specified CSI ZIF)
+       * NOR Flash: onboard SPI NOR
+       * Companion Controller: onboard additional Cortex-M0 microcontroller
+               * RTC
+               * fan controller
+               * CAN
+
+Here is the step-by-step to boot to U-Boot on rk3399.
+
+Get the Source and build ATF/Cortex-M0 binaries
+===============================================
+
+  > git clone git://git.theobroma-systems.com/arm-trusted-firmware.git
+  > git clone git://git.theobroma-systems.com/rk3399-cortex-m0.git
+
+Compile the ATF
+===============
+
+  > cd arm-trusted-firmware
+  > make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3399 bl31
+  > cp build/rk3399/release/bl31.bin ../u-boot
+
+Compile the M0 firmware
+=======================
+
+  > cd ../rk3399-cortex-m0
+  > make CROSS_COMPILE=arm-cortex_m0-eabi-
+  > cp rk3399m0.bin ../u-boot
+
+Compile the U-Boot
+==================
+
+  > cd ../u-boot
+  > make CROSS_COMPILE=aarch64-linux-gnu- puma-rk3399_defconfig all
+
+Package the image
+=================
+
+       > tools/mkimage -n rk3399 -T rksd -d spl/u-boot-spl.bin spl.img
+       > tools/mkimage -f board/theobroma/puma_rk3399/fit_spl_atf.its \
+               -E rk3399_bl3x.itb
+
+Flash the image
+===============
+
+Copy the SPL to offset 32k and the FIT image containing the payloads
+(U-Boot proper, ATF, M0 Firmware, devicetree) to offset 256k on a SD
+card.
+
+  > dd if=spl.img of=/dev/sdb seek=64
+  > dd if=rk3399_bl3x.itb of=/dev/sdb seek=512
+
+After powering up the board (with the inserted SD card), you should see
+a U-Boot console on UART0 (115200n8).
diff --git a/board/theobroma-systems/puma_rk3399/fit_spl_atf.its b/board/theobroma-systems/puma_rk3399/fit_spl_atf.its
new file mode 100644 (file)
index 0000000..f93c251
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2017 Theobroma Systems Design und Consulting GmbH
+ *
+ * Minimal dts for a SPL FIT image payload.
+ *
+ * SPDX-License-Identifier: GPL-2.0+  X11
+ */
+
+/dts-v1/;
+
+/ {
+       description = "FIT image with U-Boot proper, ATF bl31, M0 Firmware, DTB";
+       #address-cells = <1>;
+
+       images {
+               uboot@1 {
+                       description = "U-Boot (64-bit)";
+                       data = /incbin/("../../../u-boot-nodtb.bin");
+                       type = "standalone";
+                       arch = "arm64";
+                       compression = "none";
+                       load = <0x00200000>;
+               };
+               atf@1 {
+                       description = "ARM Trusted Firmware";
+                       data = /incbin/("../../../bl31.bin");
+                       type = "firmware";
+                       arch = "arm64";
+                       compression = "none";
+                       load = <0x00001000>;
+                       entry = <0x00001000>;
+               };
+               pmu@1 {
+                       description = "Cortex-M0 firmware";
+                       data = /incbin/("../../../rk3399m0.bin");
+                       type = "pmu-firmware";
+                       compression = "none";
+                       load = <0xff8c0000>;
+                };
+               fdt@1 {
+                       description = "RK3399-Q7 (Puma) flat device-tree";
+                       data = /incbin/("../../../u-boot.dtb");
+                       type = "flat_dt";
+                       compression = "none";
+               };
+       };
+
+       configurations {
+               default = "conf@1";
+               conf@1 {
+                       description = "Theobroma Systems RK3399-Q7 (Puma) SoM";
+                       firmware = "uboot@1";
+                       loadables = "atf@1";
+                       fdt = "fdt@1";
+               };
+       };
+};
diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c b/board/theobroma-systems/puma_rk3399/puma-rk3399.c
new file mode 100644 (file)
index 0000000..fb4d31e
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+#include <common.h>
+#include <dm.h>
+#include <dm/pinctrl.h>
+#include <dm/uclass-internal.h>
+#include <asm/arch/periph.h>
+#include <power/regulator.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int board_init(void)
+{
+       struct udevice *pinctrl, *regulator;
+       int ret;
+
+       /*
+        * The PWM does not have decicated interrupt number in dts and can
+        * not get periph_id by pinctrl framework, so let's init them here.
+        * The PWM2 and PWM3 are for pwm regulators.
+        */
+       ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl);
+       if (ret) {
+               debug("%s: Cannot find pinctrl device\n", __func__);
+               goto out;
+       }
+
+       ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM2);
+       if (ret) {
+               debug("%s PWM2 pinctrl init fail!\n", __func__);
+               goto out;
+       }
+
+       /* rk3399 need to init vdd_center to get the correct output voltage */
+       ret = regulator_get_by_platname("vdd_center", &regulator);
+       if (ret)
+               debug("%s: Cannot get vdd_center regulator\n", __func__);
+
+       ret = regulator_get_by_platname("vcc5v0_host", &regulator);
+       if (ret) {
+               debug("%s vcc5v0_host init fail! ret %d\n", __func__, ret);
+               goto out;
+       }
+
+       ret = regulator_set_enable(regulator, true);
+       if (ret) {
+               debug("%s vcc5v0-host-en set fail!\n", __func__);
+               goto out;
+       }
+
+out:
+       return 0;
+}
+
+int dram_init(void)
+{
+       gd->ram_size = 0x80000000;
+       return 0;
+}
+
+int dram_init_banksize(void)
+{
+       /* Reserve 0x200000 for ATF bl31 */
+       gd->bd->bi_dram[0].start = 0x200000;
+       gd->bd->bi_dram[0].size = 0x7e000000;
+
+       return 0;
+}
index d4e12d78db2922ea059a24d8253a72dcf4627d0c..500f22093e1cf527fddba18337e9d4bbb564d5ba 100644 (file)
@@ -1,5 +1,6 @@
 CONFIG_ARM=y
 CONFIG_ARCH_ROCKCHIP=y
+CONFIG_TARGET_PUMA_RK3399=y
 CONFIG_SPL_LIBCOMMON_SUPPORT=y
 CONFIG_SPL_LIBGENERIC_SUPPORT=y
 CONFIG_SYS_MALLOC_F_LEN=0x4000
@@ -11,7 +12,7 @@ CONFIG_DEFAULT_DEVICE_TREE="rk3399-puma"
 CONFIG_FIT=y
 CONFIG_SPL_FIT=y
 CONFIG_SPL_LOAD_FIT=y
-CONFIG_SPL_FIT_SOURCE="board/rockchip/evb_rk3399/fit_spl_atf.its"
+CONFIG_SPL_FIT_SOURCE="board/theobroma-systems/puma_rk3399/fit_spl_atf.its"
 # CONFIG_DISPLAY_CPUINFO is not set
 # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
 # CONFIG_SPL_LEGACY_IMAGE_SUPPORT is not set
diff --git a/include/configs/puma_rk3399.h b/include/configs/puma_rk3399.h
new file mode 100644 (file)
index 0000000..fd62c72
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __PUMA_RK3399_H
+#define __PUMA_RK3399_H
+
+#include <configs/rk3399_common.h>
+
+/*
+ * SPL @ 32kB for ~130kB
+ * ENV @ 240KB for 8kB
+ * FIT payload (ATF, U-Boot, FDT) @ 256kB
+ */
+#undef CONFIG_ENV_OFFSET
+#define CONFIG_ENV_OFFSET (240 * 1024)
+
+#define CONFIG_ENV_IS_IN_MMC
+#define CONFIG_SYS_MMC_ENV_DEV 1
+
+#define SDRAM_BANK_SIZE                        (2UL << 30)
+
+#define CONFIG_SYS_WHITE_ON_BLACK
+
+#endif