From: Ahmad Fatoum <[email protected]> Add board support for RK3562-EVB2 with boot source detection and BBU handlers for eMMC and SD card.
Co-developed-by: Ahmad Fatoum <[email protected]> Signed-off-by: Ahmad Fatoum <[email protected]> Signed-off-by: Sohaib Mohamed <[email protected]> --- arch/arm/boards/Makefile | 1 + arch/arm/boards/rockchip-rk3562-evb2/.gitignore | 1 + arch/arm/boards/rockchip-rk3562-evb2/Makefile | 4 +++ arch/arm/boards/rockchip-rk3562-evb2/board.c | 47 +++++++++++++++++++++++++ arch/arm/boards/rockchip-rk3562-evb2/lowlevel.c | 23 ++++++++++++ arch/arm/configs/multi_v8_defconfig | 1 + arch/arm/configs/rockchip_v8_defconfig | 1 + arch/arm/dts/Makefile | 1 + arch/arm/dts/rk3562-evb2-v10.dts | 9 +++++ arch/arm/dts/rk3562.dtsi | 40 +++++++++++++++++++++ arch/arm/mach-rockchip/Kconfig | 6 ++++ images/Makefile.rockchip | 1 + 12 files changed, 135 insertions(+) diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile index 4c586de2a9..946af95560 100644 --- a/arch/arm/boards/Makefile +++ b/arch/arm/boards/Makefile @@ -185,6 +185,7 @@ obj-$(CONFIG_MACH_TQMLS1046A) += tqmls1046a/ obj-$(CONFIG_MACH_LS1021AIOT) += ls1021aiot/ obj-$(CONFIG_MACH_MNT_REFORM) += mnt-reform/ obj-$(CONFIG_MACH_SKOV_ARM9CPU) += skov-arm9cpu/ +obj-$(CONFIG_MACH_RK3562_EVB2) += rockchip-rk3562-evb2/ obj-$(CONFIG_MACH_RK3568_EVB) += rockchip-rk3568-evb/ obj-$(CONFIG_MACH_RK3568_BPI_R2PRO) += rockchip-rk3568-bpi-r2pro/ obj-$(CONFIG_MACH_PINE64_PINETAB2) += pine64-pinetab2/ diff --git a/arch/arm/boards/rockchip-rk3562-evb2/.gitignore b/arch/arm/boards/rockchip-rk3562-evb2/.gitignore new file mode 100644 index 0000000000..f458f794b5 --- /dev/null +++ b/arch/arm/boards/rockchip-rk3562-evb2/.gitignore @@ -0,0 +1 @@ +sdram-init.bin diff --git a/arch/arm/boards/rockchip-rk3562-evb2/Makefile b/arch/arm/boards/rockchip-rk3562-evb2/Makefile new file mode 100644 index 0000000000..da63d2625f --- /dev/null +++ b/arch/arm/boards/rockchip-rk3562-evb2/Makefile @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0-only + +obj-y += board.o +lwl-y += lowlevel.o diff --git a/arch/arm/boards/rockchip-rk3562-evb2/board.c b/arch/arm/boards/rockchip-rk3562-evb2/board.c new file mode 100644 index 0000000000..d00815822e --- /dev/null +++ b/arch/arm/boards/rockchip-rk3562-evb2/board.c @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#define pr_fmt(fmt) "rk3562-evb: " fmt + +#include <common.h> +#include <init.h> +#include <mach/rockchip/bbu.h> +#include <aiodev.h> +#include <bootsource.h> +#include <environment.h> +#include <globalvar.h> +#include <magicvar.h> +#include <deep-probe.h> + +static int rk3562_evb2_probe(struct device *dev) +{ + int emmc_bbu_flag = 0; + int sd_bbu_flag = 0; + + if (bootsource_get() == BOOTSOURCE_MMC) { + if (bootsource_get_instance() == 2) + emmc_bbu_flag = BBU_HANDLER_FLAG_DEFAULT; + else + sd_bbu_flag = BBU_HANDLER_FLAG_DEFAULT; + } else { + emmc_bbu_flag = BBU_HANDLER_FLAG_DEFAULT; + } + + rockchip_bbu_mmc_register("sd", sd_bbu_flag, "/dev/mmc1"); + rockchip_bbu_mmc_register("emmc", emmc_bbu_flag, "/dev/mmc0"); + + return 0; +} + +static const struct of_device_id rk3562_evb2_of_match[] = { + { .compatible = "rockchip,rk3562-evb2-v10" }, + { /* Sentinel */}, +}; + +static struct driver rk3562_evb2_board_driver = { + .name = "board-rk3562-evb", + .probe = rk3562_evb2_probe, + .of_compatible = rk3562_evb2_of_match, +}; +coredevice_platform_driver(rk3562_evb2_board_driver); + +BAREBOX_DEEP_PROBE_ENABLE(rk3562_evb2_of_match); diff --git a/arch/arm/boards/rockchip-rk3562-evb2/lowlevel.c b/arch/arm/boards/rockchip-rk3562-evb2/lowlevel.c new file mode 100644 index 0000000000..474f1a1332 --- /dev/null +++ b/arch/arm/boards/rockchip-rk3562-evb2/lowlevel.c @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include <common.h> +#include <asm/barebox-arm.h> +#include <mach/rockchip/hardware.h> +#include <mach/rockchip/atf.h> +#include <debug_ll.h> + +extern char __dtb_rk3562_evb2_v10_start[]; + +ENTRY_FUNCTION(start_rk3562_evb2, r0, r1, r2) +{ + putc_ll('>'); + + if (current_el() == 3) + relocate_to_adr_full(RK3562_BAREBOX_LOAD_ADDRESS); + else + relocate_to_current_adr(); + + setup_c(); + + rk3562_barebox_entry(__dtb_rk3562_evb2_v10_start); +} diff --git a/arch/arm/configs/multi_v8_defconfig b/arch/arm/configs/multi_v8_defconfig index e63bb46189..e576cecd89 100644 --- a/arch/arm/configs/multi_v8_defconfig +++ b/arch/arm/configs/multi_v8_defconfig @@ -29,6 +29,7 @@ CONFIG_MACH_TQMA93XX=y CONFIG_MACH_NXP_IMX93_FRDM=y CONFIG_IMX_IIM=y CONFIG_MACH_BEAGLEPLAY=y +CONFIG_MACH_RK3562_EVB2=y CONFIG_MACH_RK3568_EVB=y CONFIG_MACH_RK3568_BPI_R2PRO=y CONFIG_MACH_PINE64_PINETAB2=y diff --git a/arch/arm/configs/rockchip_v8_defconfig b/arch/arm/configs/rockchip_v8_defconfig index f8f8ceb805..3e5f76077d 100644 --- a/arch/arm/configs/rockchip_v8_defconfig +++ b/arch/arm/configs/rockchip_v8_defconfig @@ -1,4 +1,5 @@ CONFIG_ARCH_ROCKCHIP=y +CONFIG_MACH_RK3562_EVB2=y CONFIG_MACH_RK3568_EVB=y CONFIG_MACH_RK3568_BPI_R2PRO=y CONFIG_MACH_PINE64_PINETAB2=y diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index a84e09e388..d5e37d3e4e 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -139,6 +139,7 @@ lwl-$(CONFIG_MACH_RADXA_ROCK5) += \ lwl-$(CONFIG_MACH_RADXA_CM3) += rk3566-cm3-io.dtb.o lwl-$(CONFIG_MACH_PHYTEC_SOM_RK3288) += rk3288-phycore-som.dtb.o lwl-$(CONFIG_MACH_REALQ7) += imx6q-dmo-edmqmx6.dtb.o +lwl-$(CONFIG_MACH_RK3562_EVB2) += rk3562-evb2-v10.dtb.o lwl-$(CONFIG_MACH_RK3568_EVB) += rk3568-evb1-v10.dtb.o lwl-$(CONFIG_MACH_RK3568_BPI_R2PRO) += rk3568-bpi-r2-pro.dtb.o lwl-$(CONFIG_MACH_RPI) += bcm2835-rpi.dtb.o diff --git a/arch/arm/dts/rk3562-evb2-v10.dts b/arch/arm/dts/rk3562-evb2-v10.dts new file mode 100644 index 0000000000..40a5084ee3 --- /dev/null +++ b/arch/arm/dts/rk3562-evb2-v10.dts @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2021 Rockchip Electronics Co., Ltd. + */ + +/dts-v1/; + +#include <arm64/rockchip/rk3562-evb2-v10.dts> +#include "rk3562.dtsi" diff --git a/arch/arm/dts/rk3562.dtsi b/arch/arm/dts/rk3562.dtsi new file mode 100644 index 0000000000..f1a291d456 --- /dev/null +++ b/arch/arm/dts/rk3562.dtsi @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) + +/ { + aliases { + pmugrf.reboot_mode = &reboot_mode; + pwm0 = &pwm0; + pwm1 = &pwm1; + pwm2 = &pwm2; + pwm3 = &pwm3; + pwm4 = &pwm4; + pwm5 = &pwm5; + pwm6 = &pwm6; + pwm7 = &pwm7; + pwm8 = &pwm8; + pwm9 = &pwm9; + pwm10 = &pwm10; + pwm11 = &pwm11; + pwm12 = &pwm12; + pwm13 = &pwm13; + pwm14 = &pwm14; + pwm15 = &pwm15; + i2c0 = &i2c0; + i2c5 = &i2c5; + spi0 = &spi0; + spi1 = &spi1; + spi2 = &spi2; + spi3 = &sfc; + }; + + chosen { + barebox,bootsource-mmc0 = &sdhci; + barebox,bootsource-mmc1 = &sdmmc0; + barebox,bootsource-mmc2 = &sdmmc1; + }; + + dmc: memory-controller { + compatible = "rockchip,rk3562-dmc"; + rockchip,pmu = <&pmu_grf>; + }; +}; diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig index a91e7db72d..d359307eb7 100644 --- a/arch/arm/mach-rockchip/Kconfig +++ b/arch/arm/mach-rockchip/Kconfig @@ -64,6 +64,12 @@ endif if 64BIT +config MACH_RK3562_EVB2 + select ARCH_RK3562 + bool "RK3562 EVB2" + help + Say Y here if you are using a RK3562 EVB2 + config MACH_RK3568_EVB select ARCH_RK3568 bool "RK3568 EVB" diff --git a/images/Makefile.rockchip b/images/Makefile.rockchip index 191ef15aab..1122db4629 100644 --- a/images/Makefile.rockchip +++ b/images/Makefile.rockchip @@ -37,6 +37,7 @@ pblb-$(CONFIG_MACH_PHYTEC_SOM_RK3288) += start_rk3288_phycore_som FILE_barebox-rk3288-phycore-som.img = start_rk3288_phycore_som.pblb image-$(CONFIG_MACH_PHYTEC_SOM_RK3288) += barebox-rk3288-phycore-som.img +$(call build_rockchip_image, CONFIG_MACH_RK3562_EVB2, start_rk3562_evb2, rockchip-rk3562-evb2/sdram-init.bin, rk3562-evb2) $(call build_rockchip_image, CONFIG_MACH_RK3568_EVB, start_rk3568_evb, rockchip-rk3568-evb/sdram-init.bin, rk3568-evb) $(call build_rockchip_image, CONFIG_MACH_RK3568_BPI_R2PRO, start_rk3568_bpi_r2pro, rockchip-rk3568-bpi-r2pro/sdram-init.bin, rk3568-bpi-r2pro) $(call build_rockchip_image, CONFIG_MACH_PINE64_PINETAB2, start_pinetab2_v0, pine64-pinetab2/sdram-init.bin, pinetab2-v0) -- 2.43.0
