Merge branch 'master' of git://git.denx.de/u-boot-rockchip

master
Tom Rini 8 years ago
commit c1b62ba9ca
  1. 12
      Kconfig
  2. 3
      Makefile
  3. 12
      arch/arm/Kconfig
  4. 2
      arch/arm/cpu/armv8/Makefile
  5. 22
      arch/arm/cpu/armv8/cache.S
  6. 3
      arch/arm/cpu/armv8/fsl-layerscape/Kconfig
  7. 4
      arch/arm/cpu/armv8/tlb.S
  8. 6
      arch/arm/cpu/armv8/transition.S
  9. 1
      arch/arm/dts/Makefile
  10. 11
      arch/arm/dts/rk3229-evb.dts
  11. 66
      arch/arm/dts/rk322x.dtsi
  12. 34
      arch/arm/dts/rk3368-geekbox-u-boot.dtsi
  13. 93
      arch/arm/dts/rk3368-lion-u-boot.dtsi
  14. 195
      arch/arm/dts/rk3368-lion.dts
  15. 34
      arch/arm/dts/rk3368-px5-evb-u-boot.dtsi
  16. 34
      arch/arm/dts/rk3368-sheep-u-boot.dtsi
  17. 30
      arch/arm/dts/rk3368.dtsi
  18. 2
      arch/arm/include/asm/arch-rockchip/cru_rk3288.h
  19. 15
      arch/arm/include/asm/arch-rockchip/cru_rk3368.h
  20. 187
      arch/arm/include/asm/arch-rockchip/ddr_rk3368.h
  21. 326
      arch/arm/include/asm/arch-rockchip/grf_rk3368.h
  22. 1
      arch/arm/include/asm/spl.h
  23. 4
      arch/arm/lib/crt0_64.S
  24. 4
      arch/arm/mach-at91/Kconfig
  25. 4
      arch/arm/mach-davinci/Kconfig
  26. 3
      arch/arm/mach-exynos/Kconfig
  27. 3
      arch/arm/mach-omap2/Kconfig
  28. 3
      arch/arm/mach-orion5x/Kconfig
  29. 55
      arch/arm/mach-rockchip/Kconfig
  30. 47
      arch/arm/mach-rockchip/Makefile
  31. 4
      arch/arm/mach-rockchip/bootrom.c
  32. 5
      arch/arm/mach-rockchip/rk3188-board-spl.c
  33. 2
      arch/arm/mach-rockchip/rk3188-board.c
  34. 3
      arch/arm/mach-rockchip/rk3188/Kconfig
  35. 4
      arch/arm/mach-rockchip/rk322x-board-spl.c
  36. 4
      arch/arm/mach-rockchip/rk3288-board-spl.c
  37. 4
      arch/arm/mach-rockchip/rk3288-board.c
  38. 78
      arch/arm/mach-rockchip/rk3368-board-spl.c
  39. 157
      arch/arm/mach-rockchip/rk3368-board-tpl.c
  40. 24
      arch/arm/mach-rockchip/rk3368/Kconfig
  41. 1
      arch/arm/mach-rockchip/rk3368/Makefile
  42. 60
      arch/arm/mach-rockchip/rk3368/sdram_rk3368.c
  43. 44
      arch/arm/mach-rockchip/rk3368/syscon_rk3368.c
  44. 13
      arch/arm/mach-rockchip/rk3368/u-boot-tpl.lds
  45. 106
      arch/arm/mach-rockchip/rk3399-board-spl.c
  46. 37
      arch/arm/mach-rockchip/save_boot_param.S
  47. 108
      arch/arm/mach-rockchip/spl-boot-order.c
  48. 3
      arch/arm/mach-sunxi/Kconfig
  49. 3
      arch/arm/mach-zynq/Kconfig
  50. 3
      arch/microblaze/Kconfig
  51. 3
      board/armadeus/apf27/Kconfig
  52. 3
      board/freescale/mx31pdk/Kconfig
  53. 24
      board/rockchip/evb_px5/evb-px5.c
  54. 3
      board/spear/x600/Kconfig
  55. 15
      board/theobroma-systems/lion_rk3368/Kconfig
  56. 10
      board/theobroma-systems/lion_rk3368/MAINTAINERS
  57. 7
      board/theobroma-systems/lion_rk3368/Makefile
  58. 60
      board/theobroma-systems/lion_rk3368/README
  59. 51
      board/theobroma-systems/lion_rk3368/fit_spl_atf.its
  60. 25
      board/theobroma-systems/lion_rk3368/lion_rk3368.c
  61. 2
      board/theobroma-systems/puma_rk3399/README
  62. 20
      board/theobroma-systems/puma_rk3399/fit_spl_atf.its
  63. 10
      common/Makefile
  64. 116
      common/spl/Kconfig
  65. 35
      common/spl/Makefile
  66. 7
      common/spl/spl.c
  67. 27
      common/spl/spl_bootrom.c
  68. 3
      configs/C29XPCIE_NAND_defconfig
  69. 4
      configs/P1010RDB-PA_36BIT_NAND_defconfig
  70. 4
      configs/P1010RDB-PA_NAND_defconfig
  71. 4
      configs/P1010RDB-PB_36BIT_NAND_defconfig
  72. 3
      configs/P1010RDB-PB_NAND_defconfig
  73. 3
      configs/P1020RDB-PC_36BIT_NAND_defconfig
  74. 3
      configs/P1020RDB-PC_NAND_defconfig
  75. 3
      configs/P1020RDB-PD_NAND_defconfig
  76. 3
      configs/P1021RDB-PC_36BIT_NAND_defconfig
  77. 3
      configs/P1021RDB-PC_NAND_defconfig
  78. 3
      configs/P1022DS_36BIT_NAND_defconfig
  79. 2
      configs/P1022DS_NAND_defconfig
  80. 3
      configs/P1024RDB_NAND_defconfig
  81. 2
      configs/P1025RDB_NAND_defconfig
  82. 2
      configs/P2020RDB-PC_36BIT_NAND_defconfig
  83. 3
      configs/P2020RDB-PC_NAND_defconfig
  84. 2
      configs/chromebook_link64_defconfig
  85. 1
      configs/evb-px5_defconfig
  86. 2
      configs/evb-rk3229_defconfig
  87. 2
      configs/evb-rk3288_defconfig
  88. 2
      configs/fennec-rk3288_defconfig
  89. 2
      configs/firefly-rk3288_defconfig
  90. 1
      configs/geekbox_defconfig
  91. 95
      configs/lion-rk3368_defconfig
  92. 2
      configs/miqi-rk3288_defconfig
  93. 2
      configs/phycore-rk3288_defconfig
  94. 2
      configs/popmetal-rk3288_defconfig
  95. 2
      configs/qemu-x86_64_defconfig
  96. 2
      configs/rock2_defconfig
  97. 4
      configs/rock_defconfig
  98. 1
      configs/sheep-rk3368_defconfig
  99. 2
      configs/tinker-rk3288_defconfig
  100. 2
      doc/README.rockchip
  101. Some files were not shown because too many files have changed in this diff Show More

@ -96,7 +96,17 @@ config SYS_MALLOC_F_LEN
initial serial device and any others that are needed. initial serial device and any others that are needed.
config SPL_SYS_MALLOC_F_LEN config SPL_SYS_MALLOC_F_LEN
hex "Size of malloc() pool in spl before relocation" hex "Size of malloc() pool in SPL before relocation"
depends on SYS_MALLOC_F
default SYS_MALLOC_F_LEN
help
Before relocation, memory is very limited on many platforms. Still,
we can provide a small malloc() pool if needed. Driver model in
particular needs this to operate, so that it can allocate the
initial serial device and any others that are needed.
config TPL_SYS_MALLOC_F_LEN
hex "Size of malloc() pool in TPL before relocation"
depends on SYS_MALLOC_F depends on SYS_MALLOC_F
default SYS_MALLOC_F_LEN default SYS_MALLOC_F_LEN
help help

