mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 21:21:37 +00:00
rockchip: ARM64: split RK3399-Q7 board off the RK3399-EVB board
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>
This commit is contained in:
parent
faf1afc473
commit
a13110a99f
9 changed files with 281 additions and 1 deletions
|
@ -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
|
||||
|
|
15
board/theobroma-systems/puma_rk3399/Kconfig
Normal file
15
board/theobroma-systems/puma_rk3399/Kconfig
Normal file
|
@ -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
|
10
board/theobroma-systems/puma_rk3399/MAINTAINERS
Normal file
10
board/theobroma-systems/puma_rk3399/MAINTAINERS
Normal file
|
@ -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
|
7
board/theobroma-systems/puma_rk3399/Makefile
Normal file
7
board/theobroma-systems/puma_rk3399/Makefile
Normal file
|
@ -0,0 +1,7 @@
|
|||
#
|
||||
# (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y += puma-rk3399.o
|
73
board/theobroma-systems/puma_rk3399/README
Normal file
73
board/theobroma-systems/puma_rk3399/README
Normal file
|
@ -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).
|
57
board/theobroma-systems/puma_rk3399/fit_spl_atf.its
Normal file
57
board/theobroma-systems/puma_rk3399/fit_spl_atf.its
Normal file
|
@ -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";
|
||||
};
|
||||
};
|
||||
};
|
71
board/theobroma-systems/puma_rk3399/puma-rk3399.c
Normal file
71
board/theobroma-systems/puma_rk3399/puma-rk3399.c
Normal file
|
@ -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", ®ulator);
|
||||
if (ret)
|
||||
debug("%s: Cannot get vdd_center regulator\n", __func__);
|
||||
|
||||
ret = regulator_get_by_platname("vcc5v0_host", ®ulator);
|
||||
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;
|
||||
}
|
|
@ -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
|
||||
|
|
27
include/configs/puma_rk3399.h
Normal file
27
include/configs/puma_rk3399.h
Normal file
|
@ -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
|
Loading…
Add table
Reference in a new issue