summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2023-04-18 11:37:07 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2023-05-23 09:11:28 +0200
commite4beeb1ede7f7be2cfe33ec2dc0df06af0498787 (patch)
treeb35afdffc27ee0227b58d48416ec8a10927d7c7c /arch
parent8744a7a86bc49248160e0c45e82e37e9180b7927 (diff)
downloadbarebox-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/Kconfig5
-rw-r--r--arch/arm/mach-rockchip/Makefile1
-rw-r--r--arch/arm/mach-rockchip/atf.c35
-rw-r--r--arch/arm/mach-rockchip/rk3588.c20
-rw-r--r--arch/arm/mach-rockchip/rockchip.c4
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;