@ -1400,7 +1400,8 @@ u-boot.lds: $(LDSCRIPT) prepare FORCE
spl/u-boot-spl.bin: spl/u-boot-spl spl/u-boot-spl.bin: spl/u-boot-spl
@: @:
spl/u-boot-spl: tools prepare \ spl/u-boot-spl: tools prepare \
$(if $(CONFIG_OF_SEPARATE)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) $(if $(CONFIG_OF_SEPARATE)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) \
$(if $(CONFIG_OF_SEPARATE)$(CONFIG_TPL_OF_PLATDATA),dts/dt.dtb)
$(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all $(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all
spl/sunxi-spl.bin: spl/u-boot-spl spl/sunxi-spl.bin: spl/u-boot-spl

@ -618,6 +618,11 @@ config ARCH_MX6
select SYS_FSL_SEC_LE select SYS_FSL_SEC_LE
select SYS_THUMB_BUILD if SPL select SYS_THUMB_BUILD if SPL
if ARCH_MX6
config SPL_LDSCRIPT
default "arch/arm/mach-omap2/u-boot-spl.lds"
endif
config ARCH_MX5 config ARCH_MX5
bool "Freescale MX5" bool "Freescale MX5"
select CPU_V7 select CPU_V7
@ -1233,3 +1238,10 @@ source "board/zipitz2/Kconfig"
source "arch/arm/Kconfig.debug" source "arch/arm/Kconfig.debug"
endmenu endmenu
config SPL_LDSCRIPT
default "arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds" if TARGET_APX4DEVKIT || TARGET_BG0900 || TARGET_M28EVK || TARGET_MX23_OLINUXINO || TARGET_MX23EVK || TARGET_MX28EVK || TARGET_SANSA_FUZE_PLUS || TARGET_SC_SPS_1 || TARGET_TS4600 || TARGET_XFI3
default "arch/arm/cpu/arm1136/u-boot-spl.lds" if CPU_ARM1136
default "arch/arm/cpu/armv8/u-boot-spl.lds" if ARM64

@ -8,7 +8,9 @@
extra-y := start.o extra-y := start.o
obj-y += cpu.o obj-y += cpu.o
ifndef CONFIG_$(SPL_TPL_)TIMER
obj-y += generic_timer.o obj-y += generic_timer.o
endif
obj-y += cache_v8.o obj-y += cache_v8.o
obj-y += exceptions.o obj-y += exceptions.o
obj-y += cache.o obj-y += cache.o

@ -22,6 +22,7 @@
* x1: 0 clean & invalidate, 1 invalidate only * x1: 0 clean & invalidate, 1 invalidate only
* x2~x9: clobbered * x2~x9: clobbered
*/ */
.pushsection .text.__asm_dcache_level, "ax"
ENTRY(__asm_dcache_level) ENTRY(__asm_dcache_level)
lsl x12, x0, #1 lsl x12, x0, #1
msr csselr_el1, x12 /* select cache level */ msr csselr_el1, x12 /* select cache level */
@ -58,6 +59,7 @@ loop_way:
ret ret
ENDPROC(__asm_dcache_level) ENDPROC(__asm_dcache_level)
.popsection
/* /*
* void __asm_flush_dcache_all(int invalidate_only) * void __asm_flush_dcache_all(int invalidate_only)
@ -66,6 +68,7 @@ ENDPROC(__asm_dcache_level)
* *
* flush or invalidate all data cache by SET/WAY. * flush or invalidate all data cache by SET/WAY.
*/ */
.pushsection .text.__asm_dcache_all, "ax"
ENTRY(__asm_dcache_all) ENTRY(__asm_dcache_all)
mov x1, x0 mov x1, x0
dsb sy dsb sy
@ -102,16 +105,21 @@ skip:
finished: finished:
ret ret
ENDPROC(__asm_dcache_all) ENDPROC(__asm_dcache_all)
.popsection
.pushsection .text.__asm_flush_dcache_all, "ax"
ENTRY(__asm_flush_dcache_all) ENTRY(__asm_flush_dcache_all)
mov x0, #0 mov x0, #0
b __asm_dcache_all b __asm_dcache_all
ENDPROC(__asm_flush_dcache_all) ENDPROC(__asm_flush_dcache_all)
.popsection
.pushsection .text.__asm_invalidate_dcache_all, "ax"
ENTRY(__asm_invalidate_dcache_all) ENTRY(__asm_invalidate_dcache_all)
mov x0, #0x1 mov x0, #0x1
b __asm_dcache_all b __asm_dcache_all
ENDPROC(__asm_invalidate_dcache_all) ENDPROC(__asm_invalidate_dcache_all)
.popsection
/* /*
* void __asm_flush_dcache_range(start, end) * void __asm_flush_dcache_range(start, end)
@ -121,6 +129,7 @@ ENDPROC(__asm_invalidate_dcache_all)
* x0: start address * x0: start address
* x1: end address * x1: end address
*/ */
.pushsection .text.__asm_flush_dcache_range, "ax"
ENTRY(__asm_flush_dcache_range) ENTRY(__asm_flush_dcache_range)
mrs x3, ctr_el0 mrs x3, ctr_el0
lsr x3, x3, #16 lsr x3, x3, #16
@ -138,6 +147,7 @@ ENTRY(__asm_flush_dcache_range)
dsb sy dsb sy
ret ret
ENDPROC(__asm_flush_dcache_range) ENDPROC(__asm_flush_dcache_range)
.popsection
/* /*
* void __asm_invalidate_dcache_range(start, end) * void __asm_invalidate_dcache_range(start, end)
* *
@ -146,6 +156,7 @@ ENDPROC(__asm_flush_dcache_range)
* x0: start address * x0: start address
* x1: end address * x1: end address
*/ */
.pushsection .text.__asm_invalidate_dcache_range, "ax"
ENTRY(__asm_invalidate_dcache_range) ENTRY(__asm_invalidate_dcache_range)
mrs x3, ctr_el0 mrs x3, ctr_el0
ubfm x3, x3, #16, #19 ubfm x3, x3, #16, #19
@ -162,41 +173,51 @@ ENTRY(__asm_invalidate_dcache_range)
dsb sy dsb sy
ret ret
ENDPROC(__asm_invalidate_dcache_range) ENDPROC(__asm_invalidate_dcache_range)
.popsection
/* /*
* void __asm_invalidate_icache_all(void) * void __asm_invalidate_icache_all(void)
* *
* invalidate all tlb entries. * invalidate all tlb entries.
*/ */
.pushsection .text.__asm_invalidate_icache_all, "ax"
ENTRY(__asm_invalidate_icache_all) ENTRY(__asm_invalidate_icache_all)
ic ialluis ic ialluis
isb sy isb sy
ret ret
ENDPROC(__asm_invalidate_icache_all) ENDPROC(__asm_invalidate_icache_all)
.popsection
.pushsection .text.__asm_invalidate_l3_dcache, "ax"
ENTRY(__asm_invalidate_l3_dcache) ENTRY(__asm_invalidate_l3_dcache)
mov x0, #0 /* return status as success */ mov x0, #0 /* return status as success */
ret ret
ENDPROC(__asm_invalidate_l3_dcache) ENDPROC(__asm_invalidate_l3_dcache)
.weak __asm_invalidate_l3_dcache .weak __asm_invalidate_l3_dcache
.popsection
.pushsection .text.__asm_flush_l3_dcache, "ax"
ENTRY(__asm_flush_l3_dcache) ENTRY(__asm_flush_l3_dcache)
mov x0, #0 /* return status as success */ mov x0, #0 /* return status as success */
ret ret
ENDPROC(__asm_flush_l3_dcache) ENDPROC(__asm_flush_l3_dcache)
.weak __asm_flush_l3_dcache .weak __asm_flush_l3_dcache
.popsection
.pushsection .text.__asm_invalidate_l3_icache, "ax"
ENTRY(__asm_invalidate_l3_icache) ENTRY(__asm_invalidate_l3_icache)
mov x0, #0 /* return status as success */ mov x0, #0 /* return status as success */
ret ret
ENDPROC(__asm_invalidate_l3_icache) ENDPROC(__asm_invalidate_l3_icache)
.weak __asm_invalidate_l3_icache .weak __asm_invalidate_l3_icache
.popsection
/* /*
* void __asm_switch_ttbr(ulong new_ttbr) * void __asm_switch_ttbr(ulong new_ttbr)
* *
* Safely switches to a new page table. * Safely switches to a new page table.
*/ */
.pushsection .text.__asm_switch_ttbr, "ax"
ENTRY(__asm_switch_ttbr) ENTRY(__asm_switch_ttbr)
/* x2 = SCTLR (alive throghout the function) */ /* x2 = SCTLR (alive throghout the function) */
switch_el x4, 3f, 2f, 1f switch_el x4, 3f, 2f, 1f
@ -244,3 +265,4 @@ ENTRY(__asm_switch_ttbr)
ret x3 ret x3
ENDPROC(__asm_switch_ttbr) ENDPROC(__asm_switch_ttbr)
.popsection

@ -393,3 +393,6 @@ config SYS_MC_RSV_MEM_ALIGN
help help
Reserved memory needs to be aligned for MC to use. Default value Reserved memory needs to be aligned for MC to use. Default value
is 512MB. is 512MB.
config SPL_LDSCRIPT
default "arch/arm/cpu/armv8/u-boot-spl.lds" if ARCH_LS1043A || ARCH_LS1046A || ARCH_LS2080A

@ -14,7 +14,8 @@
* void __asm_invalidate_tlb_all(void) * void __asm_invalidate_tlb_all(void)
* *
* invalidate all tlb entries. * invalidate all tlb entries.
*/ */
.pushsection .text.__asm_invalidate_tlb_all, "ax"
ENTRY(__asm_invalidate_tlb_all) ENTRY(__asm_invalidate_tlb_all)
switch_el x9, 3f, 2f, 1f switch_el x9, 3f, 2f, 1f
3: tlbi alle3 3: tlbi alle3
@ -31,3 +32,4 @@ ENTRY(__asm_invalidate_tlb_all)
0: 0:
ret ret
ENDPROC(__asm_invalidate_tlb_all) ENDPROC(__asm_invalidate_tlb_all)
.popsection

@ -10,6 +10,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/macro.h> #include <asm/macro.h>
.pushsection .text.armv8_switch_to_el2, "ax"
ENTRY(armv8_switch_to_el2) ENTRY(armv8_switch_to_el2)
switch_el x6, 1f, 0f, 0f switch_el x6, 1f, 0f, 0f
0: 0:
@ -30,7 +31,9 @@ ENTRY(armv8_switch_to_el2)
br x4 br x4
1: armv8_switch_to_el2_m x4, x5, x6 1: armv8_switch_to_el2_m x4, x5, x6
ENDPROC(armv8_switch_to_el2) ENDPROC(armv8_switch_to_el2)
.popsection
.pushsection .text.armv8_switch_to_el1, "ax"
ENTRY(armv8_switch_to_el1) ENTRY(armv8_switch_to_el1)
switch_el x6, 0f, 1f, 0f switch_el x6, 0f, 1f, 0f
0: 0:
@ -40,7 +43,10 @@ ENTRY(armv8_switch_to_el1)
br x4 br x4
1: armv8_switch_to_el1_m x4, x5, x6 1: armv8_switch_to_el1_m x4, x5, x6
ENDPROC(armv8_switch_to_el1) ENDPROC(armv8_switch_to_el1)
.popsection
.pushsection .text.armv8_el2_to_aarch32, "ax"
WEAK(armv8_el2_to_aarch32) WEAK(armv8_el2_to_aarch32)
ret ret
ENDPROC(armv8_el2_to_aarch32) ENDPROC(armv8_el2_to_aarch32)
.popsection

@ -42,6 +42,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += \
rk3288-veyron-mickey.dtb \ rk3288-veyron-mickey.dtb \
rk3288-veyron-minnie.dtb \ rk3288-veyron-minnie.dtb \
rk3328-evb.dtb \ rk3328-evb.dtb \
rk3368-lion.dtb \
rk3368-sheep.dtb \ rk3368-sheep.dtb \
rk3368-geekbox.dtb \ rk3368-geekbox.dtb \
rk3368-px5-evb.dtb \ rk3368-px5-evb.dtb \

@ -72,6 +72,17 @@
status = "okay"; status = "okay";
}; };
&sdmmc {
status = "okay";
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
card-detect-delay = <200>;
disable-wp;
num-slots = <1>;
supports-sd;
};
&uart2 { &uart2 {
status = "okay"; status = "okay";
}; };

