[PATCH 1/3] ARM: rockchip: Allow to build for multiple SoCs

Sascha Hauer s.hauer at pengutronix.de
Tue May 18 04:44:02 PDT 2021


Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 arch/arm/mach-rockchip/Kconfig                | 12 +++------
 arch/arm/mach-rockchip/Makefile               |  1 +
 .../arm/mach-rockchip/include/mach/debug_ll.h | 12 +++++++--
 .../arm/mach-rockchip/include/mach/rockchip.h | 22 ++++++++++++++++
 arch/arm/mach-rockchip/rk3188.c               |  4 +--
 arch/arm/mach-rockchip/rk3288.c               | 25 ++++++++++---------
 arch/arm/mach-rockchip/rockchip.c             | 17 +++++++++++++
 common/Kconfig                                | 18 +++++++++----
 8 files changed, 82 insertions(+), 29 deletions(-)
 create mode 100644 arch/arm/mach-rockchip/include/mach/rockchip.h
 create mode 100644 arch/arm/mach-rockchip/rockchip.c

diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
index f2fa3c6345..65bcbcac96 100644
--- a/arch/arm/mach-rockchip/Kconfig
+++ b/arch/arm/mach-rockchip/Kconfig
@@ -11,27 +11,23 @@ config RK_TIMER
 	hex
 	default 1
 
-choice
-	prompt "Select Rockchip SoC"
-
 config ARCH_RK3188
-	bool "Rockchip RK3188 SoCs"
+	bool
 
 config ARCH_RK3288
-	bool "Rockchip RK3288 SoCs"
+	bool
 	select CLOCKSOURCE_ROCKCHIP
-endchoice
 
 comment "select Rockchip boards:"
 
 config MACH_RADXA_ROCK
-	depends on ARCH_RK3188
+	select ARCH_RK3188
 	select I2C
 	select MFD_ACT8846
 	bool "Radxa rock board"
 
 config MACH_PHYTEC_SOM_RK3288
-	depends on ARCH_RK3288
+	select ARCH_RK3288
 	select I2C
 	bool "RK3288 phyCORE SOM"
 	help
diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile
index 4ca7f17d8c..0188d0252f 100644
--- a/arch/arm/mach-rockchip/Makefile
+++ b/arch/arm/mach-rockchip/Makefile
@@ -1,2 +1,3 @@
+obj-y += rockchip.o
 obj-$(CONFIG_ARCH_RK3188) += rk3188.o
 obj-$(CONFIG_ARCH_RK3288) += rk3288.o
diff --git a/arch/arm/mach-rockchip/include/mach/debug_ll.h b/arch/arm/mach-rockchip/include/mach/debug_ll.h
index 9fde2976f1..7806aab8bb 100644
--- a/arch/arm/mach-rockchip/include/mach/debug_ll.h
+++ b/arch/arm/mach-rockchip/include/mach/debug_ll.h
@@ -6,14 +6,16 @@
 #include <mach/rk3188-regs.h>
 #include <mach/rk3288-regs.h>
 
-#ifdef CONFIG_ARCH_RK3188
+#ifdef CONFIG_DEBUG_LL
+
+#ifdef CONFIG_DEBUG_ROCKCHIP_RK3188_UART
 
 #define UART_CLOCK		100000000
 #define RK_DEBUG_SOC		RK3188
 #define serial_out(a, v)	writeb(v, a)
 #define serial_in(a)		readb(a)
 
-#elif defined CONFIG_ARCH_RK3288
+#elif defined CONFIG_DEBUG_ROCKCHIP_RK3288_UART
 
 #define UART_CLOCK		24000000
 #define RK_DEBUG_SOC		RK3288
@@ -70,4 +72,10 @@ static inline void PUTC_LL(char c)
 	while ((serial_in(base + LSR) & LSR_THRE) == 0)
 		;
 }
+#else
+static inline void INIT_LL(void)
+{
+}
+#endif
+
 #endif
diff --git a/arch/arm/mach-rockchip/include/mach/rockchip.h b/arch/arm/mach-rockchip/include/mach/rockchip.h
new file mode 100644
index 0000000000..8d37c67d4f
--- /dev/null
+++ b/arch/arm/mach-rockchip/include/mach/rockchip.h
@@ -0,0 +1,22 @@
+#ifndef __MACH_ROCKCHIP_H
+#define __MACH_ROCKCHIP_H
+
+#ifdef CONFIG_ARCH_RK3188
+int rk3188_init(void);
+#else
+static inline int rk3188_init(void)
+{
+	return -ENOTSUPP;
+}
+#endif
+
+#ifdef CONFIG_ARCH_RK3288
+int rk3288_init(void);
+#else
+static inline int rk3288_init(void)
+{
+	return -ENOTSUPP;
+}
+#endif
+
+#endif /* __MACH_ROCKCHIP_H */
diff --git a/arch/arm/mach-rockchip/rk3188.c b/arch/arm/mach-rockchip/rk3188.c
index 572e9dc58f..178bf2be1d 100644
--- a/arch/arm/mach-rockchip/rk3188.c
+++ b/arch/arm/mach-rockchip/rk3188.c
@@ -16,6 +16,7 @@
 #include <init.h>
 #include <restart.h>
 #include <mach/rk3188-regs.h>
