mirror of
https://github.com/linux-sunxi/u-boot-sunxi.git
synced 2024-02-12 11:16:03 +08:00
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: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
@ -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 @@
|
|||||||
#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);
|
|||||||
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[] = {
|
|||||||
},
|
},
|
||||||
#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)
|
|||||||
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();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user