commit
af8ef2ed21
@ -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 |
@ -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 |
@ -0,0 +1,7 @@ |
||||
#
|
||||
# (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y += puma-rk3399.o
|
@ -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). |
@ -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"; |
||||
}; |
||||
}; |
||||
}; |
@ -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; |
||||
} |
@ -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…
Reference in new issue