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


Reply via email to