[U-Boot,0/8] arm-trusted-firmware support for rk3288
mbox series

Message ID 20190405083013.5473-1-heiko@sntech.de
Headers show
  • arm-trusted-firmware support for rk3288
Related show


Heiko Stuebner April 5, 2019, 8:30 a.m. UTC
This adds support for jumping into aarch32 ATF from u-boot spl
similar to how it works on aarch64.

I guess the biggest question might be "why" ;-)

Right now the status quo on Rockchip arm32 socs is, that the linux
kernel itself does smp and suspend handling. This precludes us from
doing fance things like virtualization but also deep suspend with
the DDR in self refresh, due to at least 2 approaches for putting
generalized code into sram from the kernel side failed so far.

For Virtualization we need the kernel to start in hyp mode and hence
needing to use psci for smp handling as well.

So there are multiple ways for achieving that, we could do
- psci in uboot itself is bad for coreboot and barebox who would
  need to reimplement the same
- psci in optee is the solution Rockchip themself choose but only
  provides precompiled binaries for their arm32 socs and also
  reimplmenting this in an open way is somewhat of a dead-end
  because while aarch64 can use op-tee, psci itself is always
  done in the atf
- atf using the somewhat new aarch32 port has the advantage of
  being able to share a lot of platform code making maintenance
  together with the aarch64 parts a lot easier

Not having to rely on binary components as part of the boot process
is way nicer not only for reproducible builds but also for future
proofing projects as binary blobs may not receive updates after
some time.

Also it is still possible to use this together with an optee
implementation for specific security foobar. The only difference
is that while aarch64 can has separate states for secure monitor
and secure-os, in aarch32 both need to share the bl32 space, so
optee needs to be a payload during the atf build. If no secure-os
is needed, atf can use the sp_min payload, which is part of atf.

This works nicely on my rk3288 evb and even virtualization worked
already. Full support will still need a modified devicetree to
actually make use of the new psci capabilites.

Heiko Stuebner (8):
  arm: v7: add read_mpidr function for arm32
  spl: atf: add arm32 variant
  rockchip: rk3288: move TPL options to generic position
  rockchip: rk3288: adjust load addresses
  rockchip: rk3288: reserve first 2MB when build with ATF support
  rockchip: rk3288: split evb into its two entities
  rockchip: rk3288: convert rk3288-evb to use tpl
  rockchip: rk3288: make both evb variants use atf

 arch/arm/dts/Makefile                         |   3 +-
 ...evb.dts => rk3288-evb-act8846-u-boot.dtsi} |  33 +-
 arch/arm/dts/rk3288-evb-act8846.dts           | 188 +++++++
 arch/arm/dts/rk3288-evb-rk808-u-boot.dtsi     |  40 ++
 arch/arm/dts/rk3288-evb-rk808.dts             | 202 +++++++
 arch/arm/dts/rk3288-evb.dtsi                  | 493 ++++++++----------
 arch/arm/include/asm/system.h                 |   9 +
 arch/arm/mach-rockchip/Kconfig                |  16 +
 arch/arm/mach-rockchip/rk3288/Kconfig         |  16 +-
 arch/arm/mach-rockchip/rk3288/rk3288.c        |  16 +
 board/rockchip/evb_rk3288/evb-rk3288.c        |  14 +
 board/rockchip/evb_rk3288/fit_spl_atf.its     |  52 ++
 common/spl/Kconfig                            |   2 +-
 common/spl/spl_atf.c                          |  86 ++-
 ...defconfig => evb-rk3288-act8846_defconfig} |  14 +-
 configs/evb-rk3288-rk808_defconfig            |  91 ++++
 include/atf_common.h                          |  52 ++
 include/configs/rk3288_common.h               |   8 +-
 18 files changed, 998 insertions(+), 337 deletions(-)
 rename arch/arm/dts/{rk3288-evb.dts => rk3288-evb-act8846-u-boot.dtsi} (64%)
 create mode 100644 arch/arm/dts/rk3288-evb-act8846.dts
 create mode 100644 arch/arm/dts/rk3288-evb-rk808-u-boot.dtsi
 create mode 100644 arch/arm/dts/rk3288-evb-rk808.dts
 create mode 100644 board/rockchip/evb_rk3288/fit_spl_atf.its
 rename configs/{evb-rk3288_defconfig => evb-rk3288-act8846_defconfig} (87%)
 create mode 100644 configs/evb-rk3288-rk808_defconfig