]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
ARM: uniphier: add macro to generate SoC data look-up function
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Sat, 21 Jan 2017 09:05:27 +0000 (18:05 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Sun, 22 Jan 2017 07:49:33 +0000 (16:49 +0900)
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
arch/arm/mach-uniphier/soc-info.h
arch/arm/mach-uniphier/spl_board_init.c

index 413b338228032dc40d6c28b630762eb72848ffe9..ac7e3a6a95dfbe7f8197054efd298c746e0cd283 100644 (file)
@@ -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;
        }
 
index b528fa96bd9fb19757b278199acef5875ddf8874..d7619f4aba3ac906e0967829c40c217009cabd32 100644 (file)
@@ -8,6 +8,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
@@ -22,4 +25,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__ */
index 83851ef7d69f55069e500a9be4e02288a83d6012..da749a3d6d4e43cc66f70353545b74cb23180fe3 100644 (file)
@@ -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();