diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2023-04-18 11:37:07 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2023-05-23 09:11:28 +0200 |
commit | e4beeb1ede7f7be2cfe33ec2dc0df06af0498787 (patch) | |
tree | b35afdffc27ee0227b58d48416ec8a10927d7c7c /arch | |
parent | 8744a7a86bc49248160e0c45e82e37e9180b7927 (diff) | |
download | barebox-e4beeb1ede7f7be2cfe33ec2dc0df06af0498787.tar.gz barebox-e4beeb1ede7f7be2cfe33ec2dc0df06af0498787.tar.xz |
ARM: rockchip: Add rk3588 support
This adds the assorted rk3588 support stuff which is very similar
to the existing rk3568 support
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-rockchip/Kconfig | 5 | ||||
-rw-r--r-- | arch/arm/mach-rockchip/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-rockchip/atf.c | 35 | ||||
-rw-r--r-- | arch/arm/mach-rockchip/rk3588.c | 20 | ||||
-rw-r--r-- | arch/arm/mach-rockchip/rockchip.c | 4 |
5 files changed, 65 insertions, 0 deletions
diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig index 6f32a440a1..7d540974f5 100644 --- a/arch/arm/mach-rockchip/Kconfig +++ b/arch/arm/mach-rockchip/Kconfig @@ -47,6 +47,11 @@ config ARCH_RK3568 select ARCH_ROCKCHIP_V8 select HW_HAS_PCI +config ARCH_RK3588 + bool + select ARCH_ROCKCHIP_V8 + select HW_HAS_PCI + comment "select Rockchip boards:" if 32BIT diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile index 04d75ce287..28ba3ebec8 100644 --- a/arch/arm/mach-rockchip/Makefile +++ b/arch/arm/mach-rockchip/Makefile @@ -5,6 +5,7 @@ pbl-$(CONFIG_ARCH_ROCKCHIP_ATF) += atf.o obj-$(CONFIG_ARCH_RK3188) += rk3188.o obj-$(CONFIG_ARCH_RK3288) += rk3288.o obj-pbl-$(CONFIG_ARCH_RK3568) += rk3568.o +obj-pbl-$(CONFIG_ARCH_RK3588) += rk3588.o obj-$(CONFIG_ARCH_ROCKCHIP_V8) += bootm.o obj-pbl-$(CONFIG_ARCH_ROCKCHIP_V8) += dmc.o obj-$(CONFIG_BAREBOX_UPDATE) += bbu.o diff --git a/arch/arm/mach-rockchip/atf.c b/arch/arm/mach-rockchip/atf.c index d1431cc526..eaba209ff3 100644 --- a/arch/arm/mach-rockchip/atf.c +++ b/arch/arm/mach-rockchip/atf.c @@ -10,6 +10,7 @@ #include <mach/rockchip/rockchip.h> #include <mach/rockchip/bootrom.h> #include <mach/rockchip/rk3568-regs.h> +#include <mach/rockchip/rk3588-regs.h> static unsigned long load_elf64_image_phdr(const void *elf) { @@ -103,3 +104,37 @@ void __noreturn rk3568_barebox_entry(void *fdt) barebox_arm_entry(membase, memsize, fdt); } + +void rk3588_atf_load_bl31(void *fdt) +{ + rockchip_atf_load_bl31(RK3588, rk3588_bl31_bin, rk3588_op_tee_bin, fdt); +} + +void __noreturn rk3588_barebox_entry(void *fdt) +{ + unsigned long membase, memsize; + + membase = RK3588_DRAM_BOTTOM; + memsize = rk3588_ram0_size() - RK3588_DRAM_BOTTOM; + + if (current_el() == 3) { + rk3588_lowlevel_init(); + rockchip_store_bootrom_iram(membase, memsize, IOMEM(RK3588_IRAM_BASE)); + + /* + * The downstream TF-A doesn't cope with our device tree when + * CONFIG_OF_OVERLAY_LIVE is enabled, supposedly because it is + * too big for some reason. Otherwise it doesn't have any visible + * effect if we pass a device tree or not, except that the TF-A + * fills in the ethernet MAC address into the device tree. + * The upstream TF-A doesn't use the device tree at all. + * + * Pass NULL for now until we have a good reason to pass a real + * device tree. + */ + rk3588_atf_load_bl31(NULL); + /* not reached when CONFIG_ARCH_ROCKCHIP_ATF */ + } + + barebox_arm_entry(membase, memsize, fdt); +} diff --git a/arch/arm/mach-rockchip/rk3588.c b/arch/arm/mach-rockchip/rk3588.c new file mode 100644 index 0000000000..25f1481296 --- /dev/null +++ b/arch/arm/mach-rockchip/rk3588.c @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0+ +#include <common.h> +#include <io.h> +#include <bootsource.h> +#include <mach/rockchip/rk3588-regs.h> +#include <mach/rockchip/rockchip.h> +#include <asm/barebox-arm-head.h> +#include <mach/rockchip/bootrom.h> + +void rk3588_lowlevel_init(void) +{ + arm_cpu_lowlevel_init(); +} + +int rk3588_init(void) +{ + rockchip_parse_bootrom_iram(rockchip_scratch_space()); + + return 0; +} diff --git a/arch/arm/mach-rockchip/rockchip.c b/arch/arm/mach-rockchip/rockchip.c index d421dfb488..1c962ad8c8 100644 --- a/arch/arm/mach-rockchip/rockchip.c +++ b/arch/arm/mach-rockchip/rockchip.c @@ -18,6 +18,8 @@ int rockchip_soc(void) __rockchip_soc = 3566; else if (of_machine_is_compatible("rockchip,rk3568")) __rockchip_soc = 3568; + else if (of_machine_is_compatible("rockchip,rk3588")) + __rockchip_soc = 3588; return __rockchip_soc; } @@ -33,6 +35,8 @@ static int rockchip_init(void) return rk3568_init(); case 3568: return rk3568_init(); + case 3588: + return rk3588_init(); } return 0; |