commit
c1b62ba9ca
@ -0,0 +1,34 @@ |
|||||||
|
/* |
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ X11 |
||||||
|
*/ |
||||||
|
|
||||||
|
&pinctrl { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&service_msch { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&dmc { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
status = "okay"; |
||||||
|
}; |
||||||
|
|
||||||
|
&pmugrf { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&cru { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&grf { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&uart2 { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
@ -0,0 +1,93 @@ |
|||||||
|
/* |
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ X11 |
||||||
|
*/ |
||||||
|
|
||||||
|
/ { |
||||||
|
config { |
||||||
|
u-boot,spl-payload-offset = <0x40000>; /* @ 256KB */ |
||||||
|
u-boot,mmc-env-offset = <0x4000>; /* @ 16KB */ |
||||||
|
}; |
||||||
|
|
||||||
|
chosen { |
||||||
|
stdout-path = "serial0:115200n8"; |
||||||
|
u-boot,spl-boot-order = &emmc, &sdmmc; |
||||||
|
}; |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
&pinctrl { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&service_msch { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&dmc { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
|
||||||
|
/* |
||||||
|
* Validation of throughput using SPEC2000 shows the following |
||||||
|
* relative performance for the different memory schedules: |
||||||
|
* - CBDR: 30.1 |
||||||
|
* - CBRD: 29.8 |
||||||
|
* - CRBD: 29.9 |
||||||
|
* Note that the best performance for any given application workload |
||||||
|
* may vary from the default configured here (e.g. 164.gzip is fastest |
||||||
|
* with CBRD, whereas 252.eon and 186.crafty are fastest with CRBD). |
||||||
|
* |
||||||
|
* See doc/device-tree-bindings/clock/rockchip,rk3368-dmc.txt for |
||||||
|
* details on the 'rockchip,memory-schedule' property and how it |
||||||
|
* affects the physical-address to device-address mapping. |
||||||
|
*/ |
||||||
|
rockchip,memory-schedule = <DMC_MSCH_CBDR>; |
||||||
|
rockchip,ddr-frequency = <800000000>; |
||||||
|
rockchip,ddr-speed-bin = <DDR3_1600K>; |
||||||
|
|
||||||
|
status = "okay"; |
||||||
|
}; |
||||||
|
|
||||||
|
&pmugrf { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&sgrf { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&cru { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&grf { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&uart0 { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&emmc { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&sdmmc { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&spi1 { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
|
||||||
|
spiflash: w25q32dw@0 { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
&timer0 { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
clock-frequency = <24000000>; |
||||||
|
}; |
||||||
|
|
||||||
|
|
@ -0,0 +1,195 @@ |
|||||||
|
/* |
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ X11 |
||||||
|
*/ |
||||||
|
|
||||||
|
/dts-v1/; |
||||||
|
#include "rk3368.dtsi" |
||||||
|
#include "rk3368-lion-u-boot.dtsi" |
||||||
|
#include <dt-bindings/input/input.h> |
||||||
|
|
||||||
|
/ { |
||||||
|
model = "Theobroma Systems RK3368-uQ7 SoM"; |
||||||
|
compatible = "tsd,rk3368-uq7", "tsd,lion", "rockchip,rk3368"; |
||||||
|
|
||||||
|
aliases { |
||||||
|
mmc0 = &emmc; |
||||||
|
mmc1 = &sdmmc; |
||||||
|
}; |
||||||
|
|
||||||
|
memory@0 { |
||||||
|
device_type = "memory"; |
||||||
|
reg = <0x0 0x0 0x0 0x80000000>; |
||||||
|
}; |
||||||
|
|
||||||
|
ext_gmac: gmac-clk { |
||||||
|
compatible = "fixed-clock"; |
||||||
|
clock-frequency = <125000000>; |
||||||
|
clock-output-names = "ext_gmac"; |
||||||
|
#clock-cells = <0>; |
||||||
|
}; |
||||||
|
|
||||||
|
vcc_sys: vcc-sys-regulator { |
||||||
|
compatible = "regulator-fixed"; |
||||||
|
regulator-name = "vcc_sys"; |
||||||
|
regulator-min-microvolt = <5000000>; |
||||||
|
regulator-max-microvolt = <5000000>; |
||||||
|
regulator-always-on; |
||||||
|
regulator-boot-on; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
&uart0 { |
||||||
|
status = "okay"; |
||||||
|
}; |
||||||
|
|
||||||
|
&emmc { |
||||||
|
status = "okay"; |
||||||
|
bus-width = <8>; |
||||||
|
cap-mmc-highspeed; |
||||||
|
clock-frequency = <150000000>; |
||||||
|
disable-wp; |
||||||
|
keep-power-in-suspend; |
||||||
|
non-removable; |
||||||
|
num-slots = <1>; |
||||||
|
vmmc-supply = <&vcc33_io>; |
||||||
|
vqmmc-supply = <&vcc18_io>; |
||||||
|
pinctrl-names = "default"; |
||||||
|
pinctrl-0 = <&emmc_clk>, <&emmc_cmd>, <&emmc_bus8>; |
||||||
|
}; |
||||||
|
|
||||||
|
&sdmmc { |
||||||
|
status = "okay"; |
||||||
|
}; |
||||||
|
|
||||||
|
&gmac { |
||||||
|
status = "okay"; |
||||||
|
phy-supply = <&vcc33_io>; |
||||||
|
phy-mode = "rgmii"; |
||||||
|
clock_in_out = "input"; |
||||||
|
snps,reset-gpio = <&gpio3 11 GPIO_ACTIVE_LOW>; |
||||||
|
snps,reset-active-low; |
||||||
|
snps,reset-delays-us = <2 10000 50000>; |
||||||
|
assigned-clocks = <&cru SCLK_MAC>; |
||||||
|
assigned-clock-parents = <&ext_gmac>; |
||||||
|
pinctrl-names = "default"; |
||||||
|
pinctrl-0 = <&rgmii_pins>; |
||||||
|
tx_delay = <0x10>; |
||||||
|
rx_delay = <0x10>; |
||||||
|
}; |
||||||
|
|
||||||
|
&i2c0 { |
||||||
|
status = "okay"; |
||||||
|
|
||||||
|
rk808: pmic@1b { |
||||||
|
compatible = "rockchip,rk808"; |
||||||
|
reg = <0x1b>; |
||||||
|
interrupt-parent = <&gpio0>; |
||||||
|
interrupts = <5 IRQ_TYPE_LEVEL_LOW>; |
||||||
|
rockchip,system-power-controller; |
||||||
|
vcc1-supply = <&vcc_sys>; |
||||||
|
vcc2-supply = <&vcc_sys>; |
||||||
|
vcc3-supply = <&vcc_sys>; |
||||||
|
vcc4-supply = <&vcc_sys>; |
||||||
|
vcc6-supply = <&vcc_sys>; |
||||||
|
vcc7-supply = <&vcc_sys>; |
||||||
|
vcc8-supply = <&vcc_sys>; |
||||||
|
vcc9-supply = <&vcc_sys>; |
||||||
|
vcc10-supply = <&vcc_sys>; |
||||||
|
vcc11-supply = <&vcc_sys>; |
||||||
|
vcc12-supply = <&vcc_sys>; |
||||||
|
clock-output-names = "xin32k", "rk808-clkout2"; |
||||||
|
#clock-cells = <1>; |
||||||
|
|
||||||
|
regulators { |
||||||
|
vdd_cpu: DCDC_REG1 { |
||||||
|
regulator-always-on; |
||||||
|
regulator-boot-on; |
||||||
|
regulator-min-microvolt = <700000>; |
||||||
|
regulator-max-microvolt = <1500000>; |
||||||
|
regulator-name = "vdd_cpu"; |
||||||
|
}; |
||||||
|
|
||||||
|
vdd_log: DCDC_REG2 { |
||||||
|
regulator-always-on; |
||||||
|
regulator-boot-on; |
||||||
|
regulator-min-microvolt = <700000>; |
||||||
|
regulator-max-microvolt = <1500000>; |
||||||
|
regulator-name = "vdd_log"; |
||||||
|
}; |
||||||
|
|
||||||
|
vcc_ddr: DCDC_REG3 { |
||||||
|
regulator-always-on; |
||||||
|
regulator-boot-on; |
||||||
|
regulator-name = "vcc_ddr"; |
||||||
|
}; |
||||||
|
|
||||||
|
vcc33_io: DCDC_REG4 { |
||||||
|
regulator-always-on; |
||||||
|
regulator-boot-on; |
||||||
|
regulator-min-microvolt = <3300000>; |
||||||
|
regulator-max-microvolt = <3300000>; |
||||||
|
regulator-name = "vcc33_io"; |
||||||
|
}; |
||||||
|
|
||||||
|
vcc33_video: LDO_REG2 { |
||||||
|
regulator-always-on; |
||||||
|
regulator-boot-on; |
||||||
|
regulator-min-microvolt = <3300000>; |
||||||
|
regulator-max-microvolt = <3300000>; |
||||||
|
regulator-name = "vcc33_video"; |
||||||
|
}; |
||||||
|
|
||||||
|
vdd10_pll: LDO_REG3 { |
||||||
|
regulator-always-on; |
||||||
|
regulator-boot-on; |
||||||
|
regulator-min-microvolt = <1000000>; |
||||||
|
regulator-max-microvolt = <1000000>; |
||||||
|
regulator-name = "vdd10_pll"; |
||||||
|
}; |
||||||
|
|
||||||
|
vcc18_io: LDO_REG4 { |
||||||
|
regulator-boot-on; |
||||||
|
regulator-min-microvolt = <1800000>; |
||||||
|
regulator-max-microvolt = <1800000>; |
||||||
|
regulator-name = "vcc18_io"; |
||||||
|
}; |
||||||
|
|
||||||
|
vdd10_video: LDO_REG6 { |
||||||
|
regulator-always-on; |
||||||
|
regulator-boot-on; |
||||||
|
regulator-min-microvolt = <1000000>; |
||||||
|
regulator-max-microvolt = <1000000>; |
||||||
|
regulator-name = "vdd10_video"; |
||||||
|
}; |
||||||
|
|
||||||
|
vcc18_video: LDO_REG8 { |
||||||
|
regulator-always-on; |
||||||
|
regulator-boot-on; |
||||||
|
regulator-min-microvolt = <1800000>; |
||||||
|
regulator-max-microvolt = <1800000>; |
||||||
|
regulator-name = "vcc18_video"; |
||||||
|
}; |
||||||
|
}; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
&uart0 { |
||||||
|
status = "okay"; |
||||||
|
}; |
||||||
|
|
||||||
|
&spi1 { |
||||||
|
status = "okay"; |
||||||
|
|
||||||
|
#address-cells = <1>; |
||||||
|
#size-cells = <0>; |
||||||
|
|
||||||
|
spiflash: w25q32dw@0 { |
||||||
|
compatible = "spi-flash"; |
||||||
|
reg = <0>; |
||||||
|
spi-max-frequency = <49500000>; |
||||||
|
spi-cpol; |
||||||
|
spi-cpha; |
||||||
|
}; |
||||||
|
}; |
@ -0,0 +1,34 @@ |
|||||||
|
/* |
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ X11 |
||||||
|
*/ |
||||||
|
|
||||||
|
&pinctrl { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&service_msch { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&dmc { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
status = "okay"; |
||||||
|
}; |
||||||
|
|
||||||
|
&pmugrf { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&cru { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&grf { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&uart4 { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
@ -0,0 +1,34 @@ |
|||||||
|
/* |
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ X11 |
||||||
|
*/ |
||||||
|
|
||||||
|
&pinctrl { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&service_msch { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&dmc { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
status = "okay"; |
||||||
|
}; |
||||||
|
|
||||||
|
&pmugrf { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&cru { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&grf { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
||||||
|
|
||||||
|
&uart2 { |
||||||
|
u-boot,dm-pre-reloc; |
||||||
|
}; |
@ -0,0 +1,187 @@ |
|||||||
|
/*
|
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0 |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef __ASM_ARCH_DDR_RK3368_H__ |
||||||
|
#define __ASM_ARCH_DDR_RK3368_H__ |
||||||
|
|
||||||
|
/*
|
||||||
|
* The RK3368 DDR PCTL differs from the incarnation in the RK3288 only |
||||||
|
* in a few details. Most notably, it has an additional field to track |
||||||
|
* tREFI in controller cycles (i.e. trefi_mem_ddr3). |
||||||
|
*/ |
||||||
|
struct rk3368_ddr_pctl { |
||||||
|
u32 scfg; |
||||||
|
u32 sctl; |
||||||
|
u32 stat; |
||||||
|
u32 intrstat; |
||||||
|
u32 reserved0[12]; |
||||||
|
u32 mcmd; |
||||||
|
u32 powctl; |
||||||
|
u32 powstat; |
||||||
|
u32 cmdtstat; |
||||||
|
u32 cmdtstaten; |
||||||
|
u32 reserved1[3]; |
||||||
|
u32 mrrcfg0; |
||||||
|
u32 mrrstat0; |
||||||
|
u32 mrrstat1; |
||||||
|
u32 reserved2[4]; |
||||||
|
u32 mcfg1; |
||||||
|
u32 mcfg; |
||||||
|
u32 ppcfg; |
||||||
|
u32 mstat; |
||||||
|
u32 lpddr2zqcfg; |
||||||
|
u32 reserved3; |
||||||
|
u32 dtupdes; |
||||||
|
u32 dtuna; |
||||||
|
u32 dtune; |
||||||
|
u32 dtuprd0; |
||||||
|
u32 dtuprd1; |
||||||
|
u32 dtuprd2; |
||||||
|
u32 dtuprd3; |
||||||
|
u32 dtuawdt; |
||||||
|
u32 reserved4[3]; |
||||||
|
u32 togcnt1u; |
||||||
|
u32 tinit; |
||||||
|
u32 trsth; |
||||||
|
u32 togcnt100n; |
||||||
|
u32 trefi; |
||||||
|
u32 tmrd; |
||||||
|
u32 trfc; |
||||||
|
u32 trp; |
||||||
|
u32 trtw; |
||||||
|
u32 tal; |
||||||
|
u32 tcl; |
||||||
|
u32 tcwl; |
||||||
|
u32 tras; |
||||||
|
u32 trc; |
||||||
|
u32 trcd; |
||||||
|
u32 trrd; |
||||||
|
u32 trtp; |
||||||
|
u32 twr; |
||||||
|
u32 twtr; |
||||||
|
u32 texsr; |
||||||
|
u32 txp; |
||||||
|
u32 txpdll; |
||||||
|
u32 tzqcs; |
||||||
|
u32 tzqcsi; |
||||||
|
u32 tdqs; |
||||||
|
u32 tcksre; |
||||||
|
u32 tcksrx; |
||||||
|
u32 tcke; |
||||||
|
u32 tmod; |
||||||
|
u32 trstl; |
||||||
|
u32 tzqcl; |
||||||
|
u32 tmrr; |
||||||
|
u32 tckesr; |
||||||
|
u32 tdpd; |
||||||
|
u32 trefi_mem_ddr3; |
||||||
|
u32 reserved5[45]; |
||||||
|
u32 dtuwactl; |
||||||
|
u32 dturactl; |
||||||
|
u32 dtucfg; |
||||||
|
u32 dtuectl; |
||||||
|
u32 dtuwd0; |
||||||
|
u32 dtuwd1; |
||||||
|
u32 dtuwd2; |
||||||
|
u32 dtuwd3; |
||||||
|
u32 dtuwdm; |
||||||
|
u32 dturd0; |
||||||
|
u32 dturd1; |
||||||
|
u32 dturd2; |
||||||
|
u32 dturd3; |
||||||
|
u32 dtulfsrwd; |
||||||
|
u32 dtulfsrrd; |
||||||
|
u32 dtueaf; |
||||||
|
u32 dfitctrldelay; |
||||||
|
u32 dfiodtcfg; |
||||||
|
u32 dfiodtcfg1; |
||||||
|
u32 dfiodtrankmap; |
||||||
|
u32 dfitphywrdata; |
||||||
|
u32 dfitphywrlat; |
||||||
|
u32 reserved7[2]; |
||||||
|
u32 dfitrddataen; |
||||||
|
u32 dfitphyrdlat; |
||||||
|
u32 reserved8[2]; |
||||||
|
u32 dfitphyupdtype0; |
||||||
|
u32 dfitphyupdtype1; |
||||||
|
u32 dfitphyupdtype2; |
||||||
|
u32 dfitphyupdtype3; |
||||||
|
u32 dfitctrlupdmin; |
||||||
|
u32 dfitctrlupdmax; |
||||||
|
u32 dfitctrlupddly; |
||||||
|
u32 reserved9; |
||||||
|
u32 dfiupdcfg; |
||||||
|
u32 dfitrefmski; |
||||||
|
u32 dfitctrlupdi; |
||||||
|
u32 reserved10[4]; |
||||||
|
u32 dfitrcfg0; |
||||||
|
u32 dfitrstat0; |
||||||
|
u32 dfitrwrlvlen; |
||||||
|
u32 dfitrrdlvlen; |
||||||
|
u32 dfitrrdlvlgateen; |
||||||
|
u32 dfiststat0; |
||||||
|
u32 dfistcfg0; |
||||||
|
u32 dfistcfg1; |
||||||
|
u32 reserved11; |
||||||
|
u32 dfitdramclken; |
||||||
|
u32 dfitdramclkdis; |
||||||
|
u32 dfistcfg2; |
||||||
|
u32 dfistparclr; |
||||||
|
u32 dfistparlog; |
||||||
|
u32 reserved12[3]; |
||||||
|
u32 dfilpcfg0; |
||||||
|
u32 reserved13[3]; |
||||||
|
u32 dfitrwrlvlresp0; |
||||||
|
u32 dfitrwrlvlresp1; |
||||||
|
u32 dfitrwrlvlresp2; |
||||||
|
u32 dfitrrdlvlresp0; |
||||||
|
u32 dfitrrdlvlresp1; |
||||||
|
u32 dfitrrdlvlresp2; |
||||||
|
u32 dfitrwrlvldelay0; |
||||||
|
u32 dfitrwrlvldelay1; |
||||||
|
u32 dfitrwrlvldelay2; |
||||||
|
u32 dfitrrdlvldelay0; |
||||||
|
u32 dfitrrdlvldelay1; |
||||||
|
u32 dfitrrdlvldelay2; |
||||||
|
u32 dfitrrdlvlgatedelay0; |
||||||
|
u32 dfitrrdlvlgatedelay1; |
||||||
|
u32 dfitrrdlvlgatedelay2; |
||||||
|
u32 dfitrcmd; |
||||||
|
u32 reserved14[46]; |
||||||
|
u32 ipvr; |
||||||
|
u32 iptr; |
||||||
|
}; |
||||||
|
check_member(rk3368_ddr_pctl, iptr, 0x03fc); |
||||||
|
|
||||||
|
struct rk3368_ddrphy { |
||||||
|
u32 reg[0x100]; |
||||||
|
}; |
||||||
|
check_member(rk3368_ddrphy, reg[0xff], 0x03fc); |
||||||
|
|
||||||
|
struct rk3368_msch { |
||||||
|
u32 coreid; |
||||||
|
u32 revisionid; |
||||||
|
u32 ddrconf; |
||||||
|
u32 ddrtiming; |
||||||
|
u32 ddrmode; |
||||||
|
u32 readlatency; |
||||||
|
u32 reserved1[8]; |
||||||
|
u32 activate; |
||||||
|
u32 devtodev; |
||||||
|
}; |
||||||
|
check_member(rk3368_msch, devtodev, 0x003c); |
||||||
|
|
||||||
|
/* GRF_SOC_CON0 */ |
||||||
|
enum { |
||||||
|
NOC_RSP_ERR_STALL = BIT(9), |
||||||
|
MOBILE_DDR_SEL = BIT(4), |
||||||
|
DDR0_16BIT_EN = BIT(3), |
||||||
|
MSCH0_MAINDDR3_DDR3 = BIT(2), |
||||||
|
MSCH0_MAINPARTIALPOP = BIT(1), |
||||||
|
UPCTL_C_ACTIVE = BIT(0), |
||||||
|
}; |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,78 @@ |
|||||||
|
/*
|
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <common.h> |
||||||
|
#include <debug_uart.h> |
||||||
|
#include <dm.h> |
||||||
|
#include <dm/pinctrl.h> |
||||||
|
#include <ram.h> |
||||||
|
#include <spl.h> |
||||||
|
#include <asm/io.h> |
||||||
|
#include <asm/arch/cru_rk3368.h> |
||||||
|
#include <asm/arch/grf_rk3368.h> |
||||||
|
#include <asm/arch/hardware.h> |
||||||
|
#include <asm/arch/periph.h> |
||||||
|
#include <asm/arch/timer.h> |
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR; |
||||||
|
|
||||||
|
void board_debug_uart_init(void) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
void board_init_f(ulong dummy) |
||||||
|
{ |
||||||
|
struct udevice *pinctrl; |
||||||
|
struct udevice *dev; |
||||||
|
int ret; |
||||||
|
|
||||||
|
ret = spl_early_init(); |
||||||
|
if (ret) { |
||||||
|
debug("spl_early_init() failed: %d\n", ret); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
|
||||||
|
/* Set up our preloader console */ |
||||||
|
ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl); |
||||||
|
if (ret) { |
||||||
|
error("%s: pinctrl init failed: %d\n", __func__, ret); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
|
||||||
|
ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_UART0); |
||||||
|
if (ret) { |
||||||
|
error("%s: failed to set up console UART\n", __func__); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
|
||||||
|
preloader_console_init(); |
||||||
|
|
||||||
|
ret = uclass_get_device(UCLASS_RAM, 0, &dev); |
||||||
|
if (ret) { |
||||||
|
debug("DRAM init failed: %d\n", ret); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
u32 spl_boot_mode(const u32 boot_device) |
||||||
|
{ |
||||||
|
return MMCSD_MODE_RAW; |
||||||
|
} |
||||||
|
|
||||||
|
u32 spl_boot_device(void) |
||||||
|
{ |
||||||
|
return BOOT_DEVICE_MMC1; |
||||||
|
} |
||||||
|
|
||||||
|
#ifdef CONFIG_SPL_LOAD_FIT |
||||||
|
int board_fit_config_name_match(const char *name) |
||||||
|
{ |
||||||
|
/* Just empty function now - can't decide what to choose */ |
||||||
|
debug("%s: %s\n", __func__, name); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
#endif |
@ -0,0 +1,157 @@ |
|||||||
|
/*
|
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <common.h> |
||||||
|
#include <asm/arch/clock.h> |
||||||
|
#include <debug_uart.h> |
||||||
|
#include <dm.h> |
||||||
|
#include <ram.h> |
||||||
|
#include <spl.h> |
||||||
|
#include <asm/io.h> |
||||||
|
#include <asm/arch/bootrom.h> |
||||||
|
#include <asm/arch/cru_rk3368.h> |
||||||
|
#include <asm/arch/grf_rk3368.h> |
||||||
|
#include <asm/arch/hardware.h> |
||||||
|
#include <asm/arch/timer.h> |
||||||
|
#include <syscon.h> |
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR; |
||||||
|
|
||||||
|
/*
|
||||||
|
* The SPL (and also the full U-Boot stage on the RK3368) will run in |
||||||
|
* secure mode (i.e. EL3) and an ATF will eventually be booted before |
||||||
|
* starting up the operating system... so we can initialize the SGRF |
||||||
|
* here and rely on the ATF installing the final (secure) policy |
||||||
|
* later. |
||||||
|
*/ |
||||||
|
static inline uintptr_t sgrf_soc_con_addr(unsigned no) |
||||||
|
{ |
||||||
|
const uintptr_t SGRF_BASE = |
||||||
|
(uintptr_t)syscon_get_first_range(ROCKCHIP_SYSCON_SGRF); |
||||||
|
|
||||||
|
return SGRF_BASE + sizeof(u32) * no; |
||||||
|
} |
||||||
|
|
||||||
|
static inline uintptr_t sgrf_busdmac_addr(unsigned no) |
||||||
|
{ |
||||||
|
const uintptr_t SGRF_BASE = |
||||||
|
(uintptr_t)syscon_get_first_range(ROCKCHIP_SYSCON_SGRF); |
||||||
|
const uintptr_t SGRF_BUSDMAC_OFFSET = 0x100; |
||||||
|
const uintptr_t SGRF_BUSDMAC_BASE = SGRF_BASE + SGRF_BUSDMAC_OFFSET; |
||||||
|
|
||||||
|
return SGRF_BUSDMAC_BASE + sizeof(u32) * no; |
||||||
|
} |
||||||
|
|
||||||
|
static void sgrf_init(void) |
||||||
|
{ |
||||||
|
struct rk3368_cru * const cru = |
||||||
|
(struct rk3368_cru * const)rockchip_get_cru(); |
||||||
|
const u16 SGRF_SOC_CON_SEC = GENMASK(15, 0); |
||||||
|
const u16 SGRF_BUSDMAC_CON0_SEC = BIT(2); |
||||||
|
const u16 SGRF_BUSDMAC_CON1_SEC = GENMASK(15, 12); |
||||||
|
|
||||||
|
/* Set all configurable IP to 'non secure'-mode */ |
||||||
|
rk_setreg(sgrf_soc_con_addr(5), SGRF_SOC_CON_SEC); |
||||||
|
rk_setreg(sgrf_soc_con_addr(6), SGRF_SOC_CON_SEC); |
||||||
|
rk_setreg(sgrf_soc_con_addr(7), SGRF_SOC_CON_SEC); |
||||||
|
|
||||||
|
/*
|
||||||
|
* From rockchip-uboot/arch/arm/cpu/armv8/rk33xx/cpu.c |
||||||
|
* Original comment: "ddr space set no secure mode" |
||||||
|
*/ |
||||||
|
rk_clrreg(sgrf_soc_con_addr(8), SGRF_SOC_CON_SEC); |
||||||
|
rk_clrreg(sgrf_soc_con_addr(9), SGRF_SOC_CON_SEC); |
||||||
|
rk_clrreg(sgrf_soc_con_addr(10), SGRF_SOC_CON_SEC); |
||||||
|
|
||||||
|
/* Set 'secure dma' to 'non secure'-mode */ |
||||||
|
rk_setreg(sgrf_busdmac_addr(0), SGRF_BUSDMAC_CON0_SEC); |
||||||
|
rk_setreg(sgrf_busdmac_addr(1), SGRF_BUSDMAC_CON1_SEC); |
||||||
|
|
||||||
|
dsb(); /* barrier */ |
||||||
|
|
||||||
|
rk_setreg(&cru->softrst_con[1], DMA1_SRST_REQ); |
||||||
|
rk_setreg(&cru->softrst_con[4], DMA2_SRST_REQ); |
||||||
|
|
||||||
|
dsb(); /* barrier */ |
||||||
|
udelay(10); |
||||||
|
|
||||||
|
rk_clrreg(&cru->softrst_con[1], DMA1_SRST_REQ); |
||||||
|
rk_clrreg(&cru->softrst_con[4], DMA2_SRST_REQ); |
||||||
|
} |
||||||
|
|
||||||
|
void board_debug_uart_init(void) |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* N.B.: This is called before the device-model has been |
||||||
|
* initialised. For this reason, we can not access |
||||||
|
* the GRF address range using the syscon API. |
||||||
|
*/ |
||||||
|
struct rk3368_grf * const grf = |
||||||
|
(struct rk3368_grf * const)0xff770000; |
||||||
|
|
||||||
|
enum { |
||||||
|
GPIO2D1_MASK = GENMASK(3, 2), |
||||||
|
GPIO2D1_GPIO = 0, |
||||||
|
GPIO2D1_UART0_SOUT = (1 << 2), |
||||||
|
|
||||||
|
GPIO2D0_MASK = GENMASK(1, 0), |
||||||
|
GPIO2D0_GPIO = 0, |
||||||
|
GPIO2D0_UART0_SIN = (1 << 0), |
||||||
|
}; |
||||||
|
|
||||||
|
#if defined(CONFIG_DEBUG_UART_BASE) && (CONFIG_DEBUG_UART_BASE == 0xff180000) |
||||||
|
/* Enable early UART0 on the RK3368 */ |
||||||
|
rk_clrsetreg(&grf->gpio2d_iomux, |
||||||
|
GPIO2D0_MASK, GPIO2D0_UART0_SIN); |
||||||
|
rk_clrsetreg(&grf->gpio2d_iomux, |
||||||
|
GPIO2D1_MASK, GPIO2D1_UART0_SOUT); |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void board_init_f(ulong dummy) |
||||||
|
{ |
||||||
|
struct udevice *dev; |
||||||
|
int ret; |
||||||
|
|
||||||
|
#define EARLY_UART |
||||||
|
#ifdef EARLY_UART |
||||||
|
/*
|
||||||
|
* Debug UART can be used from here if required: |
||||||
|
* |
||||||
|
* debug_uart_init(); |
||||||
|
* printch('a'); |
||||||
|
* printhex8(0x1234); |
||||||
|
* printascii("string"); |
||||||
|
*/ |
||||||
|
debug_uart_init(); |
||||||
|
printascii("U-Boot TPL board init\n"); |
||||||
|
#endif |
||||||
|
|
||||||
|
ret = spl_early_init(); |
||||||
|
if (ret) { |
||||||
|
debug("spl_early_init() failed: %d\n", ret); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
|
||||||
|
/* Reset security, so we can use DMA in the MMC drivers */ |
||||||
|
sgrf_init(); |
||||||
|
|
||||||
|
ret = uclass_get_device(UCLASS_RAM, 0, &dev); |
||||||
|
if (ret) { |
||||||
|
debug("DRAM init failed: %d\n", ret); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void board_return_to_bootrom(void) |
||||||
|
{ |
||||||
|
back_to_bootrom(); |
||||||
|
} |
||||||
|
|
||||||
|
u32 spl_boot_device(void) |
||||||
|
{ |
||||||
|
return BOOT_DEVICE_BOOTROM; |
||||||
|
} |
@ -1,60 +0,0 @@ |
|||||||
/*
|
|
||||||
* (C) Copyright 2016 Rockchip Electronics Co., Ltd. |
|
||||||
* |
|
||||||
* SPDX-License-Identifier: GPL-2.0 |
|
||||||
*/ |
|
||||||
|
|
||||||
#include <common.h> |
|
||||||
#include <dm.h> |
|
||||||
#include <ram.h> |
|
||||||
#include <syscon.h> |
|
||||||
#include <asm/arch/clock.h> |
|
||||||
#include <asm/arch/grf_rk3368.h> |
|
||||||
#include <asm/arch/sdram_common.h> |
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR; |
|
||||||
struct dram_info { |
|
||||||
struct ram_info info; |
|
||||||
struct rk3368_pmu_grf *pmugrf; |
|
||||||
}; |
|
||||||
|
|
||||||
static int rk3368_dmc_probe(struct udevice *dev) |
|
||||||
{ |
|
||||||
struct dram_info *priv = dev_get_priv(dev); |
|
||||||
|
|
||||||
priv->pmugrf = syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF); |
|
||||||
debug("%s: grf=%p\n", __func__, priv->pmugrf); |
|
||||||
priv->info.base = CONFIG_SYS_SDRAM_BASE; |
|
||||||
priv->info.size = rockchip_sdram_size( |
|
||||||
(phys_addr_t)&priv->pmugrf->os_reg[2]); |
|
||||||
|
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
static int rk3368_dmc_get_info(struct udevice *dev, struct ram_info *info) |
|
||||||
{ |
|
||||||
struct dram_info *priv = dev_get_priv(dev); |
|
||||||
|
|
||||||
*info = priv->info; |
|
||||||
|
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
static struct ram_ops rk3368_dmc_ops = { |
|
||||||
.get_info = rk3368_dmc_get_info, |
|
||||||
}; |
|
||||||
|
|
||||||
|
|
||||||
static const struct udevice_id rk3368_dmc_ids[] = { |
|
||||||
{ .compatible = "rockchip,rk3368-dmc" }, |
|
||||||
{ } |
|
||||||
}; |
|
||||||
|
|
||||||
U_BOOT_DRIVER(dmc_rk3368) = { |
|
||||||
.name = "rockchip_rk3368_dmc", |
|
||||||
.id = UCLASS_RAM, |
|
||||||
.of_match = rk3368_dmc_ids, |
|
||||||
.ops = &rk3368_dmc_ops, |
|
||||||
.probe = rk3368_dmc_probe, |
|
||||||
.priv_auto_alloc_size = sizeof(struct dram_info), |
|
||||||
}; |
|
@ -0,0 +1,13 @@ |
|||||||
|
/* |
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
|
||||||
|
#undef CONFIG_SPL_TEXT_BASE |
||||||
|
#define CONFIG_SPL_TEXT_BASE CONFIG_TPL_TEXT_BASE |
||||||
|
|
||||||
|
#undef CONFIG_SPL_MAX_SIZE |
||||||
|
#define CONFIG_SPL_MAX_SIZE CONFIG_TPL_MAX_SIZE |
||||||
|
|
||||||
|
#include "../../cpu/armv8/u-boot-spl.lds" |
@ -0,0 +1,108 @@ |
|||||||
|
/*
|
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <common.h> |
||||||
|
#include <dm.h> |
||||||
|
#include <mmc.h> |
||||||
|
#include <spl.h> |
||||||
|
|
||||||
|
#if CONFIG_IS_ENABLED(OF_CONTROL) |
||||||
|
static int spl_node_to_boot_device(int node) |
||||||
|
{ |
||||||
|
struct udevice *parent; |
||||||
|
|
||||||
|
/*
|
||||||
|
* This should eventually move into the SPL code, once SPL becomes |
||||||
|
* aware of the block-device layer. Until then (and to avoid unneeded |
||||||
|
* delays in getting this feature out, it lives at the board-level). |
||||||
|
*/ |
||||||
|
if (!uclass_get_device_by_of_offset(UCLASS_MMC, node, &parent)) { |
||||||
|
struct udevice *dev; |
||||||
|
struct blk_desc *desc = NULL; |
||||||
|
|
||||||
|
for (device_find_first_child(parent, &dev); |
||||||
|
dev; |
||||||
|
device_find_next_child(&dev)) { |
||||||
|
if (device_get_uclass_id(dev) == UCLASS_BLK) { |
||||||
|
desc = dev_get_uclass_platdata(dev); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!desc) |
||||||
|
return -ENOENT; |
||||||
|
|
||||||
|
switch (desc->devnum) { |
||||||
|
case 0: |
||||||
|
return BOOT_DEVICE_MMC1; |
||||||
|
case 1: |
||||||
|
return BOOT_DEVICE_MMC2; |
||||||
|
default: |
||||||
|
return -ENOSYS; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* SPL doesn't differentiate SPI flashes, so we keep the detection |
||||||
|
* brief and inaccurate... hopefully, the common SPL layer can be |
||||||
|
* extended with awareness of the BLK layer (and matching OF_CONTROL) |
||||||
|
* soon. |
||||||
|
*/ |
||||||
|
if (!uclass_get_device_by_of_offset(UCLASS_SPI_FLASH, node, &parent)) |
||||||
|
return BOOT_DEVICE_SPI; |
||||||
|
|
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
void board_boot_order(u32 *spl_boot_list) |
||||||
|
{ |
||||||
|
const void *blob = gd->fdt_blob; |
||||||
|
int chosen_node = fdt_path_offset(blob, "/chosen"); |
||||||
|
int idx = 0; |
||||||
|
int elem; |
||||||
|
int boot_device; |
||||||
|
int node; |
||||||
|
const char *conf; |
||||||
|
|
||||||
|
if (chosen_node < 0) { |
||||||
|
debug("%s: /chosen not found, using spl_boot_device()\n", |
||||||
|
__func__); |
||||||
|
spl_boot_list[0] = spl_boot_device(); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
for (elem = 0; |
||||||
|
(conf = fdt_stringlist_get(blob, chosen_node, |
||||||
|
"u-boot,spl-boot-order", elem, NULL)); |
||||||
|
elem++) { |
||||||
|
/* First check if the list element is an alias */ |
||||||
|
const char *alias = fdt_get_alias(blob, conf); |
||||||
|
if (alias) |
||||||
|
conf = alias; |
||||||
|
|
||||||
|
/* Try to resolve the config item (or alias) as a path */ |
||||||
|
node = fdt_path_offset(blob, conf); |
||||||
|
if (node < 0) { |
||||||
|
debug("%s: could not find %s in FDT", __func__, conf); |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
/* Try to map this back onto SPL boot devices */ |
||||||
|
boot_device = spl_node_to_boot_device(node); |
||||||
|
if (boot_device < 0) { |
||||||
|
debug("%s: could not map node @%x to a boot-device\n", |
||||||
|
__func__, node); |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
spl_boot_list[idx++] = boot_device; |
||||||
|
} |
||||||
|
|
||||||
|
/* If we had no matches, fall back to spl_boot_device */ |
||||||
|
if (idx == 0) |
||||||
|
spl_boot_list[0] = spl_boot_device(); |
||||||
|
} |
||||||
|
#endif |
@ -0,0 +1,15 @@ |
|||||||
|
if TARGET_LION_RK3368 |
||||||
|
|
||||||
|
config SYS_BOARD |
||||||
|
default "lion_rk3368" |
||||||
|
|
||||||
|
config SYS_VENDOR |
||||||
|
default "theobroma-systems" |
||||||
|
|
||||||
|
config SYS_CONFIG_NAME |
||||||
|
default "lion_rk3368" |
||||||
|
|
||||||
|
config BOARD_SPECIFIC_OPTIONS # dummy |
||||||
|
def_bool y |
||||||
|
|
||||||
|
endif |
@ -0,0 +1,10 @@ |
|||||||
|
LION-RK3368 (RK3368-uQ7 system-on-module) |
||||||
|
M: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> |
||||||
|
M: Klaus Goger <klaus.goger@theobroma-systems.com> |
||||||
|
S: Maintained |
||||||
|
F: board/theobroma-systems/lion_rk3368 |
||||||
|
F: include/configs/lion_rk3368.h |
||||||
|
F: arch/arm/dts/rk3368-lion.dts |
||||||
|
F: configs/lion-rk3368_defconfig |
||||||
|
W: https://www.theobroma-systems.com/rk3368-uq7/tech-specs |
||||||
|
T: git git://git.theobroma-systems.com/lion-u-boot.git |
@ -0,0 +1,7 @@ |
|||||||
|
#
|
||||||
|
# Copyright (c) 2017 Theobroma Systems Design und Consulting GmbH
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y += lion_rk3368.o
|
@ -0,0 +1,60 @@ |
|||||||
|
Here is the step-by-step to boot to U-Boot on RK3368-uQ7 |
||||||
|
|
||||||
|
Get the Source and build ATF |
||||||
|
============================ |
||||||
|
|
||||||
|
> git clone git://git.theobroma-systems.com/arm-trusted-firmware.git |
||||||
|
> cd arm-trusted-firmware |
||||||
|
> make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3368 bl31 |
||||||
|
> cp build/rk3368/release/bl31.bin ../u-boot/bl31-rk3368.bin |
||||||
|
|
||||||
|
Configure U-Boot |
||||||
|
================ |
||||||
|
|
||||||
|
> cd ../u-boot |
||||||
|
> make lion-rk3368_defconfig |
||||||
|
|
||||||
|
Build the TPL/SPL stage |
||||||
|
======================= |
||||||
|
|
||||||
|
> make CROSS_COMPILE=aarch64-unknown-elf- ARCH=arm |
||||||
|
> tools/mkimage -n rk3368 -T rksd -d tpl/u-boot-tpl.bin spl-3368.img |
||||||
|
> cat spl/u-boot-spl-dtb.bin >> spl-3368.img |
||||||
|
|
||||||
|
Build the full U-Boot and a FIT image including the ATF |
||||||
|
======================================================= |
||||||
|
|
||||||
|
> make CROSS_COMPILE=aarch64-unknown-elf- ARCH=arm u-boot.itb |
||||||
|
|
||||||
|
Write to a SD-card |
||||||
|
================== |
||||||
|
|
||||||
|
> dd if=spl-3368.img of=/dev/sdb seek=64 |
||||||
|
> dd if=u-boot.itb of=/dev/sdb seek=512 |
||||||
|
|
||||||
|
|
||||||
|
If everything went according to plan, you should see the following |
||||||
|
output on UART0: |
||||||
|
|
||||||
|
<debug_uart> U-Boot TPL board init |
||||||
|
Trying to boot from BOOTROM |
||||||
|
Returning to boot ROM... |
||||||
|
Trying to boot from MMC1 |
||||||
|
NOTICE: BL31: v1.3(release):v1.2-1320-gbf43a443 |
||||||
|
NOTICE: BL31: Built : 18:04:47, Jul 5 2017 |
||||||
|
|
||||||
|
|
||||||
|
U-Boot 2017.07-00158-g2395e99858 (Jul 18 2017 - 21:03:31 +0200) |
||||||
|
|
||||||
|
Model: Theobroma Systems RK3368-uQ7 SoM |
||||||
|
DRAM: 2 GiB |
||||||
|
MMC: dwmmc@ff0c0000: 1, dwmmc@ff0f0000: 0 |
||||||
|
Using default environment |
||||||
|
|
||||||
|
In: serial@ff180000 |
||||||
|
Out: serial@ff180000 |
||||||
|
Err: serial@ff180000 |
||||||
|
Net: |
||||||
|
Warning: ethernet@ff290000 (eth0) using random MAC address - d2:69:35:7e:d0:1e |
||||||
|
eth0: ethernet@ff290000 |
||||||
|
Hit any key to stop autoboot: 2 |
@ -0,0 +1,51 @@ |
|||||||
|
/* |
||||||
|
* 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, DTB"; |
||||||
|
#address-cells = <1>; |
||||||
|
|
||||||
|
images { |
||||||
|
uboot { |
||||||
|
description = "U-Boot (64-bit)"; |
||||||
|
data = /incbin/("../../../u-boot-nodtb.bin"); |
||||||
|
type = "standalone"; |
||||||
|
arch = "arm64"; |
||||||
|
compression = "none"; |
||||||
|
load = <0x00200000>; |
||||||
|
}; |
||||||
|
atf { |
||||||
|
description = "ARM Trusted Firmware"; |
||||||
|
data = /incbin/("../../../bl31-rk3368.bin"); |
||||||
|
type = "firmware"; |
||||||
|
arch = "arm64"; |
||||||
|
compression = "none"; |
||||||
|
load = <0x00010000>; |
||||||
|
entry = <0x00010000>; |
||||||
|
}; |
||||||
|
|
||||||
|
fdt { |
||||||
|
description = "RK3368-uQ7 (Lion) flat device-tree"; |
||||||
|
data = /incbin/("../../../u-boot.dtb"); |
||||||
|
type = "flat_dt"; |
||||||
|
compression = "none"; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
configurations { |
||||||
|
default = "conf"; |
||||||
|
conf { |
||||||
|
description = "Theobroma Systems RK3368-uQ7 (Puma) SoM"; |
||||||
|
firmware = "uboot"; |
||||||
|
loadables = "atf"; |
||||||
|
fdt = "fdt"; |
||||||
|
}; |
||||||
|
}; |
||||||
|
}; |
@ -0,0 +1,25 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017 Theobroma Systems Design und Consulting GmbH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
#include <common.h> |
||||||
|
#include <dm.h> |
||||||
|
#include <ram.h> |
||||||
|
#include <asm/io.h> |
||||||
|
#include <asm/arch/clock.h> |
||||||
|
#include <asm/arch/grf_rk3368.h> |
||||||
|
#include <asm/arch/timer.h> |
||||||
|
#include <syscon.h> |
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR; |
||||||
|
|
||||||
|
int mach_cpu_init(void) |
||||||
|
{ |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
int board_init(void) |
||||||
|
{ |
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (C) 2017 Theobroma Systems Design und Consulting GmH |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <common.h> |
||||||
|
#include <spl.h> |
||||||
|
|
||||||
|
__weak void board_return_to_bootrom(void) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
static int spl_return_to_bootrom(struct spl_image_info *spl_image, |
||||||
|
struct spl_boot_device *bootdev) |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* If the board implements a way to return to its ROM (with |
||||||
|
* the expectation that the next stage of will be booted by |
||||||
|
* the ROM), it will implement board_return_to_bootrom() and |
||||||
|
* should not return from it. |
||||||
|
*/ |
||||||
|
board_return_to_bootrom(); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
SPL_LOAD_IMAGE_METHOD("BOOTROM", 0, BOOT_DEVICE_BOOTROM, spl_return_to_bootrom); |
@ -0,0 +1,95 @@ |
|||||||
|
CONFIG_ARM=y |
||||||
|
CONFIG_ARCH_ROCKCHIP=y |
||||||
|
CONFIG_SPL_LIBCOMMON_SUPPORT=y |
||||||
|
CONFIG_SPL_LIBGENERIC_SUPPORT=y |
||||||
|
CONFIG_SYS_MALLOC_F_LEN=0x2000 |
||||||
|
CONFIG_ROCKCHIP_RK3368=y |
||||||
|
CONFIG_ROCKCHIP_SPL_RESERVE_IRAM=0x0 |
||||||
|
CONFIG_TPL_LIBCOMMON_SUPPORT=y |
||||||
|
CONFIG_TPL_LIBGENERIC_SUPPORT=y |
||||||
|
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y |
||||||
|
CONFIG_SPL_SPI_FLASH_SUPPORT=y |
||||||
|
CONFIG_SPL_SPI_SUPPORT=y |
||||||
|
CONFIG_SPL_STACK_R_ADDR=0x600000 |
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="rk3368-lion" |
||||||
|
CONFIG_SMBIOS_PRODUCT_NAME="sheep_rk3368" |
||||||
|
CONFIG_DEBUG_UART=y |
||||||
|
CONFIG_FIT=y |
||||||
|
CONFIG_FIT_VERBOSE=y |
||||||
|
CONFIG_SPL_LOAD_FIT=y |
||||||
|
CONFIG_SPL_FIT_SOURCE="board/theobroma-systems/lion_rk3368/fit_spl_atf.its" |
||||||
|
CONFIG_ENV_IS_IN_MMC=y |
||||||
|
# CONFIG_DISPLAY_CPUINFO is not set |
||||||
|
CONFIG_ARCH_EARLY_INIT_R=y |
||||||
|
CONFIG_SPL=y |
||||||
|
CONFIG_SPL_BOOTROM_SUPPORT=y |
||||||
|
# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set |
||||||
|
# CONFIG_SPL_LEGACY_IMAGE_SUPPORT is not set |
||||||
|
CONFIG_TPL_SYS_MALLOC_SIMPLE=y |
||||||
|
CONFIG_SPL_STACK_R=y |
||||||
|
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x200 |
||||||
|
CONFIG_SPL_ATF_SUPPORT=y |
||||||
|
CONFIG_SPL_ATF_TEXT_BASE=0x10000 |
||||||
|
CONFIG_TPL=y |
||||||
|
CONFIG_TPL_BOOTROM_SUPPORT=y |
||||||
|
CONFIG_TPL_DRIVERS_MISC_SUPPORT=y |
||||||
|
CONFIG_FASTBOOT=y |
||||||
|
CONFIG_ANDROID_BOOT_IMAGE=y |
||||||
|
# CONFIG_CMD_IMLS is not set |
||||||
|
CONFIG_CMD_MMC=y |
||||||
|
CONFIG_CMD_SF=y |
||||||
|
CONFIG_CMD_GPIO=y |
||||||
|
CONFIG_CMD_REGULATOR=y |
||||||
|
CONFIG_CMD_MTDPARTS=y |
||||||
|
CONFIG_SPL_OF_CONTROL=y |
||||||
|
CONFIG_TPL_OF_CONTROL=y |
||||||
|
CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names interrupt-parent" |
||||||
|
CONFIG_TPL_OF_PLATDATA=y |
||||||
|
CONFIG_NET_RANDOM_ETHADDR=y |
||||||
|
CONFIG_TPL_DM=y |
||||||
|
CONFIG_REGMAP=y |
||||||
|
CONFIG_SPL_REGMAP=y |
||||||
|
CONFIG_TPL_REGMAP=y |
||||||
|
CONFIG_SYSCON=y |
||||||
|
CONFIG_SPL_SYSCON=y |
||||||
|
CONFIG_TPL_SYSCON=y |
||||||
|
CONFIG_CLK=y |
||||||
|
CONFIG_SPL_CLK=y |
||||||
|
CONFIG_TPL_CLK=y |
||||||
|
CONFIG_ROCKCHIP_GPIO=y |
||||||
|
CONFIG_MMC_DW=y |
||||||
|
CONFIG_MMC_DW_ROCKCHIP=y |
||||||
|
CONFIG_SPI_FLASH=y |
||||||
|
CONFIG_SPI_FLASH_MACRONIX=y |
||||||
|
CONFIG_SPI_FLASH_WINBOND=y |
||||||
|
CONFIG_PHY_MICREL=y |
||||||
|
CONFIG_PHY_MICREL_KSZ9031=y |
||||||
|
CONFIG_DM_ETH=y |
||||||
|
CONFIG_ETH_DESIGNWARE=y |
||||||
|
CONFIG_RGMII=y |
||||||
|
CONFIG_GMAC_ROCKCHIP=y |
||||||
|
CONFIG_PINCTRL=y |
||||||
|
CONFIG_SPL_PINCTRL=y |
||||||
|
CONFIG_PINCTRL_ROCKCHIP_RK3368=y |
||||||
|
CONFIG_DM_PMIC=y |
||||||
|
CONFIG_PMIC_RK8XX=y |
||||||
|
CONFIG_DM_REGULATOR_FIXED=y |
||||||
|
CONFIG_RAM=y |
||||||
|
CONFIG_SPL_RAM=y |
||||||
|
CONFIG_TPL_RAM=y |
||||||
|
CONFIG_DEBUG_UART_BASE=0xFF180000 |
||||||
|
CONFIG_DEBUG_UART_CLOCK=24000000 |
||||||
|
CONFIG_DEBUG_UART_SHIFT=2 |
||||||
|
CONFIG_DEBUG_UART_ANNOUNCE=y |
||||||
|
CONFIG_DEBUG_UART_SKIP_INIT=y |
||||||
|
CONFIG_ROCKCHIP_SPI=y |
||||||
|
CONFIG_SYSRESET=y |
||||||
|
CONFIG_TIMER=y |
||||||
|
CONFIG_SPL_TIMER=y |
||||||
|
CONFIG_TPL_TIMER=y |
||||||
|
CONFIG_ROCKCHIP_TIMER=y |
||||||
|
CONFIG_USE_TINY_PRINTF=y |
||||||
|
CONFIG_SPL_TINY_MEMSET=y |
||||||
|
CONFIG_LZO=y |
||||||
|
CONFIG_ERRNO_STR=y |
||||||
|
CONFIG_SMBIOS_MANUFACTURER="rockchip" |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue