diff mbox

[U-Boot,07/11] ARM: uniphier: add macro to generate SoC data look-up function

Message ID 1484989531-11985-8-git-send-email-yamada.masahiro@socionext.com
State Accepted
Commit ee8ef5afa87bf37d493bf7be9d475e54d6c2ebee
Delegated to: Masahiro Yamada
Headers show

Commit Message

Masahiro Yamada Jan. 21, 2017, 9:05 a.m. UTC
There are similar functions that look up SoC data by the SoC ID.
The new macro UNIPHIER_DEFINE_SOCDATA_FUNC will be helpful to
avoid the code duplication.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---

 arch/arm/mach-uniphier/board_init.c     | 20 +++-----------------
 arch/arm/mach-uniphier/soc-info.h       | 18 ++++++++++++++++++
 arch/arm/mach-uniphier/spl_board_init.c | 18 ++----------------
 3 files changed, 23 insertions(+), 33 deletions(-)
diff mbox

Patch

diff --git a/arch/arm/mach-uniphier/board_init.c b/arch/arm/mach-uniphier/board_init.c
index 413b338..ac7e3a6 100644
--- a/arch/arm/mach-uniphier/board_init.c
+++ b/arch/arm/mach-uniphier/board_init.c
@@ -169,32 +169,18 @@  static const struct uniphier_initdata uniphier_initdata[] = {
 	},
 #endif
 };
-
-static const struct uniphier_initdata *uniphier_get_initdata(
-							unsigned int soc_id)
-{
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(uniphier_initdata); i++) {
-		if (uniphier_initdata[i].soc_id == soc_id)
-			return &uniphier_initdata[i];
-	}
-
-	return NULL;
-}
+UNIPHIER_DEFINE_SOCDATA_FUNC(uniphier_get_initdata, uniphier_initdata)
 
 int board_init(void)
 {
 	const struct uniphier_initdata *initdata;
-	unsigned int soc_id;
 	int ret;
 
 	led_puts("U0");
 
-	soc_id = uniphier_get_soc_id();
-	initdata = uniphier_get_initdata(soc_id);
+	initdata = uniphier_get_initdata();
 	if (!initdata) {
-		pr_err("unsupported board\n");
+		pr_err("unsupported SoC\n");
 		return -EINVAL;
 	}
 
diff --git a/arch/arm/mach-uniphier/soc-info.h b/arch/arm/mach-uniphier/soc-info.h
index aeaaf83..a85df23 100644
--- a/arch/arm/mach-uniphier/soc-info.h
+++ b/arch/arm/mach-uniphier/soc-info.h
@@ -7,6 +7,9 @@ 
 #ifndef __UNIPHIER_SOC_INFO_H__
 #define __UNIPHIER_SOC_INFO_H__
 
+#include <linux/kernel.h>
+#include <linux/stddef.h>
+
 #define UNIPHIER_SLD3_ID	0x25
 #define UNIPHIER_LD4_ID		0x26
 #define UNIPHIER_PRO4_ID	0x28
@@ -21,4 +24,19 @@  unsigned int uniphier_get_soc_id(void);
 unsigned int uniphier_get_soc_model(void);
 unsigned int uniphier_get_soc_revision(void);
 
+#define UNIPHIER_DEFINE_SOCDATA_FUNC(__func_name, __table)	\
+static typeof(&__table[0]) __func_name(void)			\
+{								\
+	unsigned int soc_id;					\
+	int i;							\
+								\
+	soc_id = uniphier_get_soc_id();				\
+	for (i = 0; i < ARRAY_SIZE(__table); i++) {		\
+		if (__table[i].soc_id == soc_id)		\
+			return &__table[i];			\
+	}							\
+								\
+	return NULL;						\
+}
+
 #endif /* __UNIPHIER_SOC_INFO_H__ */
diff --git a/arch/arm/mach-uniphier/spl_board_init.c b/arch/arm/mach-uniphier/spl_board_init.c
index 83851ef..da749a3 100644
--- a/arch/arm/mach-uniphier/spl_board_init.c
+++ b/arch/arm/mach-uniphier/spl_board_init.c
@@ -118,25 +118,12 @@  static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
 	},
 #endif
 };
-
-static const struct uniphier_spl_initdata *uniphier_get_spl_initdata(
-							unsigned int soc_id)
-{
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(uniphier_spl_initdata); i++) {
-		if (uniphier_spl_initdata[i].soc_id == soc_id)
-			return &uniphier_spl_initdata[i];
-	}
-
-	return NULL;
-}
+UNIPHIER_DEFINE_SOCDATA_FUNC(uniphier_get_spl_initdata, uniphier_spl_initdata)
 
 void spl_board_init(void)
 {
 	const struct uniphier_board_data *bd;
 	const struct uniphier_spl_initdata *initdata;
-	unsigned int soc_id;
 	int ret;
 
 #ifdef CONFIG_DEBUG_UART
@@ -147,8 +134,7 @@  void spl_board_init(void)
 	if (!bd)
 		hang();
 
-	soc_id = uniphier_get_soc_id();
-	initdata = uniphier_get_spl_initdata(soc_id);
+	initdata = uniphier_get_spl_initdata();
 	if (!initdata)
 		hang();