@ -21,6 +21,8 @@
serial0 = &uart0; serial0 = &uart0;
serial1 = &uart1; serial1 = &uart1;
serial2 = &uart2; serial2 = &uart2;
mmc0 = &emmc;
mmc1 = &sdmmc;
}; };
cpus { cpus {
@ -383,12 +385,38 @@
status = "disabled"; status = "disabled";
}; };
sdmmc: dwmmc@30000000 {
compatible = "rockchip,rk3228-dw-mshc", "rockchip,rk3288-dw-mshc";
reg = <0x30000000 0x4000>;
max-frequency = <150000000>;
interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cru HCLK_SDMMC>, <&cru SCLK_SDMMC>,
<&cru SCLK_SDMMC_DRV>, <&cru SCLK_SDMMC_SAMPLE>;
clock-names = "biu", "ciu", "ciu_drv", "ciu_sample";
fifo-depth = <0x100>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4>;
status = "disabled";
};
sdio: dwmmc@30010000 {
compatible = "rockchip,rk3228-dw-mshc", "rockchip,rk3288-dw-mshc";
reg = <0x30010000 0x4000>;
interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cru HCLK_SDIO>, <&cru SCLK_SDIO>,
<&cru SCLK_SDIO_DRV>, <&cru SCLK_SDIO_SAMPLE>;
clock-names = "biu", "ciu", "ciu_drv", "ciu_sample";
fifo-depth = <0x100>;
pinctrl-names = "default";
pinctrl-0 = <&sdio_clk &sdio_cmd &sdio_bus4>;
status = "disabled";
};
emmc: dwmmc@30020000 { emmc: dwmmc@30020000 {
compatible = "rockchip,rk3288-dw-mshc"; compatible = "rockchip,rk3288-dw-mshc";
reg = <0x30020000 0x4000>; reg = <0x30020000 0x4000>;
max-frequency = <150000000>;
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
clock-frequency = <37500000>;
max-frequency = <37500000>;
clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>, clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>,
<&cru SCLK_EMMC_DRV>, <&cru SCLK_EMMC_SAMPLE>; <&cru SCLK_EMMC_DRV>, <&cru SCLK_EMMC_SAMPLE>;
clock-names = "biu", "ciu", "ciu_drv", "ciu_sample"; clock-names = "biu", "ciu", "ciu_drv", "ciu_sample";
@ -520,6 +548,40 @@
drive-strength = <12>; drive-strength = <12>;
}; };
sdmmc {
sdmmc_clk: sdmmc-clk {
rockchip,pins = <1 16 RK_FUNC_1 &pcfg_pull_none_drv_12ma>;
};
sdmmc_cmd: sdmmc-cmd {
rockchip,pins = <1 15 RK_FUNC_1 &pcfg_pull_none_drv_12ma>;
};
sdmmc_bus4: sdmmc-bus4 {
rockchip,pins = <1 18 RK_FUNC_1 &pcfg_pull_none_drv_12ma>,
<1 19 RK_FUNC_1 &pcfg_pull_none_drv_12ma>,
<1 20 RK_FUNC_1 &pcfg_pull_none_drv_12ma>,
<1 21 RK_FUNC_1 &pcfg_pull_none_drv_12ma>;
};
};
sdio {
sdio_clk: sdio-clk {
rockchip,pins = <3 0 RK_FUNC_1 &pcfg_pull_none_drv_12ma>;
};
sdio_cmd: sdio-cmd {
rockchip,pins = <3 1 RK_FUNC_1 &pcfg_pull_none_drv_12ma>;
};
sdio_bus4: sdio-bus4 {
rockchip,pins = <3 2 RK_FUNC_1 &pcfg_pull_none_drv_12ma>,
<3 3 RK_FUNC_1 &pcfg_pull_none_drv_12ma>,
<3 4 RK_FUNC_1 &pcfg_pull_none_drv_12ma>,
<3 5 RK_FUNC_1 &pcfg_pull_none_drv_12ma>;
};
};
emmc { emmc {
emmc_clk: emmc-clk { emmc_clk: emmc-clk {
rockchip,pins = <2 RK_PA7 RK_FUNC_2 &pcfg_pull_none>; rockchip,pins = <2 RK_PA7 RK_FUNC_2 &pcfg_pull_none>;

@ -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;
};

@ -46,6 +46,7 @@
#include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/pinctrl/rockchip.h> #include <dt-bindings/pinctrl/rockchip.h>
#include <dt-bindings/thermal/thermal.h> #include <dt-bindings/thermal/thermal.h>
#include <dt-bindings/memory/rk3368-dmc.h>
/ { / {
compatible = "rockchip,rk3368"; compatible = "rockchip,rk3368";
@ -227,6 +228,21 @@
#clock-cells = <0>; #clock-cells = <0>;
}; };
dmc: dmc@ff610000 {
compatible = "rockchip,rk3368-dmc", "syscon";
rockchip,cru = <&cru>;
rockchip,grf = <&grf>;
rockchip,msch = <&service_msch>;
reg = <0 0xff610000 0 0x400
0 0xff620000 0 0x400>;
};
service_msch: syscon@ffac0000 {
compatible = "rockchip,rk3368-msch", "syscon";
reg = <0x0 0xffac0000 0x0 0x2000>;
status = "okay";
};
sdmmc: dwmmc@ff0c0000 { sdmmc: dwmmc@ff0c0000 {
compatible = "rockchip,rk3368-dw-mshc", "rockchip,rk3288-dw-mshc"; compatible = "rockchip,rk3368-dw-mshc", "rockchip,rk3288-dw-mshc";
reg = <0x0 0xff0c0000 0x0 0x4000>; reg = <0x0 0xff0c0000 0x0 0x4000>;
@ -546,12 +562,6 @@
status = "disabled"; status = "disabled";
}; };
dmc: dmc@ff610000 {
u-boot,dm-pre-reloc;
compatible = "rockchip,rk3368-dmc", "syscon";
reg = <0x0 0xff610000 0x0 0x1000>;
};
i2c0: i2c@ff650000 { i2c0: i2c@ff650000 {
compatible = "rockchip,rk3368-i2c", "rockchip,rk3288-i2c"; compatible = "rockchip,rk3368-i2c", "rockchip,rk3288-i2c";
reg = <0x0 0xff650000 0x0 0x1000>; reg = <0x0 0xff650000 0x0 0x1000>;
@ -647,11 +657,15 @@
}; };
pmugrf: syscon@ff738000 { pmugrf: syscon@ff738000 {
u-boot,dm-pre-reloc;
compatible = "rockchip,rk3368-pmugrf", "syscon"; compatible = "rockchip,rk3368-pmugrf", "syscon";
reg = <0x0 0xff738000 0x0 0x1000>; reg = <0x0 0xff738000 0x0 0x1000>;
}; };
sgrf: syscon@ff740000 {
compatible = "rockchip,rk3368-sgrf", "syscon";
reg = <0x0 0xff740000 0x0 0x1000>;
};
cru: clock-controller@ff760000 { cru: clock-controller@ff760000 {
compatible = "rockchip,rk3368-cru"; compatible = "rockchip,rk3368-cru";
reg = <0x0 0xff760000 0x0 0x1000>; reg = <0x0 0xff760000 0x0 0x1000>;
@ -673,7 +687,7 @@
status = "disabled"; status = "disabled";
}; };
timer@ff810000 { timer0: timer@ff810000 {
compatible = "rockchip,rk3368-timer", "rockchip,rk3288-timer"; compatible = "rockchip,rk3368-timer", "rockchip,rk3288-timer";
reg = <0x0 0xff810000 0x0 0x20>; reg = <0x0 0xff810000 0x0 0x20>;
interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;

@ -85,7 +85,7 @@ enum {
EMMC_PLL_SELECT_24MHZ, EMMC_PLL_SELECT_24MHZ,
EMMC_DIV_SHIFT = 8, EMMC_DIV_SHIFT = 8,
EMMC_DIV_MASK = 0x3f < EMMC_DIV_SHIFT, EMMC_DIV_MASK = 0x3f << EMMC_DIV_SHIFT,
SDIO0_PLL_SHIFT = 6, SDIO0_PLL_SHIFT = 6,
SDIO0_PLL_MASK = 3 << SDIO0_PLL_SHIFT, SDIO0_PLL_MASK = 3 << SDIO0_PLL_SHIFT,

@ -89,19 +89,26 @@ enum {
MCU_CLK_DIV_SHIFT = 0, MCU_CLK_DIV_SHIFT = 0,
MCU_CLK_DIV_MASK = GENMASK(4, 0), MCU_CLK_DIV_MASK = GENMASK(4, 0),
/* CLKSEL43_CON */
GMAC_MUX_SEL_EXTCLK = BIT(8),
/* CLKSEL51_CON */ /* CLKSEL51_CON */
MMC_PLL_SEL_SHIFT = 8, MMC_PLL_SEL_SHIFT = 8,
MMC_PLL_SEL_MASK = GENMASK(9, 8), MMC_PLL_SEL_MASK = GENMASK(9, 8),
MMC_PLL_SEL_CPLL = 0, MMC_PLL_SEL_CPLL = (0 << MMC_PLL_SEL_SHIFT),
MMC_PLL_SEL_GPLL, MMC_PLL_SEL_GPLL = (1 << MMC_PLL_SEL_SHIFT),
MMC_PLL_SEL_USBPHY_480M, MMC_PLL_SEL_USBPHY_480M = (2 << MMC_PLL_SEL_SHIFT),
MMC_PLL_SEL_24M, MMC_PLL_SEL_24M = (3 << MMC_PLL_SEL_SHIFT),
MMC_CLK_DIV_SHIFT = 0, MMC_CLK_DIV_SHIFT = 0,
MMC_CLK_DIV_MASK = GENMASK(6, 0), MMC_CLK_DIV_MASK = GENMASK(6, 0),
/* SOFTRST1_CON */ /* SOFTRST1_CON */
MCU_PO_SRST_MASK = BIT(13), MCU_PO_SRST_MASK = BIT(13),
MCU_SYS_SRST_MASK = BIT(12), MCU_SYS_SRST_MASK = BIT(12),
DMA1_SRST_REQ = BIT(2),
/* SOFTRST4_CON */
DMA2_SRST_REQ = BIT(0),
/* GLB_RST_CON */ /* GLB_RST_CON */
PMU_GLB_SRST_CTRL_SHIFT = 2, PMU_GLB_SRST_CTRL_SHIFT = 2,

@ -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

@ -1,4 +1,6 @@
/* (C) Copyright 2016 Rockchip Electronics Co., Ltd /*
* (C) Copyright 2016 Rockchip Electronics Co., Ltd
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
* *
* SPDX-License-Identifier: GPL-2.0+ * SPDX-License-Identifier: GPL-2.0+
*/ */
@ -74,8 +76,11 @@ struct rk3368_grf {
u32 soc_con15; u32 soc_con15;
u32 soc_con16; u32 soc_con16;
u32 soc_con17; u32 soc_con17;
u32 reserved5[0x6e];
u32 ddrc0_con0;
}; };
check_member(rk3368_grf, soc_con17, 0x444); check_member(rk3368_grf, soc_con17, 0x444);
check_member(rk3368_grf, ddrc0_con0, 0x600);
struct rk3368_pmu_grf { struct rk3368_pmu_grf {
u32 gpio0a_iomux; u32 gpio0a_iomux;
@ -92,323 +97,11 @@ struct rk3368_pmu_grf {
u32 gpio0d_drv; u32 gpio0d_drv;
u32 gpio0l_sr; u32 gpio0l_sr;
u32 gpio0h_sr; u32 gpio0h_sr;
u32 reserved[(0x200 - 0x34) / 4 - 1]; u32 reserved[0x72];
u32 os_reg[4]; u32 os_reg[4];
}; };
check_member(rk3368_pmu_grf, os_reg[3], 0x20c); check_member(rk3368_pmu_grf, gpio0h_sr, 0x34);
check_member(rk3368_pmu_grf, os_reg[0], 0x200);
/*GRF_GPIO0C_IOMUX*/
enum {
GPIO0C7_SHIFT = 14,
GPIO0C7_MASK = 3 << GPIO0C7_SHIFT,
GPIO0C7_GPIO = 0,
GPIO0C7_LCDC_D19,
GPIO0C7_TRACE_D9,
GPIO0C7_UART1_RTSN,
GPIO0C6_SHIFT = 12,
GPIO0C6_MASK = 3 << GPIO0C6_SHIFT,
GPIO0C6_GPIO = 0,
GPIO0C6_LCDC_D18,
GPIO0C6_TRACE_D8,
GPIO0C6_UART1_CTSN,
GPIO0C5_SHIFT = 10,
GPIO0C5_MASK = 3 << GPIO0C5_SHIFT,
GPIO0C5_GPIO = 0,
GPIO0C5_LCDC_D17,
GPIO0C5_TRACE_D7,
GPIO0C5_UART1_SOUT,
GPIO0C4_SHIFT = 8,
GPIO0C4_MASK = 3 << GPIO0C4_SHIFT,
GPIO0C4_GPIO = 0,
GPIO0C4_LCDC_D16,
GPIO0C4_TRACE_D6,
GPIO0C4_UART1_SIN,
GPIO0C3_SHIFT = 6,
GPIO0C3_MASK = 3 << GPIO0C3_SHIFT,
GPIO0C3_GPIO = 0,
GPIO0C3_LCDC_D15,
GPIO0C3_TRACE_D5,
GPIO0C3_MCU_JTAG_TDO,
GPIO0C2_SHIFT = 4,
GPIO0C2_MASK = 3 << GPIO0C2_SHIFT,
GPIO0C2_GPIO = 0,
GPIO0C2_LCDC_D14,
GPIO0C2_TRACE_D4,
GPIO0C2_MCU_JTAG_TDI,
GPIO0C1_SHIFT = 2,
GPIO0C1_MASK = 3 << GPIO0C1_SHIFT,
GPIO0C1_GPIO = 0,
GPIO0C1_LCDC_D13,
GPIO0C1_TRACE_D3,
GPIO0C1_MCU_JTAG_TRTSN,
GPIO0C0_SHIFT = 0,
GPIO0C0_MASK = 3 << GPIO0C0_SHIFT,
GPIO0C0_GPIO = 0,
GPIO0C0_LCDC_D12,
GPIO0C0_TRACE_D2,
GPIO0C0_MCU_JTAG_TDO,
};
/*GRF_GPIO0D_IOMUX*/
enum {
GPIO0D7_SHIFT = 14,
GPIO0D7_MASK = 3 << GPIO0D7_SHIFT,
GPIO0D7_GPIO = 0,
GPIO0D7_LCDC_DCLK,
GPIO0D7_TRACE_CTL,
GPIO0D7_PMU_DEBUG5,
GPIO0D6_SHIFT = 12,
GPIO0D6_MASK = 3 << GPIO0D6_SHIFT,
GPIO0D6_GPIO = 0,
GPIO0D6_LCDC_DEN,
GPIO0D6_TRACE_CLK,
GPIO0D6_PMU_DEBUG4,
GPIO0D5_SHIFT = 10,
GPIO0D5_MASK = 3 << GPIO0D5_SHIFT,
GPIO0D5_GPIO = 0,
GPIO0D5_LCDC_VSYNC,
GPIO0D5_TRACE_D15,
GPIO0D5_PMU_DEBUG3,
GPIO0D4_SHIFT = 8,
GPIO0D4_MASK = 3 << GPIO0D4_SHIFT,
GPIO0D4_GPIO = 0,
GPIO0D4_LCDC_HSYNC,
GPIO0D4_TRACE_D14,
GPIO0D4_PMU_DEBUG2,
GPIO0D3_SHIFT = 6,
GPIO0D3_MASK = 3 << GPIO0D3_SHIFT,
GPIO0D3_GPIO = 0,
GPIO0D3_LCDC_D23,
GPIO0D3_TRACE_D13,
GPIO0D3_UART4_SIN,
GPIO0D2_SHIFT = 4,
GPIO0D2_MASK = 3 << GPIO0D2_SHIFT,
GPIO0D2_GPIO = 0,
GPIO0D2_LCDC_D22,
GPIO0D2_TRACE_D12,
GPIO0D2_UART4_SOUT,
GPIO0D1_SHIFT = 2,
GPIO0D1_MASK = 3 << GPIO0D1_SHIFT,
GPIO0D1_GPIO = 0,
GPIO0D1_LCDC_D21,
GPIO0D1_TRACE_D11,
GPIO0D1_UART4_RTSN,
GPIO0D0_SHIFT = 0,
GPIO0D0_MASK = 3 << GPIO0D0_SHIFT,
GPIO0D0_GPIO = 0,
GPIO0D0_LCDC_D20,
GPIO0D0_TRACE_D10,
GPIO0D0_UART4_CTSN,
};
/*GRF_GPIO2A_IOMUX*/
enum {
GPIO2A7_SHIFT = 14,
GPIO2A7_MASK = 3 << GPIO2A7_SHIFT,
GPIO2A7_GPIO = 0,
GPIO2A7_SDMMC0_D2,
GPIO2A7_JTAG_TCK,
GPIO2A6_SHIFT = 12,
GPIO2A6_MASK = 3 << GPIO2A6_SHIFT,
GPIO2A6_GPIO = 0,
GPIO2A6_SDMMC0_D1,
GPIO2A6_UART2_SIN,
GPIO2A5_SHIFT = 10,
GPIO2A5_MASK = 3 << GPIO2A5_SHIFT,
GPIO2A5_GPIO = 0,
GPIO2A5_SDMMC0_D0,
GPIO2A5_UART2_SOUT,
GPIO2A4_SHIFT = 8,
GPIO2A4_MASK = 3 << GPIO2A4_SHIFT,
GPIO2A4_GPIO = 0,
GPIO2A4_FLASH_DQS,
GPIO2A4_EMMC_CLKO,
GPIO2A3_SHIFT = 6,
GPIO2A3_MASK = 3 << GPIO2A3_SHIFT,
GPIO2A3_GPIO = 0,
GPIO2A3_FLASH_CSN3,
GPIO2A3_EMMC_RSTNO,
GPIO2A2_SHIFT = 4,
GPIO2A2_MASK = 3 << GPIO2A2_SHIFT,
GPIO2A2_GPIO = 0,
GPIO2A2_FLASH_CSN2,
GPIO2A1_SHIFT = 2,
GPIO2A1_MASK = 3 << GPIO2A1_SHIFT,
GPIO2A1_GPIO = 0,
GPIO2A1_FLASH_CSN1,
GPIO2A0_SHIFT = 0,
GPIO2A0_MASK = 3 << GPIO2A0_SHIFT,
GPIO2A0_GPIO = 0,
GPIO2A0_FLASH_CSN0,
};
/*GRF_GPIO2D_IOMUX*/
enum {
GPIO2D7_SHIFT = 14,
GPIO2D7_MASK = 3 << GPIO2D7_SHIFT,
GPIO2D7_GPIO = 0,
GPIO2D7_SDIO0_D3,
GPIO2D6_SHIFT = 12,
GPIO2D6_MASK = 3 << GPIO2D6_SHIFT,
GPIO2D6_GPIO = 0,
GPIO2D6_SDIO0_D2,
GPIO2D5_SHIFT = 10,
GPIO2D5_MASK = 3 << GPIO2D5_SHIFT,
GPIO2D5_GPIO = 0,
GPIO2D5_SDIO0_D1,
GPIO2D4_SHIFT = 8,
GPIO2D4_MASK = 3 << GPIO2D4_SHIFT,
GPIO2D4_GPIO = 0,
GPIO2D4_SDIO0_D0,
GPIO2D3_SHIFT = 6,
GPIO2D3_MASK = 3 << GPIO2D3_SHIFT,
GPIO2D3_GPIO = 0,
GPIO2D3_UART0_RTS0,
GPIO2D2_SHIFT = 4,
GPIO2D2_MASK = 3 << GPIO2D2_SHIFT,
GPIO2D2_GPIO = 0,
GPIO2D2_UART0_CTS0,
GPIO2D1_SHIFT = 2,
GPIO2D1_MASK = 3 << GPIO2D1_SHIFT,
GPIO2D1_GPIO = 0,
GPIO2D1_UART0_SOUT,
GPIO2D0_SHIFT = 0,
GPIO2D0_MASK = 3 << GPIO2D0_SHIFT,
GPIO2D0_GPIO = 0,
GPIO2D0_UART0_SIN,
};
/*GRF_GPIO3C_IOMUX*/
enum {
GPIO3C7_SHIFT = 14,
GPIO3C7_MASK = 3 << GPIO3C7_SHIFT,
GPIO3C7_GPIO = 0,
GPIO3C7_EDPHDMI_CECINOUT,
GPIO3C7_ISP_FLASHTRIGIN,
GPIO3C6_SHIFT = 12,
GPIO3C6_MASK = 3 << GPIO3C6_SHIFT,
GPIO3C6_GPIO = 0,
GPIO3C6_MAC_CLK,
GPIO3C6_ISP_SHUTTERTRIG,
GPIO3C5_SHIFT = 10,
GPIO3C5_MASK = 3 << GPIO3C5_SHIFT,
GPIO3C5_GPIO = 0,
GPIO3C5_MAC_RXER,
GPIO3C5_ISP_PRELIGHTTRIG,
GPIO3C4_SHIFT = 8,
GPIO3C4_MASK = 3 << GPIO3C4_SHIFT,
GPIO3C4_GPIO = 0,
GPIO3C4_MAC_RXDV,
GPIO3C4_ISP_FLASHTRIGOUT,
GPIO3C3_SHIFT = 6,
GPIO3C3_MASK = 3 << GPIO3C3_SHIFT,
GPIO3C3_GPIO = 0,
GPIO3C3_MAC_RXDV,
GPIO3C3_EMMC_RSTNO,
GPIO3C2_SHIFT = 4,
GPIO3C2_MASK = 3 << GPIO3C2_SHIFT,
GPIO3C2_MAC_MDC = 0,
GPIO3C2_ISP_SHUTTEREN,
GPIO3C1_SHIFT = 2,
GPIO3C1_MASK = 3 << GPIO3C1_SHIFT,
GPIO3C1_GPIO = 0,
GPIO3C1_MAC_RXD2,
GPIO3C1_UART3_RTSN,
GPIO3C0_SHIFT = 0,
GPIO3C0_MASK = 3 << GPIO3C0_SHIFT,
GPIO3C0_GPIO = 0,
GPIO3C0_MAC_RXD1,
GPIO3C0_UART3_CTSN,
GPIO3C0_GPS_RFCLK,
};
/*GRF_GPIO3D_IOMUX*/
enum {
GPIO3D7_SHIFT = 14,
GPIO3D7_MASK = 3 << GPIO3D7_SHIFT,
GPIO3D7_GPIO = 0,
GPIO3D7_SC_VCC18V,
GPIO3D7_I2C2_SDA,
GPIO3D7_GPUJTAG_TCK,
GPIO3D6_SHIFT = 12,
GPIO3D6_MASK = 3 << GPIO3D6_SHIFT,
GPIO3D6_GPIO = 0,
GPIO3D6_IR_TX,
GPIO3D6_UART3_SOUT,
GPIO3D6_PWM3,
GPIO3D5_SHIFT = 10,
GPIO3D5_MASK = 3 << GPIO3D5_SHIFT,
GPIO3D5_GPIO = 0,
GPIO3D5_IR_RX,
GPIO3D5_UART3_SIN,
GPIO3D4_SHIFT = 8,
GPIO3D4_MASK = 3 << GPIO3D4_SHIFT,
GPIO3D4_GPIO = 0,
GPIO3D4_MAC_TXCLKOUT,
GPIO3D4_SPI1_CSN1,
GPIO3D3_SHIFT = 6,
GPIO3D3_MASK = 3 << GPIO3D3_SHIFT,
GPIO3D3_GPIO = 0,
GPIO3D3_HDMII2C_SCL,
GPIO3D3_I2C5_SCL,
GPIO3D2_SHIFT = 4,
GPIO3D2_MASK = 3 << GPIO3D2_SHIFT,
GPIO3D2_GPIO = 0,
GPIO3D2_HDMII2C_SDA,
GPIO3D2_I2C5_SDA,
GPIO3D1_SHIFT = 2,
GPIO3D1_MASK = 3 << GPIO3D1_SHIFT,
GPIO3D1_GPIO = 0,
GPIO3D1_MAC_RXCLKIN,
GPIO3D1_I2C4_SCL,
GPIO3D0_SHIFT = 0,
GPIO3D0_MASK = 3 << GPIO3D0_SHIFT,
GPIO3D0_GPIO = 0,
GPIO3D0_MAC_MDIO,
GPIO3D0_I2C4_SDA,
};
/*GRF_SOC_CON11/12/13*/ /*GRF_SOC_CON11/12/13*/
enum { enum {
@ -439,4 +132,5 @@ enum {
MCU_CODE_BASE_BIT31_BIT28_SHIFT = 0, MCU_CODE_BASE_BIT31_BIT28_SHIFT = 0,
MCU_CODE_BASE_BIT31_BIT28_MASK = GENMASK(3, 0), MCU_CODE_BASE_BIT31_BIT28_MASK = GENMASK(3, 0),
}; };
#endif #endif

@ -30,6 +30,7 @@ enum {
BOOT_DEVICE_BOARD, BOOT_DEVICE_BOARD,
BOOT_DEVICE_DFU, BOOT_DEVICE_DFU,
BOOT_DEVICE_XIP, BOOT_DEVICE_XIP,
BOOT_DEVICE_BOOTROM,
BOOT_DEVICE_NONE BOOT_DEVICE_NONE
}; };
#endif #endif

@ -69,7 +69,9 @@ ENTRY(_main)
/* /*
* Set up initial C runtime environment and call board_init_f(0). * Set up initial C runtime environment and call board_init_f(0).
*/ */
#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK) #if defined(CONFIG_TPL_BUILD) && defined(CONFIG_TPL_NEEDS_SEPARATE_STACK)
ldr x0, =(CONFIG_TPL_STACK)
#elif defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)
ldr x0, =(CONFIG_SPL_STACK) ldr x0, =(CONFIG_SPL_STACK)
#else #else
ldr x0, =(CONFIG_SYS_INIT_SP_ADDR) ldr x0, =(CONFIG_SYS_INIT_SP_ADDR)

@ -199,4 +199,8 @@ source "board/siemens/corvus/Kconfig"
source "board/siemens/taurus/Kconfig" source "board/siemens/taurus/Kconfig"
source "board/siemens/smartweb/Kconfig" source "board/siemens/smartweb/Kconfig"
config SPL_LDSCRIPT
default "arch/arm/mach-at91/arm926ejs/u-boot-spl.lds" if CPU_ARM926EJS
default "arch/arm/mach-at91/armv7/u-boot-spl.lds" if CPU_V7
endif endif

@ -53,4 +53,8 @@ source "board/davinci/ea20/Kconfig"
source "board/omicron/calimain/Kconfig" source "board/omicron/calimain/Kconfig"
source "board/lego/ev3/Kconfig" source "board/lego/ev3/Kconfig"
config SPL_LDSCRIPT
default "board/$(BOARDDIR)/u-boot-spl-ipam390.lds" if TARGET_IPAM390
default "board/$(BOARDDIR)/u-boot-spl-da850evm.lds"
endif endif

@ -161,4 +161,7 @@ source "board/samsung/smdk5250/Kconfig"
source "board/samsung/smdk5420/Kconfig" source "board/samsung/smdk5420/Kconfig"
source "board/samsung/espresso7420/Kconfig" source "board/samsung/espresso7420/Kconfig"
config SPL_LDSCRIPT
default "board/samsung/common/exynos-uboot-spl.lds" if ARCH_EXYNOS5 || ARCH_EXYNOS4
endif endif

@ -170,4 +170,7 @@ source "board/ti/am335x/Kconfig"
source "board/compulab/cm_t335/Kconfig" source "board/compulab/cm_t335/Kconfig"
source "board/compulab/cm_t43/Kconfig" source "board/compulab/cm_t43/Kconfig"
config SPL_LDSCRIPT
default "arch/arm/mach-omap2/u-boot-spl.lds"
endif endif

@ -15,4 +15,7 @@ config SYS_SOC
source "board/LaCie/edminiv2/Kconfig" source "board/LaCie/edminiv2/Kconfig"
config SPL_LDSCRIPT
default "$(CPUDIR)/orion5x/u-boot-spl.lds" if ORION5X
endif endif

@ -67,14 +67,42 @@ config ROCKCHIP_RK3328
config ROCKCHIP_RK3368 config ROCKCHIP_RK3368
bool "Support Rockchip RK3368" bool "Support Rockchip RK3368"
select ARM64 select ARM64
select SUPPORT_SPL
select SUPPORT_TPL
select TPL_NEEDS_SEPARATE_TEXT_BASE if SPL
select TPL_NEEDS_SEPARATE_STACK if TPL
imply SPL_SEPARATE_BSS
imply SPL_SERIAL_SUPPORT
imply TPL_SERIAL_SUPPORT
select ENABLE_ARM_SOC_BOOT0_HOOK
select DEBUG_UART_BOARD_INIT
select SYS_NS16550 select SYS_NS16550
help help
The Rockchip RK3328 is a ARM-based SoC with a octa-core Cortex-A53. The Rockchip RK3368 is a ARM-based SoC with a octa-core (organised
including NEON and GPU, 512KB L2 cache for big cluster and 256 KB into a big and little cluster with 4 cores each) Cortex-A53 including
L2 cache for little cluser, PowerVR G6110 based graphics, one video AdvSIMD, 512KB L2 cache (for the big cluster) and 256 KB L2 cache
output processor supporting LVDS、HDMI、eDP, several DDR3 options (for the little cluster), PowerVR G6110 based graphics, one video
and video codec support. Peripherals include Gigabit Ethernet, output processor supporting LVDS/HDMI/eDP, several DDR3 options and
USB2 host and OTG, SDIO, I2S, UARTs, SPI, I2C and PWMs. video codec support.
On-chip peripherals include Gigabit Ethernet, USB2 host and OTG, SDIO,
I2S, UARTs, SPI, I2C and PWMs.
if ROCKCHIP_RK3368
config TPL_LDSCRIPT
default "arch/arm/mach-rockchip/rk3368/u-boot-tpl.lds"
config TPL_TEXT_BASE
default 0xff8c1000
config TPL_MAX_SIZE
default 28672
config TPL_STACK
default 0xff8cffff
endif
config ROCKCHIP_RK3399 config ROCKCHIP_RK3399
bool "Support Rockchip RK3399" bool "Support Rockchip RK3399"
@ -101,10 +129,21 @@ config ROCKCHIP_RV1108
The Rockchip RV1108 is a ARM-based SoC with a single-core Cortex-A7 The Rockchip RV1108 is a ARM-based SoC with a single-core Cortex-A7
and a DSP. and a DSP.
config ROCKCHIP_SPL_BACK_TO_BROM config SPL_ROCKCHIP_BACK_TO_BROM
bool "SPL returns to bootrom" bool "SPL returns to bootrom"
default y if ROCKCHIP_RK3036 default y if ROCKCHIP_RK3036
select ROCKCHIP_BROM_HELPER select ROCKCHIP_BROM_HELPER
depends on SPL
help
Rockchip SoCs have ability to load SPL & U-Boot binary. If enabled,
SPL will return to the boot rom, which will then load the U-Boot
binary to keep going on.
config TPL_ROCKCHIP_BACK_TO_BROM
bool "TPL returns to bootrom"
default y if ROCKCHIP_RK3368
select ROCKCHIP_BROM_HELPER
depends on TPL
help help
Rockchip SoCs have ability to load SPL & U-Boot binary. If enabled, Rockchip SoCs have ability to load SPL & U-Boot binary. If enabled,
SPL will return to the boot rom, which will then load the U-Boot SPL will return to the boot rom, which will then load the U-Boot
@ -122,7 +161,7 @@ config ROCKCHIP_BROM_HELPER
bool bool
config SPL_MMC_SUPPORT config SPL_MMC_SUPPORT
default y if !ROCKCHIP_SPL_BACK_TO_BROM default y if !SPL_ROCKCHIP_BACK_TO_BROM
source "arch/arm/mach-rockchip/rk3036/Kconfig" source "arch/arm/mach-rockchip/rk3036/Kconfig"
source "arch/arm/mach-rockchip/rk3188/Kconfig" source "arch/arm/mach-rockchip/rk3188/Kconfig"

@ -4,39 +4,50 @@
# SPDX-License-Identifier: GPL-2.0+ # SPDX-License-Identifier: GPL-2.0+
# #
obj-$(CONFIG_ROCKCHIP_BROM_HELPER) += bootrom.o # We don't want the bootrom-helper present in a full U-Boot build, as
# this may have entered from ATF with the stack-pointer pointing to
ifdef CONFIG_TPL_BUILD # inaccessible/protected memory (and the bootrom-helper assumes that
obj-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board-tpl.o # the stack-pointer is valid before switching to the U-Boot stack).
obj-$(CONFIG_ROCKCHIP_BROM_HELPER) += save_boot_param.o obj-spl-$(CONFIG_ROCKCHIP_BROM_HELPER) += bootrom.o save_boot_param.o
else ifdef CONFIG_SPL_BUILD obj-tpl-$(CONFIG_ROCKCHIP_BROM_HELPER) += bootrom.o save_boot_param.o
obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board-spl.o
obj-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board-spl.o obj-tpl-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board-tpl.o
obj-$(CONFIG_ROCKCHIP_RK322X) += rk322x-board-spl.o obj-tpl-$(CONFIG_ROCKCHIP_RK3368) += rk3368-board-tpl.o
obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board-spl.o
obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board-spl.o obj-spl-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board-spl.o
obj-$(CONFIG_ROCKCHIP_BROM_HELPER) += save_boot_param.o obj-spl-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board-spl.o
else obj-spl-$(CONFIG_ROCKCHIP_RK322X) += rk322x-board-spl.o
obj-spl-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board-spl.o
obj-spl-$(CONFIG_ROCKCHIP_RK3368) += rk3368-board-spl.o spl-boot-order.o
obj-spl-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board-spl.o spl-boot-order.o
ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),)
obj-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board.o obj-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board.o
obj-$(CONFIG_ROCKCHIP_RK322X) += rk322x-board.o obj-$(CONFIG_ROCKCHIP_RK322X) += rk322x-board.o
obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board.o obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board.o
obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board.o obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board.o
ifdef CONFIG_RAM
obj-y += sdram_common.o
endif
endif endif
obj-$(CONFIG_$(SPL_TPL_)RAM) += sdram_common.o
ifndef CONFIG_ARM64 ifndef CONFIG_ARM64
obj-y += rk_timer.o obj-y += rk_timer.o
endif endif
obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036/
obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036/
ifndef CONFIG_TPL_BUILD ifndef CONFIG_TPL_BUILD
obj-$(CONFIG_ROCKCHIP_RK3188) += rk3188/ obj-$(CONFIG_ROCKCHIP_RK3188) += rk3188/
endif endif
obj-$(CONFIG_ROCKCHIP_RK322X) += rk322x/ obj-$(CONFIG_ROCKCHIP_RK322X) += rk322x/
obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288/ obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288/
obj-$(CONFIG_ROCKCHIP_RK3328) += rk3328/ obj-$(CONFIG_ROCKCHIP_RK3328) += rk3328/
obj-$(CONFIG_ROCKCHIP_RK3368) += rk3368/ obj-$(CONFIG_ROCKCHIP_RK3368) += rk3368/
obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399/ obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399/
obj-$(CONFIG_ROCKCHIP_RV1108) += rv1108/ obj-$(CONFIG_ROCKCHIP_RV1108) += rv1108/
# Clear out SPL objects, in case this is a TPL build
obj-spl-$(CONFIG_TPL_BUILD) =
# Now add SPL/TPL objects back into the main build
obj-$(CONFIG_SPL_BUILD) += $(obj-spl-y)
obj-$(CONFIG_TPL_BUILD) += $(obj-tpl-y)

@ -9,8 +9,8 @@
void back_to_bootrom(void) void back_to_bootrom(void)
{ {
#if defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && !defined(CONFIG_TPL_BUILD) #if CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
puts("Returning to boot ROM..."); puts("Returning to boot ROM...\n");
#endif #endif
_back_to_bootrom_s(); _back_to_bootrom_s();
} }

@ -167,8 +167,7 @@ void board_init_f(ulong dummy)
} }
setup_arm_clock(); setup_arm_clock();
#if CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM) && !defined(CONFIG_SPL_BOARD_INIT)
#if defined(CONFIG_ROCKCHIP_SPL_BACK_TO_BROM) && !defined(CONFIG_SPL_BOARD_INIT)
back_to_bootrom(); back_to_bootrom();
#endif #endif
} }
@ -229,7 +228,7 @@ void spl_board_init(void)
} }
preloader_console_init(); preloader_console_init();
#ifdef CONFIG_ROCKCHIP_SPL_BACK_TO_BROM #if CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM)
back_to_bootrom(); back_to_bootrom();
#endif #endif
return; return;

