Skip to content
Snippets Groups Projects
Commit ee8ef5af authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

ARM: uniphier: add macro to generate SoC data look-up function


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: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
parent e27d6c7d
No related branches found
No related tags found
No related merge requests found
...@@ -169,32 +169,18 @@ static const struct uniphier_initdata uniphier_initdata[] = { ...@@ -169,32 +169,18 @@ static const struct uniphier_initdata uniphier_initdata[] = {
}, },
#endif #endif
}; };
UNIPHIER_DEFINE_SOCDATA_FUNC(uniphier_get_initdata, uniphier_initdata)
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;
}
int board_init(void) int board_init(void)
{ {
const struct uniphier_initdata *initdata; const struct uniphier_initdata *initdata;
unsigned int soc_id;
int ret; int ret;
led_puts("U0"); led_puts("U0");
soc_id = uniphier_get_soc_id(); initdata = uniphier_get_initdata();
initdata = uniphier_get_initdata(soc_id);
if (!initdata) { if (!initdata) {
pr_err("unsupported board\n"); pr_err("unsupported SoC\n");
return -EINVAL; return -EINVAL;
} }
......
...@@ -8,6 +8,9 @@ ...@@ -8,6 +8,9 @@
#ifndef __UNIPHIER_SOC_INFO_H__ #ifndef __UNIPHIER_SOC_INFO_H__
#define __UNIPHIER_SOC_INFO_H__ #define __UNIPHIER_SOC_INFO_H__
#include <linux/kernel.h>
#include <linux/stddef.h>
#define UNIPHIER_SLD3_ID 0x25 #define UNIPHIER_SLD3_ID 0x25
#define UNIPHIER_LD4_ID 0x26 #define UNIPHIER_LD4_ID 0x26
#define UNIPHIER_PRO4_ID 0x28 #define UNIPHIER_PRO4_ID 0x28
...@@ -22,4 +25,19 @@ unsigned int uniphier_get_soc_id(void); ...@@ -22,4 +25,19 @@ unsigned int uniphier_get_soc_id(void);
unsigned int uniphier_get_soc_model(void); unsigned int uniphier_get_soc_model(void);
unsigned int uniphier_get_soc_revision(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__ */ #endif /* __UNIPHIER_SOC_INFO_H__ */
...@@ -118,25 +118,12 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = { ...@@ -118,25 +118,12 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
}, },
#endif #endif
}; };
UNIPHIER_DEFINE_SOCDATA_FUNC(uniphier_get_spl_initdata, uniphier_spl_initdata)
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;
}
void spl_board_init(void) void spl_board_init(void)
{ {
const struct uniphier_board_data *bd; const struct uniphier_board_data *bd;
const struct uniphier_spl_initdata *initdata; const struct uniphier_spl_initdata *initdata;
unsigned int soc_id;
int ret; int ret;
#ifdef CONFIG_DEBUG_UART #ifdef CONFIG_DEBUG_UART
...@@ -147,8 +134,7 @@ void spl_board_init(void) ...@@ -147,8 +134,7 @@ void spl_board_init(void)
if (!bd) if (!bd)
hang(); hang();
soc_id = uniphier_get_soc_id(); initdata = uniphier_get_spl_initdata();
initdata = uniphier_get_spl_initdata(soc_id);
if (!initdata) if (!initdata)
hang(); hang();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment