mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-06-09 23:36:03 +09:00
OMAP3: TAM3517: add macros for reading eeprom
Added macros to read SOM information from the I2C EEPROM. Signed-off-by: Stefano Babic <sbabic@denx.de>
This commit is contained in:
parent
fe2d59a123
commit
31f5b651fa
|
@ -98,9 +98,12 @@ int board_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef CONFIG_SPL_BUILD
|
||||||
int misc_init_r(void)
|
int misc_init_r(void)
|
||||||
{
|
{
|
||||||
char *eth_addr;
|
char *eth_addr;
|
||||||
|
struct tam3517_module_info info;
|
||||||
|
int ret;
|
||||||
|
|
||||||
dieid_num_r();
|
dieid_num_r();
|
||||||
|
|
||||||
|
@ -108,12 +111,13 @@ int misc_init_r(void)
|
||||||
if (eth_addr)
|
if (eth_addr)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#ifndef CONFIG_SPL_BUILD
|
TAM3517_READ_EEPROM(&info, ret);
|
||||||
TAM3517_READ_MAC_FROM_EEPROM;
|
if (!ret)
|
||||||
#endif
|
TAM3517_READ_MAC_FROM_EEPROM(&info);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Routine: set_muxconf_regs
|
* Routine: set_muxconf_regs
|
||||||
|
|
|
@ -258,21 +258,26 @@ int board_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef CONFIG_SPL_BUILD
|
||||||
int misc_init_r(void)
|
int misc_init_r(void)
|
||||||
{
|
{
|
||||||
char *eth_addr;
|
char *eth_addr;
|
||||||
|
struct tam3517_module_info info;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
TAM3517_READ_EEPROM(&info, ret);
|
||||||
dieid_num_r();
|
dieid_num_r();
|
||||||
|
|
||||||
eth_addr = getenv("ethaddr");
|
if (ret)
|
||||||
if (eth_addr)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
eth_addr = getenv("ethaddr");
|
||||||
|
if (!eth_addr)
|
||||||
|
TAM3517_READ_MAC_FROM_EEPROM(&info);
|
||||||
|
|
||||||
#ifndef CONFIG_SPL_BUILD
|
TAM3517_PRINT_SOM_INFO(&info);
|
||||||
TAM3517_READ_MAC_FROM_EEPROM;
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Routine: set_muxconf_regs
|
* Routine: set_muxconf_regs
|
||||||
|
|
|
@ -357,7 +357,6 @@
|
||||||
* I2C EEPROM
|
* I2C EEPROM
|
||||||
*/
|
*/
|
||||||
#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
|
#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The I2C EEPROM on the TAM3517 contains
|
* The I2C EEPROM on the TAM3517 contains
|
||||||
* mac address and production data
|
* mac address and production data
|
||||||
|
@ -383,24 +382,29 @@ struct tam3517_module_info {
|
||||||
unsigned char _rev[100];
|
unsigned char _rev[100];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TAM3517_READ_MAC_FROM_EEPROM \
|
#define TAM3517_READ_EEPROM(info, ret) \
|
||||||
do { \
|
do { \
|
||||||
struct tam3517_module_info info;\
|
|
||||||
char buf[80], ethname[20]; \
|
|
||||||
int i; \
|
|
||||||
i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); \
|
i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); \
|
||||||
if (eeprom_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, \
|
if (eeprom_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, \
|
||||||
(void *)&info, sizeof(info))) \
|
(void *)info, sizeof(*info))) \
|
||||||
break; \
|
ret = 1; \
|
||||||
|
else \
|
||||||
|
ret = 0; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define TAM3517_READ_MAC_FROM_EEPROM(info) \
|
||||||
|
do { \
|
||||||
|
char buf[80], ethname[20]; \
|
||||||
|
int i; \
|
||||||
memset(buf, 0, sizeof(buf)); \
|
memset(buf, 0, sizeof(buf)); \
|
||||||
for (i = 0 ; i < ARRAY_SIZE(info.eth_addr); i++) { \
|
for (i = 0 ; i < ARRAY_SIZE((info)->eth_addr); i++) { \
|
||||||
sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", \
|
sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", \
|
||||||
info.eth_addr[i][5], \
|
(info)->eth_addr[i][5], \
|
||||||
info.eth_addr[i][4], \
|
(info)->eth_addr[i][4], \
|
||||||
info.eth_addr[i][3], \
|
(info)->eth_addr[i][3], \
|
||||||
info.eth_addr[i][2], \
|
(info)->eth_addr[i][2], \
|
||||||
info.eth_addr[i][1], \
|
(info)->eth_addr[i][1], \
|
||||||
info.eth_addr[i][0]); \
|
(info)->eth_addr[i][0]); \
|
||||||
\
|
\
|
||||||
if (i) \
|
if (i) \
|
||||||
sprintf(ethname, "eth%daddr", i); \
|
sprintf(ethname, "eth%daddr", i); \
|
||||||
|
@ -410,6 +414,30 @@ do { \
|
||||||
setenv(ethname, buf); \
|
setenv(ethname, buf); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/* The following macros are taken from Technexion's documentation */
|
||||||
|
#define TAM3517_sequence_number(info) \
|
||||||
|
((info)->sequence_number % 0x1000000000000LL)
|
||||||
|
#define TAM3517_week_of_year(info) (((info)->sequence_number >> 48) % 0x100)
|
||||||
|
#define TAM3517_year(info) ((info)->sequence_number >> 56)
|
||||||
|
#define TAM3517_revision_fixed(info) ((info)->revision % 0x100)
|
||||||
|
#define TAM3517_revision_major(info) (((info)->revision >> 8) % 0x100)
|
||||||
|
#define TAM3517_revision_tn(info) ((info)->revision >> 16)
|
||||||
|
|
||||||
|
#define TAM3517_PRINT_SOM_INFO(info) \
|
||||||
|
do { \
|
||||||
|
printf("Vendor:%s\n", (info)->customer); \
|
||||||
|
printf("SOM: %s\n", (info)->product); \
|
||||||
|
printf("SeqNr: %02llu%02llu%012llu\n", \
|
||||||
|
TAM3517_year(info), \
|
||||||
|
TAM3517_week_of_year(info), \
|
||||||
|
TAM3517_sequence_number(info)); \
|
||||||
|
printf("Rev: TN%u %u.%u\n", \
|
||||||
|
TAM3517_revision_tn(info), \
|
||||||
|
TAM3517_revision_major(info), \
|
||||||
|
TAM3517_revision_fixed(info)); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __TAM3517_H */
|
#endif /* __TAM3517_H */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user