@ -39,7 +39,7 @@ int board_late_init(void)
int board_init(void) int board_init(void)
{ {
#if defined(CONFIG_ROCKCHIP_SPL_BACK_TO_BROM) #if CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM)
struct udevice *pinctrl; struct udevice *pinctrl;
int ret; int ret;

@ -30,9 +30,6 @@ config TPL_LIBCOMMON_SUPPORT
config TPL_LIBGENERIC_SUPPORT config TPL_LIBGENERIC_SUPPORT
default y default y
config TPL_SERIAL_SUPPORT
default y
source "board/radxa/rock/Kconfig" source "board/radxa/rock/Kconfig"
endif endif

@ -41,6 +41,8 @@ static struct rk322x_grf * const grf = (void *)GRF_BASE;
CON_IOMUX_UART2SEL_MASK, CON_IOMUX_UART2SEL_MASK,
CON_IOMUX_UART2SEL_21 << CON_IOMUX_UART2SEL_SHIFT); CON_IOMUX_UART2SEL_21 << CON_IOMUX_UART2SEL_SHIFT);
} }
#define SGRF_DDR_CON0 0x10150000
void board_init_f(ulong dummy) void board_init_f(ulong dummy)
{ {
struct udevice *dev; struct udevice *dev;
@ -71,6 +73,8 @@ void board_init_f(ulong dummy)
return; return;
} }
/* Disable the ddr secure region setting to make it non-secure */
rk_clrreg(SGRF_DDR_CON0, 0x4000);
#if defined(CONFIG_ROCKCHIP_SPL_BACK_TO_BROM) && !defined(CONFIG_SPL_BOARD_INIT) #if defined(CONFIG_ROCKCHIP_SPL_BACK_TO_BROM) && !defined(CONFIG_SPL_BOARD_INIT)
back_to_bootrom(); back_to_bootrom();
#endif #endif