+#include <mach/rockchip.h>
 
 static void __noreturn rockchip_restart_soc(struct restart_handler *rst)
 {
@@ -27,10 +28,9 @@ static void __noreturn rockchip_restart_soc(struct restart_handler *rst)
 	hang();
 }
 
-static int restart_register_feature(void)
+int rk3188_init(void)
 {
 	restart_handler_register_fn("soc", rockchip_restart_soc);
 
 	return 0;
 }
-coredevice_initcall(restart_register_feature);
diff --git a/arch/arm/mach-rockchip/rk3288.c b/arch/arm/mach-rockchip/rk3288.c
index 9076fd9227..2a1d4ab7a2 100644
--- a/arch/arm/mach-rockchip/rk3288.c
+++ b/arch/arm/mach-rockchip/rk3288.c
@@ -21,6 +21,7 @@
 #include <mach/rk3288-regs.h>
 #include <mach/cru_rk3288.h>
 #include <mach/hardware.h>
+#include <mach/rockchip.h>
 
 static void __noreturn rockchip_restart_soc(struct restart_handler *rst)
 {
@@ -58,17 +59,6 @@ static void rk3288_detect_reset_reason(void)
 	}
 }
 
-static int rk3288_init(void)
-{
-	restart_handler_register_fn("soc", rockchip_restart_soc);
-
-	if (IS_ENABLED(CONFIG_RESET_SOURCE))
-		rk3288_detect_reset_reason();
-
-	return 0;
-}
-postcore_initcall(rk3288_init);
-
 /*
  * ATM we are not able to determine the boot source.
  * So let's handle the environment on eMMC, regardless which device
@@ -89,4 +79,15 @@ static int rk3288_env_init(void)
 
 	return 0;
 }
-device_initcall(rk3288_env_init);
+
+int rk3288_init(void)
+{
+	restart_handler_register_fn("soc", rockchip_restart_soc);
+
+	if (IS_ENABLED(CONFIG_RESET_SOURCE))
+		rk3288_detect_reset_reason();
+
+	rk3288_env_init();
+
+	return 0;
+}
diff --git a/arch/arm/mach-rockchip/rockchip.c b/arch/arm/mach-rockchip/rockchip.c
new file mode 100644
index 0000000000..b0fbb49457
--- /dev/null
+++ b/arch/arm/mach-rockchip/rockchip.c
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: GPL-2.0-only
+#include <common.h>
+#include <init.h>
+#include <mach/rockchip.h>
+
+static int rockchip_init(void)
+{
+	if (of_machine_is_compatible("rockchip,rk3188"))
+		rk3188_init();
+	else if (of_machine_is_compatible("rockchip,rk3288"))
+		rk3288_init();
+	else
+		pr_err("Unknown rockchip SoC\n");
+
+	return 0;
+}
+postcore_initcall(rockchip_init);
diff --git a/common/Kconfig b/common/Kconfig
index bddf802d3b..18e6615770 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -1294,12 +1294,19 @@ config DEBUG_AM33XX_UART
 	  Say Y here if you want kernel low-level debugging support
 	  on AM33XX.
 
-config DEBUG_ROCKCHIP_UART
-	bool "RK3xxx Debug UART"
-	depends on ARCH_ROCKCHIP
+config DEBUG_ROCKCHIP_RK3188_UART
+	bool "RK3188 Debug UART"
+	depends on ARCH_RK3188
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on RK3188.
+
+config DEBUG_ROCKCHIP_RK3288_UART
+	bool "RK3288 Debug UART"
+	depends on ARCH_RK3288
 	help
 	  Say Y here if you want kernel low-level debugging support
-	  on RK3XXX.
+	  on RK3288.
 
 config DEBUG_SOCFPGA_UART0
 	bool "Use SOCFPGA UART0 for low-level debug"
@@ -1377,7 +1384,8 @@ config DEBUG_OMAP_UART_PORT
 	  AM33XX: 0 - 2
 
 config DEBUG_ROCKCHIP_UART_PORT
-	int "RK3xxx UART debug port" if DEBUG_ROCKCHIP_UART
+	int "RK3xxx UART debug port" if DEBUG_ROCKCHIP_RK3188_UART || \
+				DEBUG_ROCKCHIP_RK3288_UART
 	default 2
 	depends on ARCH_ROCKCHIP
 	help
-- 
2.29.2




More information about the barebox mailing list