After the removal of the IO domain configuration code, the low-level initialization is the same for all RK356x boards. Add a common method rk3568_start to remove this code duplication. Signed-off-by: Michael Riesch <michael.riesch@xxxxxxxxxxxxxx> --- arch/arm/boards/pine64-quartz64/lowlevel.c | 30 +---------------- arch/arm/boards/radxa-rock3/lowlevel.c | 27 --------------- .../arm/boards/rockchip-rk3568-evb/lowlevel.c | 33 +------------------ .../arm/mach-rockchip/include/mach/rockchip.h | 1 + arch/arm/mach-rockchip/rk3568.c | 24 ++++++++++++++ 5 files changed, 27 insertions(+), 88 deletions(-) diff --git a/arch/arm/boards/pine64-quartz64/lowlevel.c b/arch/arm/boards/pine64-quartz64/lowlevel.c index b295885522..e1beb3e624 100644 --- a/arch/arm/boards/pine64-quartz64/lowlevel.c +++ b/arch/arm/boards/pine64-quartz64/lowlevel.c @@ -1,39 +1,11 @@ // SPDX-License-Identifier: GPL-2.0-only #include <common.h> -#include <linux/sizes.h> -#include <asm/barebox-arm-head.h> #include <asm/barebox-arm.h> -#include <mach/hardware.h> -#include <mach/atf.h> -#include <debug_ll.h> #include <mach/rockchip.h> extern char __dtb_rk3566_quartz64_a_start[]; -static noinline void start_quartz64(void *fdt) -{ - /* - * Image execution starts at 0x0, but this is used for ATF and - * OP-TEE later, so move away from here. - */ - if (current_el() == 3) - relocate_to_adr_full(RK3568_BAREBOX_LOAD_ADDRESS); - else - relocate_to_current_adr(); - - setup_c(); - - if (current_el() == 3) { - rk3568_lowlevel_init(); - rk3568_atf_load_bl31(fdt); - /* not reached */ - } - - barebox_arm_entry(RK3568_DRAM_BOTTOM, 0x80000000 - RK3568_DRAM_BOTTOM, - fdt); -} - ENTRY_FUNCTION(start_quartz64a, r0, r1, r2) { - start_quartz64(__dtb_rk3566_quartz64_a_start); + rk3568_start(__dtb_rk3566_quartz64_a_start); } diff --git a/arch/arm/boards/radxa-rock3/lowlevel.c b/arch/arm/boards/radxa-rock3/lowlevel.c index 5c2499362b..9875a3966b 100644 --- a/arch/arm/boards/radxa-rock3/lowlevel.c +++ b/arch/arm/boards/radxa-rock3/lowlevel.c @@ -1,37 +1,10 @@ // SPDX-License-Identifier: GPL-2.0-only #include <common.h> -#include <linux/sizes.h> -#include <asm/barebox-arm-head.h> #include <asm/barebox-arm.h> -#include <mach/hardware.h> -#include <mach/atf.h> -#include <debug_ll.h> #include <mach/rockchip.h> extern char __dtb_rk3568_rock_3a_start[]; -static noinline void rk3568_start(void *fdt) -{ - /* - * Image execution starts at 0x0, but this is used for ATF and - * OP-TEE later, so move away from here. - */ - if (current_el() == 3) - relocate_to_adr_full(RK3568_BAREBOX_LOAD_ADDRESS); - else - relocate_to_current_adr(); - - setup_c(); - - if (current_el() == 3) { - rk3568_lowlevel_init(); - rk3568_atf_load_bl31(fdt); - /* not reached */ - } - - barebox_arm_entry(RK3568_DRAM_BOTTOM, 0x80000000 - RK3568_DRAM_BOTTOM, fdt); -} - ENTRY_FUNCTION(start_rock3a, r0, r1, r2) { rk3568_start(__dtb_rk3568_rock_3a_start); diff --git a/arch/arm/boards/rockchip-rk3568-evb/lowlevel.c b/arch/arm/boards/rockchip-rk3568-evb/lowlevel.c index 9c1c7be8a6..4954e9a3cc 100644 --- a/arch/arm/boards/rockchip-rk3568-evb/lowlevel.c +++ b/arch/arm/boards/rockchip-rk3568-evb/lowlevel.c @@ -1,43 +1,12 @@ // SPDX-License-Identifier: GPL-2.0-only #include <common.h> -#include <linux/sizes.h> -#include <asm/barebox-arm-head.h> #include <asm/barebox-arm.h> -#include <mach/hardware.h> -#include <mach/atf.h> -#include <debug_ll.h> #include <mach/rockchip.h> extern char __dtb_rk3568_evb1_v10_start[]; -static noinline void rk3568_start(void) -{ - void *fdt; - - fdt = __dtb_rk3568_evb1_v10_start; - - if (current_el() == 3) { - rk3568_lowlevel_init(); - rk3568_atf_load_bl31(fdt); - /* not reached */ - } - - barebox_arm_entry(RK3568_DRAM_BOTTOM, 0x80000000 - RK3568_DRAM_BOTTOM, fdt); -} - ENTRY_FUNCTION(start_rk3568_evb, r0, r1, r2) { - /* - * Image execution starts at 0x0, but this is used for ATF and - * OP-TEE later, so move away from here. - */ - if (current_el() == 3) - relocate_to_adr_full(RK3568_BAREBOX_LOAD_ADDRESS); - else - relocate_to_current_adr(); - - setup_c(); - - rk3568_start(); + rk3568_start(__dtb_rk3568_evb1_v10_start); } diff --git a/arch/arm/mach-rockchip/include/mach/rockchip.h b/arch/arm/mach-rockchip/include/mach/rockchip.h index ff8b1109f8..7b681c6ce3 100644 --- a/arch/arm/mach-rockchip/include/mach/rockchip.h +++ b/arch/arm/mach-rockchip/include/mach/rockchip.h @@ -34,5 +34,6 @@ static inline int rk3568_init(void) #endif void rk3568_lowlevel_init(void); +void rk3568_start(void *fdt); #endif /* __MACH_ROCKCHIP_H */ diff --git a/arch/arm/mach-rockchip/rk3568.c b/arch/arm/mach-rockchip/rk3568.c index 19dfa9b871..26bc4a06eb 100644 --- a/arch/arm/mach-rockchip/rk3568.c +++ b/arch/arm/mach-rockchip/rk3568.c @@ -2,8 +2,10 @@ #include <common.h> #include <io.h> #include <bootsource.h> +#include <mach/atf.h> #include <mach/rk3568-regs.h> #include <mach/rockchip.h> +#include <asm/barebox-arm.h> #define GRF_BASE 0xfdc60000 #define GRF_GPIO1B_DS_2 0x218 @@ -169,3 +171,25 @@ int rk3568_init(void) return 0; } + +void rk3568_start(void *fdt) +{ + /* + * Image execution starts at 0x0, but this is used for ATF and + * OP-TEE later, so move away from here. + */ + if (current_el() == 3) + relocate_to_adr_full(RK3568_BAREBOX_LOAD_ADDRESS); + else + relocate_to_current_adr(); + + setup_c(); + + if (current_el() == 3) { + rk3568_lowlevel_init(); + rk3568_atf_load_bl31(fdt); + /* not reached */ + } + + barebox_arm_entry(RK3568_DRAM_BOTTOM, 0x80000000 - RK3568_DRAM_BOTTOM, fdt); +} -- 2.30.2