@ -249,7 +249,7 @@ void board_init_f(ulong dummy)
debug("DRAM init failed: %d\n", ret); debug("DRAM init failed: %d\n", ret);
return; return;
} }
#if defined(CONFIG_ROCKCHIP_SPL_BACK_TO_BROM) && !defined(CONFIG_SPL_BOARD_INIT) #if CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM) && !defined(CONFIG_SPL_BOARD_INIT)
back_to_bootrom(); back_to_bootrom();
#endif #endif
} }
@ -316,7 +316,7 @@ void spl_board_init(void)
} }
preloader_console_init(); preloader_console_init();
#ifdef CONFIG_ROCKCHIP_SPL_BACK_TO_BROM #if CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM)
back_to_bootrom(); back_to_bootrom();
#endif #endif
return; return;

@ -78,7 +78,7 @@ int board_late_init(void)
return rk_board_late_init(); return rk_board_late_init();
} }
#ifndef CONFIG_ROCKCHIP_SPL_BACK_TO_BROM #if !CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM)
static int veyron_init(void) static int veyron_init(void)
{ {
struct udevice *dev; struct udevice *dev;
@ -115,7 +115,7 @@ static int veyron_init(void)
int board_init(void) int board_init(void)
{ {
#ifdef CONFIG_ROCKCHIP_SPL_BACK_TO_BROM #if CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM)
struct udevice *pinctrl; struct udevice *pinctrl;
int ret; int ret;

@ -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;
}

@ -3,6 +3,26 @@ if ROCKCHIP_RK3368
choice choice
prompt "RK3368 board" prompt "RK3368 board"
config TARGET_LION_RK3368
bool "Theobroma Systems RK3368-uQ7 (Lion) module"
help
The RK3368-uQ7 is a micro-Qseven form-factor (40mm x 70mm,
MXM-230 connector) system-on-module designed by Theobroma
Systems for industrial applications.
It provides the following features:
- 8x Cortex-A53 (in 2 clusters of 4 cores each)
- (on-module) up to 4GB of DDR3 memory
- (on-module) SPI-NOR flash
- (on-module) eMMC
- Gigabit Ethernet (with an on-module KSZ9031 PHY)
- USB
- HDMI
- MIPI-DSI/single-channel LVDS (muxed on the 'LVDS-A' pin-group)
- various 'slow' interfaces (e.g. UART, SPI, I2C, I2S, ...)
- on-module STM32 providing CAN, RTC and fan-control
- (optional on-module) EAL4+-certified security module
config TARGET_SHEEP config TARGET_SHEEP
bool "Sheep board" bool "Sheep board"
help help
@ -25,8 +45,12 @@ endchoice
config SYS_SOC config SYS_SOC
default "rockchip" default "rockchip"
source "board/theobroma-systems/lion_rk3368/Kconfig"
source "board/rockchip/sheep_rk3368/Kconfig" source "board/rockchip/sheep_rk3368/Kconfig"
source "board/geekbuying/geekbox/Kconfig" source "board/geekbuying/geekbox/Kconfig"
source "board/rockchip/evb_px5/Kconfig" source "board/rockchip/evb_px5/Kconfig"
config SPL_LDSCRIPT
default "arch/arm/cpu/armv8/u-boot-spl.lds"
endif endif

@ -5,5 +5,4 @@
# #
obj-y += clk_rk3368.o obj-y += clk_rk3368.o
obj-y += rk3368.o obj-y += rk3368.o
obj-y += sdram_rk3368.o
obj-y += syscon_rk3368.o obj-y += syscon_rk3368.o

@ -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),
};

@ -1,6 +1,8 @@
/* /*
* (C) Copyright 2017 Rockchip Electronics Co., Ltd * (C) Copyright 2017 Rockchip Electronics Co., Ltd
* Author: Andy Yan <andy.yan@rock-chips.com> * Author: Andy Yan <andy.yan@rock-chips.com>
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
*
* SPDX-License-Identifier: GPL-2.0+ * SPDX-License-Identifier: GPL-2.0+
*/ */
@ -14,6 +16,10 @@ static const struct udevice_id rk3368_syscon_ids[] = {
.data = ROCKCHIP_SYSCON_GRF }, .data = ROCKCHIP_SYSCON_GRF },
{ .compatible = "rockchip,rk3368-pmugrf", { .compatible = "rockchip,rk3368-pmugrf",
.data = ROCKCHIP_SYSCON_PMUGRF }, .data = ROCKCHIP_SYSCON_PMUGRF },
{ .compatible = "rockchip,rk3368-msch",
.data = ROCKCHIP_SYSCON_MSCH },
{ .compatible = "rockchip,rk3368-sgrf",
.data = ROCKCHIP_SYSCON_SGRF },
{ } { }
}; };
@ -22,3 +28,41 @@ U_BOOT_DRIVER(syscon_rk3368) = {
.id = UCLASS_SYSCON, .id = UCLASS_SYSCON,
.of_match = rk3368_syscon_ids, .of_match = rk3368_syscon_ids,
}; };
#if CONFIG_IS_ENABLED(OF_PLATDATA)
static int rk3368_syscon_bind_of_platdata(struct udevice *dev)
{
dev->driver_data = dev->driver->of_match->data;
debug("syscon: %s %d\n", dev->name, (uint)dev->driver_data);
return 0;
}
U_BOOT_DRIVER(rockchip_rk3368_grf) = {
.name = "rockchip_rk3368_grf",
.id = UCLASS_SYSCON,
.of_match = rk3368_syscon_ids,
.bind = rk3368_syscon_bind_of_platdata,
};
U_BOOT_DRIVER(rockchip_rk3368_pmugrf) = {
.name = "rockchip_rk3368_pmugrf",
.id = UCLASS_SYSCON,
.of_match = rk3368_syscon_ids + 1,
.bind = rk3368_syscon_bind_of_platdata,
};
U_BOOT_DRIVER(rockchip_rk3368_msch) = {
.name = "rockchip_rk3368_msch",
.id = UCLASS_SYSCON,
.of_match = rk3368_syscon_ids + 2,
.bind = rk3368_syscon_bind_of_platdata,
};
U_BOOT_DRIVER(rockchip_rk3368_sgrf) = {
.name = "rockchip_rk3368_sgrf",
.id = UCLASS_SYSCON,
.of_match = rk3368_syscon_ids + 3,
.bind = rk3368_syscon_bind_of_platdata,
};
#endif

@ -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"

@ -8,9 +8,6 @@
#include <debug_uart.h> #include <debug_uart.h>
#include <dm.h> #include <dm.h>
#include <fdtdec.h> #include <fdtdec.h>
#include <led.h>
#include <malloc.h>
#include <mmc.h>
#include <ram.h> #include <ram.h>
#include <spl.h> #include <spl.h>
#include <asm/gpio.h> #include <asm/gpio.h>
@ -21,111 +18,10 @@
#include <asm/arch/sdram.h> #include <asm/arch/sdram.h>
#include <asm/arch/timer.h> #include <asm/arch/timer.h>
#include <dm/pinctrl.h> #include <dm/pinctrl.h>
#include <dm/root.h>
#include <dm/test.h>
#include <dm/util.h>
#include <power/regulator.h> #include <power/regulator.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_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
u32 spl_boot_device(void) u32 spl_boot_device(void)
{ {
return BOOT_DEVICE_MMC1; return BOOT_DEVICE_MMC1;
@ -263,7 +159,7 @@ void spl_board_init(void)
} }
preloader_console_init(); preloader_console_init();
#ifdef CONFIG_ROCKCHIP_SPL_BACK_TO_BROM #if CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM)
back_to_bootrom(); back_to_bootrom();
#endif #endif

@ -1,11 +1,47 @@
/* /*
* (C) Copyright 2016 Rockchip Electronics Co., Ltd * (C) Copyright 2016 Rockchip Electronics Co., Ltd
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
* *
* SPDX-License-Identifier: GPL-2.0+ * SPDX-License-Identifier: GPL-2.0+
*/ */
#include <linux/linkage.h> #include <linux/linkage.h>
#if defined(CONFIG_ARM64)
.globl SAVE_SP_ADDR
SAVE_SP_ADDR:
.quad 0
ENTRY(save_boot_params)
sub sp, sp, #0x60
stp x29, x30, [sp, #0x50]
stp x27, x28, [sp, #0x40]
stp x25, x26, [sp, #0x30]
stp x23, x24, [sp, #0x20]
stp x21, x22, [sp, #0x10]
stp x19, x20, [sp, #0]
ldr x8, =SAVE_SP_ADDR
mov x9, sp
str x9, [x8]
b save_boot_params_ret /* back to my caller */
ENDPROC(save_boot_params)
.globl _back_to_bootrom_s
ENTRY(_back_to_bootrom_s)
ldr x0, =SAVE_SP_ADDR
ldr x0, [x0]
mov sp, x0
ldp x29, x30, [sp, #0x50]
ldp x27, x28, [sp, #0x40]
ldp x25, x26, [sp, #0x30]
ldp x23, x24, [sp, #0x20]
ldp x21, x22, [sp, #0x10]
ldp x19, x20, [sp]
add sp, sp, #0x60
mov x0, xzr
ret
ENDPROC(_back_to_bootrom_s)
#else
.globl SAVE_SP_ADDR .globl SAVE_SP_ADDR
SAVE_SP_ADDR: SAVE_SP_ADDR:
.word 0 .word 0
@ -30,3 +66,4 @@ ENTRY(_back_to_bootrom_s)
mov r0, #0 mov r0, #0
pop {r1-r12, pc} pop {r1-r12, pc}
ENDPROC(_back_to_bootrom_s) ENDPROC(_back_to_bootrom_s)
#endif

@ -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

@ -1,5 +1,8 @@
if ARCH_SUNXI if ARCH_SUNXI
config SPL_LDSCRIPT
default "arch/arm/cpu/armv7/sunxi/u-boot-spl.lds" if !ARM64
config IDENT_STRING config IDENT_STRING
default " Allwinner Technology" default " Allwinner Technology"

@ -1,5 +1,8 @@
if ARCH_ZYNQ if ARCH_ZYNQ
config SPL_LDSCRIPT
default "arch/arm/mach-zynq/u-boot-spl.lds"
config SPL_FAT_SUPPORT config SPL_FAT_SUPPORT
default y default y

@ -21,4 +21,7 @@ endchoice
source "board/xilinx/microblaze-generic/Kconfig" source "board/xilinx/microblaze-generic/Kconfig"
config SPL_LDSCRIPT
default "arch/microblaze/cpu/u-boot-spl.lds"
endmenu endmenu

@ -1,5 +1,8 @@
if TARGET_APF27 if TARGET_APF27
config SPL_LDSCRIPT
default "arch/$(ARCH)/cpu/u-boot-spl.lds"
config SYS_BOARD config SYS_BOARD
default "apf27" default "apf27"

@ -1,5 +1,8 @@
if TARGET_MX31PDK if TARGET_MX31PDK
config SPL_LDSCRIPT
default "arch/$(ARCH)/cpu/u-boot-spl.lds"
config SYS_BOARD config SYS_BOARD
default "mx31pdk" default "mx31pdk"

@ -4,30 +4,6 @@
* SPDX-License-Identifier: GPL-2.0+ * SPDX-License-Identifier: GPL-2.0+
*/ */
#include <common.h> #include <common.h>
#include <asm/io.h>
#include <fdtdec.h>
#include <asm/arch/clock.h>
#include <asm/arch/grf_rk3368.h>
DECLARE_GLOBAL_DATA_PTR;
int mach_cpu_init(void)
{
struct rk3368_pmu_grf *pmugrf;
int node;
node = fdt_node_offset_by_compatible(gd->fdt_blob, -1, "rockchip,rk3368-pmugrf");
pmugrf = (struct rk3368_pmu_grf *)fdtdec_get_addr(gd->fdt_blob, node, "reg");
rk_clrsetreg(&pmugrf->gpio0d_iomux,
GPIO0D0_MASK | GPIO0D1_MASK |
GPIO0D2_MASK | GPIO0D3_MASK,
GPIO0D0_GPIO << GPIO0D0_SHIFT |
GPIO0D1_GPIO << GPIO0D1_SHIFT |
GPIO0D2_UART4_SOUT << GPIO0D2_SHIFT |
GPIO0D3_UART4_SIN << GPIO0D3_SHIFT);
return 0;
}
int board_init(void) int board_init(void)
{ {

@ -1,5 +1,8 @@
if TARGET_X600 if TARGET_X600
config SPL_LDSCRIPT
default "arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds"
config SYS_BOARD config SYS_BOARD
default "x600" default "x600"

@ -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;
}

@ -37,7 +37,7 @@ Compile the ATF
> cd arm-trusted-firmware > cd arm-trusted-firmware
> make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3399 bl31 > make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3399 bl31
> cp build/rk3399/release/bl31.bin ../u-boot > cp build/rk3399/release/bl31.bin ../u-boot/bl31-rk3399.bin
Compile the M0 firmware Compile the M0 firmware
======================= =======================

@ -13,7 +13,7 @@
#address-cells = <1>; #address-cells = <1>;
images { images {
uboot@1 { uboot {
description = "U-Boot (64-bit)"; description = "U-Boot (64-bit)";
data = /incbin/("../../../u-boot-nodtb.bin"); data = /incbin/("../../../u-boot-nodtb.bin");
type = "standalone"; type = "standalone";
@ -21,23 +21,23 @@
compression = "none"; compression = "none";
load = <0x00200000>; load = <0x00200000>;
}; };
atf@1 { atf {
description = "ARM Trusted Firmware"; description = "ARM Trusted Firmware";
data = /incbin/("../../../bl31.bin"); data = /incbin/("../../../bl31-rk3399.bin");
type = "firmware"; type = "firmware";
arch = "arm64"; arch = "arm64";
compression = "none"; compression = "none";
load = <0x00001000>; load = <0x00001000>;
entry = <0x00001000>; entry = <0x00001000>;
}; };
pmu@1 { pmu {
description = "Cortex-M0 firmware"; description = "Cortex-M0 firmware";
data = /incbin/("../../../rk3399m0.bin"); data = /incbin/("../../../rk3399m0.bin");
type = "pmu-firmware"; type = "pmu-firmware";
compression = "none"; compression = "none";
load = <0xff8c0000>; load = <0xff8c0000>;
}; };
fdt@1 { fdt {
description = "RK3399-Q7 (Puma) flat device-tree"; description = "RK3399-Q7 (Puma) flat device-tree";
data = /incbin/("../../../u-boot.dtb"); data = /incbin/("../../../u-boot.dtb");
type = "flat_dt"; type = "flat_dt";
@ -46,12 +46,12 @@
}; };
configurations { configurations {
default = "conf@1"; default = "conf";
conf@1 { conf {
description = "Theobroma Systems RK3399-Q7 (Puma) SoM"; description = "Theobroma Systems RK3399-Q7 (Puma) SoM";
firmware = "uboot@1"; firmware = "uboot";
loadables = "atf@1"; loadables = "atf";
fdt = "fdt@1"; fdt = "fdt";
}; };
}; };
}; };

@ -53,7 +53,7 @@ obj-$(CONFIG_ENV_IS_IN_UBI) += env_ubi.o
obj-$(CONFIG_ENV_IS_NOWHERE) += env_nowhere.o obj-$(CONFIG_ENV_IS_NOWHERE) += env_nowhere.o
obj-$(CONFIG_CMD_BEDBUG) += bedbug.o obj-$(CONFIG_CMD_BEDBUG) += bedbug.o
obj-$(CONFIG_$(SPL_)OF_LIBFDT) += fdt_support.o obj-$(CONFIG_$(SPL_TPL_)OF_LIBFDT) += fdt_support.o
obj-$(CONFIG_MII) += miiphyutil.o obj-$(CONFIG_MII) += miiphyutil.o
obj-$(CONFIG_CMD_MII) += miiphyutil.o obj-$(CONFIG_CMD_MII) += miiphyutil.o
@ -96,7 +96,7 @@ obj-$(CONFIG_ENV_IS_IN_FLASH) += env_flash.o
obj-$(CONFIG_SPL_YMODEM_SUPPORT) += xyzModem.o obj-$(CONFIG_SPL_YMODEM_SUPPORT) += xyzModem.o
obj-$(CONFIG_SPL_LOAD_FIT) += common_fit.o obj-$(CONFIG_SPL_LOAD_FIT) += common_fit.o
obj-$(CONFIG_SPL_NET_SUPPORT) += miiphyutil.o obj-$(CONFIG_SPL_NET_SUPPORT) += miiphyutil.o
obj-$(CONFIG_SPL_OF_LIBFDT) += fdt_support.o obj-$(CONFIG_$(SPL_TPL_)OF_LIBFDT) += fdt_support.o
ifdef CONFIG_SPL_USB_HOST_SUPPORT ifdef CONFIG_SPL_USB_HOST_SUPPORT
obj-$(CONFIG_SPL_USB_SUPPORT) += usb.o usb_hub.o obj-$(CONFIG_SPL_USB_SUPPORT) += usb.o usb_hub.o
obj-$(CONFIG_USB_STORAGE) += usb_storage.o obj-$(CONFIG_USB_STORAGE) += usb_storage.o
@ -146,10 +146,10 @@ endif
endif endif
obj-y += image.o obj-y += image.o
obj-$(CONFIG_ANDROID_BOOT_IMAGE) += image-android.o obj-$(CONFIG_ANDROID_BOOT_IMAGE) += image-android.o
obj-$(CONFIG_$(SPL_)OF_LIBFDT) += image-fdt.o obj-$(CONFIG_$(SPL_TPL_)OF_LIBFDT) += image-fdt.o
obj-$(CONFIG_$(SPL_)FIT) += image-fit.o obj-$(CONFIG_$(SPL_TPL_)FIT) += image-fit.o
obj-$(CONFIG_FIT_EMBED) += boot_fit.o common_fit.o obj-$(CONFIG_FIT_EMBED) += boot_fit.o common_fit.o
obj-$(CONFIG_$(SPL_)FIT_SIGNATURE) += image-sig.o obj-$(CONFIG_$(SPL_TPL_)FIT_SIGNATURE) += image-sig.o
obj-$(CONFIG_IO_TRACE) += iotrace.o obj-$(CONFIG_IO_TRACE) += iotrace.o
obj-y += memsize.o obj-y += memsize.o
obj-y += stdio.o obj-y += stdio.o

@ -18,6 +18,16 @@ config SPL
if SPL if SPL
config SPL_LDSCRIPT
string "Linker script for the SPL stage"
default "arch/$(ARCH)/cpu/u-boot-spl.lds"
depends on SPL
help
The SPL stage will usually require a different linker-script
(as it runs from a different memory region) than the regular
U-Boot stage. Set this to the path of the linker-script to
be used for SPL.
config SPL_BOARD_INIT config SPL_BOARD_INIT
bool "Call board-specific initialization in SPL" bool "Call board-specific initialization in SPL"
help help
@ -25,6 +35,17 @@ config SPL_BOARD_INIT
spl_board_init() from board_init_r(). This function should be spl_board_init() from board_init_r(). This function should be
provided by the board. provided by the board.
config SPL_BOOTROM_SUPPORT
bool "Support returning to the BOOTROM"
help
Some platforms (e.g. the Rockchip RK3368) provide support in their
ROM for loading the next boot-stage after performing basic setup
from the SPL stage.
Enable this option, to return to the BOOTROM through the
BOOT_DEVICE_BOOTROM (or fall-through to the next boot device in the
boot device list, if not implemented for a given board)
config SPL_RAW_IMAGE_SUPPORT config SPL_RAW_IMAGE_SUPPORT
bool "Support SPL loading and booting of RAW images" bool "Support SPL loading and booting of RAW images"
default n if (ARCH_MX6 && (SPL_MMC_SUPPORT || SPL_SATA_SUPPORT)) default n if (ARCH_MX6 && (SPL_MMC_SUPPORT || SPL_SATA_SUPPORT))
@ -51,6 +72,15 @@ config SPL_SYS_MALLOC_SIMPLE
this will make the SPL binary smaller at the cost of more heap this will make the SPL binary smaller at the cost of more heap
usage as the *_simple malloc functions do not re-use free-ed mem. usage as the *_simple malloc functions do not re-use free-ed mem.
config TPL_SYS_MALLOC_SIMPLE
bool
prompt "Only use malloc_simple functions in the TPL"
help
Say Y here to only use the *_simple malloc functions from
malloc_simple.c, rather then using the versions from dlmalloc.c;
this will make the TPL binary smaller at the cost of more heap
usage as the *_simple malloc functions do not re-use free-ed mem.
config SPL_STACK_R config SPL_STACK_R
bool "Enable SDRAM location for SPL stack" bool "Enable SDRAM location for SPL stack"
help help
@ -573,14 +603,6 @@ config SPL_SPI_SUPPORT
enable SPI drivers that are needed for other purposes also, such enable SPI drivers that are needed for other purposes also, such
as a SPI PMIC. as a SPI PMIC.
config SPL_TIMER_SUPPORT
bool "Support timer drivers"
help
Enable support for timer drivers in SPL. These can be used to get
a timer value when in SPL, or perhaps for implementing a delay
function. This enables the drivers in drivers/timer as part of an
SPL build.
config SPL_USB_HOST_SUPPORT config SPL_USB_HOST_SUPPORT
bool "Support USB host drivers" bool "Support USB host drivers"
help help
@ -687,6 +709,74 @@ config TPL
if TPL if TPL
config TPL_LDSCRIPT
string "Linker script for the TPL stage"
depends on TPL
help
The TPL stage will usually require a different linker-script
(as it runs from a different memory region) than the regular
U-Boot stage. Set this to the path of the linker-script to
be used for TPL.
May be left empty to trigger the Makefile infrastructure to
fall back to the linker-script used for the SPL stage.
config TPL_NEEDS_SEPARATE_TEXT_BASE
bool "TPL needs a separate text-base"
default n
depends on TPL
help
Enable, if the TPL stage should not inherit its text-base
from the SPL stage. When enabled, a base address for the
.text sections of the TPL stage has to be set below.
config TPL_NEEDS_SEPARATE_STACK
bool "TPL needs a separate initial stack-pointer"
default n
depends on TPL
help
Enable, if the TPL stage should not inherit its initial
stack-pointer from the settings for the SPL stage.
config TPL_TEXT_BASE
hex "Base address for the .text section of the TPL stage"
depends on TPL_NEEDS_SEPARATE_TEXT_BASE
help
The base address for the .text section of the TPL stage.
config TPL_MAX_SIZE
int "Maximum size (in bytes) for the TPL stage"
default 0
depends on TPL
help
The maximum size (in bytes) of the TPL stage.
config TPL_STACK
hex "Address of the initial stack-pointer for the TPL stage"
depends on TPL_NEEDS_SEPARATE_STACK
help
The address of the initial stack-pointer for the TPL stage.
Usually this will be the (aligned) top-of-stack.
config TPL_BOOTROM_SUPPORT
bool "Support returning to the BOOTROM (from TPL)"
help
Some platforms (e.g. the Rockchip RK3368) provide support in their
ROM for loading the next boot-stage after performing basic setup
from the TPL stage.
Enable this option, to return to the BOOTROM through the
BOOT_DEVICE_BOOTROM (or fall-through to the next boot device in the
boot device list, if not implemented for a given board)
config TPL_DRIVERS_MISC_SUPPORT
bool "Support misc drivers in TPL"
help
Enable miscellaneous drivers in TPL. These drivers perform various
tasks that don't fall nicely into other categories, Enable this
option to build the drivers in drivers/misc as part of an TPL
build, for those that support building in TPL (not all drivers do).
config TPL_ENV_SUPPORT config TPL_ENV_SUPPORT
bool "Support an environment" bool "Support an environment"
help help
@ -695,7 +785,7 @@ config TPL_ENV_SUPPORT
config TPL_I2C_SUPPORT config TPL_I2C_SUPPORT
bool "Support I2C" bool "Support I2C"
help help
Enable support for the I2C bus in SPL. See SPL_I2C_SUPPORT for Enable support for the I2C bus in TPL. See SPL_I2C_SUPPORT for
details. details.
config TPL_LIBCOMMON_SUPPORT config TPL_LIBCOMMON_SUPPORT
@ -725,24 +815,24 @@ config TPL_MMC_SUPPORT
config TPL_NAND_SUPPORT config TPL_NAND_SUPPORT
bool "Support NAND flash" bool "Support NAND flash"
help help
Enable support for NAND in SPL. See SPL_NAND_SUPPORT for details. Enable support for NAND in TPL. See SPL_NAND_SUPPORT for details.
config TPL_SERIAL_SUPPORT config TPL_SERIAL_SUPPORT
bool "Support serial" bool "Support serial"
help help
Enable support for serial in SPL. See SPL_SERIAL_SUPPORT for Enable support for serial in TPL. See SPL_SERIAL_SUPPORT for
details. details.
config TPL_SPI_FLASH_SUPPORT config TPL_SPI_FLASH_SUPPORT
bool "Support SPI flash drivers" bool "Support SPI flash drivers"
help help
Enable support for using SPI flash in SPL. See SPL_SPI_FLASH_SUPPORT Enable support for using SPI flash in TPL. See SPL_SPI_FLASH_SUPPORT
for details. for details.
config TPL_SPI_SUPPORT config TPL_SPI_SUPPORT
bool "Support SPI drivers" bool "Support SPI drivers"
help help
Enable support for using SPI in SPL. See SPL_SPI_SUPPORT for Enable support for using SPI in TPL. See SPL_SPI_SUPPORT for
details. details.
endif # TPL endif # TPL

@ -10,23 +10,24 @@
ifdef CONFIG_SPL_BUILD ifdef CONFIG_SPL_BUILD
obj-$(CONFIG_SPL_FRAMEWORK) += spl.o obj-$(CONFIG_SPL_FRAMEWORK) += spl.o
obj-$(CONFIG_SPL_LOAD_FIT) += spl_fit.o obj-$(CONFIG_$(SPL_TPL_)BOOTROM_SUPPORT) += spl_bootrom.o
obj-$(CONFIG_SPL_NOR_SUPPORT) += spl_nor.o obj-$(CONFIG_$(SPL_TPL_)LOAD_FIT) += spl_fit.o
obj-$(CONFIG_SPL_XIP_SUPPORT) += spl_xip.o obj-$(CONFIG_$(SPL_TPL_)SPL_NOR_SUPPORT) += spl_nor.o
obj-$(CONFIG_SPL_YMODEM_SUPPORT) += spl_ymodem.o obj-$(CONFIG_$(SPL_TPL_)SPL_XIP_SUPPORT) += spl_xip.o
obj-$(CONFIG_$(SPL_TPL_)SPL_YMODEM_SUPPORT) += spl_ymodem.o
ifndef CONFIG_SPL_UBI ifndef CONFIG_SPL_UBI
obj-$(CONFIG_SPL_NAND_SUPPORT) += spl_nand.o obj-$(CONFIG_$(SPL_TPL_)NAND_SUPPORT) += spl_nand.o
obj-$(CONFIG_SPL_ONENAND_SUPPORT) += spl_onenand.o obj-$(CONFIG_$(SPL_TPL_)ONENAND_SUPPORT) += spl_onenand.o
endif endif
obj-$(CONFIG_SPL_UBI) += spl_ubi.o obj-$(CONFIG_$(SPL_TPL_)UBI) += spl_ubi.o
obj-$(CONFIG_SPL_NET_SUPPORT) += spl_net.o obj-$(CONFIG_$(SPL_TPL_)NET_SUPPORT) += spl_net.o
obj-$(CONFIG_SPL_MMC_SUPPORT) += spl_mmc.o obj-$(CONFIG_$(SPL_TPL_)MMC_SUPPORT) += spl_mmc.o
obj-$(CONFIG_SPL_ATF_SUPPORT) += spl_atf.o obj-$(CONFIG_$(SPL_TPL_)ATF_SUPPORT) += spl_atf.o
obj-$(CONFIG_SPL_USB_SUPPORT) += spl_usb.o obj-$(CONFIG_$(SPL_TPL_)USB_SUPPORT) += spl_usb.o
obj-$(CONFIG_SPL_FAT_SUPPORT) += spl_fat.o obj-$(CONFIG_$(SPL_TPL_)FAT_SUPPORT) += spl_fat.o
obj-$(CONFIG_SPL_EXT_SUPPORT) += spl_ext.o obj-$(CONFIG_$(SPL_TPL_)EXT_SUPPORT) += spl_ext.o
obj-$(CONFIG_SPL_SATA_SUPPORT) += spl_sata.o obj-$(CONFIG_$(SPL_TPL_)SATA_SUPPORT) += spl_sata.o
obj-$(CONFIG_SPL_DFU_SUPPORT) += spl_dfu.o obj-$(CONFIG_$(SPL_TPL_)DFU_SUPPORT) += spl_dfu.o
obj-$(CONFIG_SPL_SPI_LOAD) += spl_spi.o obj-$(CONFIG_$(SPL_TPL_)SPI_LOAD) += spl_spi.o
obj-$(CONFIG_SPL_RAM_SUPPORT) += spl_ram.o obj-$(CONFIG_$(SPL_TPL_)RAM_SUPPORT) += spl_ram.o
endif endif

@ -6,6 +6,7 @@
* *
* SPDX-License-Identifier: GPL-2.0+ * SPDX-License-Identifier: GPL-2.0+
*/ */
#include <common.h> #include <common.h>
#include <dm.h> #include <dm.h>
#include <spl.h> #include <spl.h>
@ -243,7 +244,7 @@ static int spl_common_init(bool setup_malloc)
return ret; return ret;
} }
} }
if (IS_ENABLED(CONFIG_SPL_DM)) { if (CONFIG_IS_ENABLED(DM)) {
bootstage_start(BOOTSTATE_ID_ACCUM_DM_SPL, "dm_spl"); bootstage_start(BOOTSTATE_ID_ACCUM_DM_SPL, "dm_spl");
/* With CONFIG_SPL_OF_PLATDATA, bring in all devices */ /* With CONFIG_SPL_OF_PLATDATA, bring in all devices */
ret = dm_init_and_scan(!CONFIG_IS_ENABLED(OF_PLATDATA)); ret = dm_init_and_scan(!CONFIG_IS_ENABLED(OF_PLATDATA));
@ -424,7 +425,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
gd->malloc_ptr / 1024); gd->malloc_ptr / 1024);
#endif #endif
if (IS_ENABLED(CONFIG_SPL_ATF_SUPPORT)) { if (CONFIG_IS_ENABLED(ATF_SUPPORT)) {
debug("loaded - jumping to U-Boot via ATF BL31.\n"); debug("loaded - jumping to U-Boot via ATF BL31.\n");
bl31_entry(); bl31_entry();
} }
@ -486,7 +487,7 @@ ulong spl_relocate_stack_gd(void)
gd_t *new_gd; gd_t *new_gd;
ulong ptr = CONFIG_SPL_STACK_R_ADDR; ulong ptr = CONFIG_SPL_STACK_R_ADDR;
#if defined(CONFIG_SPL_SYS_MALLOC_SIMPLE) && CONFIG_SPL_SYS_MALLOC_F_LEN #if defined(CONFIG_SPL_SYS_MALLOC_SIMPLE) && CONFIG_VAL(SYS_MALLOC_F_LEN)
if (CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN) { if (CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN) {
ptr -= CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN; ptr -= CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN;
gd->malloc_base = ptr; gd->malloc_base = ptr;

@ -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);

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
@ -19,6 +18,8 @@ CONFIG_TPL=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_EEPROM=y CONFIG_CMD_EEPROM=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
@ -18,9 +17,12 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_SPL=y CONFIG_SPL=y
CONFIG_TPL=y CONFIG_TPL=y
CONFIG_TPL_DRIVERS_MISC_SUPPORT=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
@ -17,9 +16,12 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_SPL=y CONFIG_SPL=y
CONFIG_TPL=y CONFIG_TPL=y
CONFIG_TPL_DRIVERS_MISC_SUPPORT=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
@ -18,9 +17,12 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_SPL=y CONFIG_SPL=y
CONFIG_TPL=y CONFIG_TPL=y
CONFIG_TPL_DRIVERS_MISC_SUPPORT=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
@ -17,10 +16,12 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_SPL=y CONFIG_SPL=y
CONFIG_TPL=y CONFIG_TPL=y
CONFIG_TPL_DRIVERS_MISC_SUPPORT=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
# CONFIG_CMD_ERRATA is not set # CONFIG_CMD_ERRATA is not set
@ -20,6 +19,8 @@ CONFIG_TPL=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
# CONFIG_CMD_ERRATA is not set # CONFIG_CMD_ERRATA is not set
@ -19,6 +18,8 @@ CONFIG_TPL=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
# CONFIG_CMD_ERRATA is not set # CONFIG_CMD_ERRATA is not set
@ -19,6 +18,8 @@ CONFIG_TPL=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
# CONFIG_CMD_ERRATA is not set # CONFIG_CMD_ERRATA is not set
@ -20,6 +19,8 @@ CONFIG_TPL=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
# CONFIG_CMD_ERRATA is not set # CONFIG_CMD_ERRATA is not set
@ -19,6 +18,8 @@ CONFIG_TPL=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
CONFIG_TARGET_P1022DS=y CONFIG_TARGET_P1022DS=y
@ -19,6 +18,8 @@ CONFIG_TPL=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_REGINFO=y CONFIG_CMD_REGINFO=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
CONFIG_TARGET_P1022DS=y CONFIG_TARGET_P1022DS=y
@ -19,6 +18,7 @@ CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_REGINFO=y CONFIG_CMD_REGINFO=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
# CONFIG_CMD_ERRATA is not set # CONFIG_CMD_ERRATA is not set
@ -19,6 +18,8 @@ CONFIG_TPL=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
# CONFIG_CMD_ERRATA is not set # CONFIG_CMD_ERRATA is not set
@ -20,6 +19,7 @@ CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_NAND=y CONFIG_CMD_NAND=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
# CONFIG_CMD_ERRATA is not set # CONFIG_CMD_ERRATA is not set
@ -21,6 +20,7 @@ CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -2,7 +2,6 @@ CONFIG_PPC=y
CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_TPL_LIBCOMMON_SUPPORT=y CONFIG_TPL_LIBCOMMON_SUPPORT=y
CONFIG_TPL_LIBGENERIC_SUPPORT=y CONFIG_TPL_LIBGENERIC_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y
CONFIG_MPC85xx=y CONFIG_MPC85xx=y
# CONFIG_CMD_ERRATA is not set # CONFIG_CMD_ERRATA is not set
@ -19,6 +18,8 @@ CONFIG_TPL=y
CONFIG_TPL_ENV_SUPPORT=y CONFIG_TPL_ENV_SUPPORT=y
CONFIG_TPL_I2C_SUPPORT=y CONFIG_TPL_I2C_SUPPORT=y
CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT=y
CONFIG_TPL_NAND_SUPPORT=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y CONFIG_CMD_SF=y

@ -27,7 +27,7 @@ CONFIG_SPL_NET_SUPPORT=y
CONFIG_SPL_PCI_SUPPORT=y CONFIG_SPL_PCI_SUPPORT=y
CONFIG_SPL_PCH_SUPPORT=y CONFIG_SPL_PCH_SUPPORT=y
CONFIG_SPL_RTC_SUPPORT=y CONFIG_SPL_RTC_SUPPORT=y
CONFIG_SPL_TIMER_SUPPORT=y CONFIG_SPL_TIMER=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_CPU=y CONFIG_CMD_CPU=y
# CONFIG_CMD_BOOTEFI_HELLO_COMPILE is not set # CONFIG_CMD_BOOTEFI_HELLO_COMPILE is not set

@ -1,5 +1,6 @@
CONFIG_ARM=y CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x1000
CONFIG_ROCKCHIP_RK3368=y CONFIG_ROCKCHIP_RK3368=y
CONFIG_TARGET_EVB_PX5=y CONFIG_TARGET_EVB_PX5=y
CONFIG_DEFAULT_DEVICE_TREE="rk3368-px5-evb" CONFIG_DEFAULT_DEVICE_TREE="rk3368-px5-evb"

@ -4,7 +4,7 @@ CONFIG_SPL_LIBCOMMON_SUPPORT=y
CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y
CONFIG_SYS_MALLOC_F_LEN=0x800 CONFIG_SYS_MALLOC_F_LEN=0x800
CONFIG_ROCKCHIP_RK322X=y CONFIG_ROCKCHIP_RK322X=y
CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TARGET_EVB_RK3229=y CONFIG_TARGET_EVB_RK3229=y
CONFIG_SPL_STACK_R_ADDR=0x80000 CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3229-evb" CONFIG_DEFAULT_DEVICE_TREE="rk3229-evb"

@ -2,7 +2,7 @@ CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_ROCKCHIP_RK3288=y CONFIG_ROCKCHIP_RK3288=y
CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TARGET_EVB_RK3288=y CONFIG_TARGET_EVB_RK3288=y
CONFIG_SPL_STACK_R_ADDR=0x80000 CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-evb" CONFIG_DEFAULT_DEVICE_TREE="rk3288-evb"

@ -2,7 +2,7 @@ CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_ROCKCHIP_RK3288=y CONFIG_ROCKCHIP_RK3288=y
CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TARGET_FENNEC_RK3288=y CONFIG_TARGET_FENNEC_RK3288=y
CONFIG_SPL_STACK_R_ADDR=0x80000 CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-fennec" CONFIG_DEFAULT_DEVICE_TREE="rk3288-fennec"

@ -2,7 +2,7 @@ CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_ROCKCHIP_RK3288=y CONFIG_ROCKCHIP_RK3288=y
CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TARGET_FIREFLY_RK3288=y CONFIG_TARGET_FIREFLY_RK3288=y
CONFIG_SPL_STACK_R_ADDR=0x80000 CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-firefly" CONFIG_DEFAULT_DEVICE_TREE="rk3288-firefly"

@ -1,5 +1,6 @@
CONFIG_ARM=y CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x1000
CONFIG_ROCKCHIP_RK3368=y CONFIG_ROCKCHIP_RK3368=y
CONFIG_TARGET_GEEKBOX=y CONFIG_TARGET_GEEKBOX=y
CONFIG_DEFAULT_DEVICE_TREE="rk3368-geekbox" CONFIG_DEFAULT_DEVICE_TREE="rk3368-geekbox"

@ -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"

@ -2,7 +2,7 @@ CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_ROCKCHIP_RK3288=y CONFIG_ROCKCHIP_RK3288=y
CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TARGET_MIQI_RK3288=y CONFIG_TARGET_MIQI_RK3288=y
CONFIG_SPL_STACK_R_ADDR=0x80000 CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-miqi" CONFIG_DEFAULT_DEVICE_TREE="rk3288-miqi"

@ -2,7 +2,7 @@ CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_ROCKCHIP_RK3288=y CONFIG_ROCKCHIP_RK3288=y
CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TARGET_PHYCORE_RK3288=y CONFIG_TARGET_PHYCORE_RK3288=y
CONFIG_SPL_STACK_R_ADDR=0x80000 CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-phycore-rdk" CONFIG_DEFAULT_DEVICE_TREE="rk3288-phycore-rdk"

@ -2,7 +2,7 @@ CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_ROCKCHIP_RK3288=y CONFIG_ROCKCHIP_RK3288=y
CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TARGET_POPMETAL_RK3288=y CONFIG_TARGET_POPMETAL_RK3288=y
CONFIG_SPL_STACK_R_ADDR=0x80000 CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-popmetal" CONFIG_DEFAULT_DEVICE_TREE="rk3288-popmetal"

@ -26,7 +26,7 @@ CONFIG_SPL_NET_SUPPORT=y
CONFIG_SPL_PCI_SUPPORT=y CONFIG_SPL_PCI_SUPPORT=y
CONFIG_SPL_PCH_SUPPORT=y CONFIG_SPL_PCH_SUPPORT=y
CONFIG_SPL_RTC_SUPPORT=y CONFIG_SPL_RTC_SUPPORT=y
CONFIG_SPL_TIMER_SUPPORT=y CONFIG_SPL_TIMER=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_CMD_CPU=y CONFIG_CMD_CPU=y
# CONFIG_CMD_BOOTEFI_HELLO_COMPILE is not set # CONFIG_CMD_BOOTEFI_HELLO_COMPILE is not set

@ -2,7 +2,7 @@ CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_ROCKCHIP_RK3288=y CONFIG_ROCKCHIP_RK3288=y
CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TARGET_ROCK2=y CONFIG_TARGET_ROCK2=y
CONFIG_SPL_STACK_R_ADDR=0x80000 CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-rock2-square" CONFIG_DEFAULT_DEVICE_TREE="rk3288-rock2-square"

@ -4,7 +4,8 @@ CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_ROCKCHIP_RK3188=y CONFIG_ROCKCHIP_RK3188=y
CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TARGET_ROCK=y CONFIG_TARGET_ROCK=y
CONFIG_SPL_STACK_R_ADDR=0x60080000 CONFIG_SPL_STACK_R_ADDR=0x60080000
CONFIG_DEFAULT_DEVICE_TREE="rk3188-radxarock" CONFIG_DEFAULT_DEVICE_TREE="rk3188-radxarock"
@ -49,5 +50,6 @@ CONFIG_DEBUG_UART_SHIFT=2
CONFIG_SYS_NS16550=y CONFIG_SYS_NS16550=y
CONFIG_SYSRESET=y CONFIG_SYSRESET=y
CONFIG_SPL_TINY_MEMSET=y CONFIG_SPL_TINY_MEMSET=y
CONFIG_TPL_TINY_MEMSET=y
CONFIG_CMD_DHRYSTONE=y CONFIG_CMD_DHRYSTONE=y
CONFIG_ERRNO_STR=y CONFIG_ERRNO_STR=y

@ -1,5 +1,6 @@
CONFIG_ARM=y CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x1000
CONFIG_ROCKCHIP_RK3368=y CONFIG_ROCKCHIP_RK3368=y
CONFIG_DEFAULT_DEVICE_TREE="rk3368-sheep" CONFIG_DEFAULT_DEVICE_TREE="rk3368-sheep"
CONFIG_DEBUG_UART=y CONFIG_DEBUG_UART=y

@ -2,7 +2,7 @@ CONFIG_ARM=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_ROCKCHIP_RK3288=y CONFIG_ROCKCHIP_RK3288=y
CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TARGET_TINKER_RK3288=y CONFIG_TARGET_TINKER_RK3288=y
CONFIG_SPL_STACK_R_ADDR=0x80000 CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-tinker" CONFIG_DEFAULT_DEVICE_TREE="rk3288-tinker"

@ -130,7 +130,7 @@ load a second-level bootloader(ie. U-BOOT) as soon as it returns to bootrom.
Therefore RK3288 has another loading sequence like RK3036. The option of Therefore RK3288 has another loading sequence like RK3036. The option of
U-Boot is controlled with this setting in U-Boot: U-Boot is controlled with this setting in U-Boot:
#define CONFIG_ROCKCHIP_SPL_BACK_TO_BROM #define CONFIG_SPL_ROCKCHIP_BACK_TO_BROM
You can create the image via the following operations: You can create the image via the following operations:

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save