mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-10-04 10:30:50 +09:00
compulab: eeprom: allow reading mac address from multiple eeproms
Implement the option to select the eeprom i2c bus when reading mac address. Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il> Cc: Stefano Babic <sbabic@denx.de> Cc: Igor Grinberg <grinberg@compulab.co.il> Cc: Ilya Ledvich <ilya@compulab.co.il> Cc: Dmitry Lifshitz <lifshitz@compulab.co.il> Acked-by: Igor Grinberg <grinberg@compulab.co.il>
This commit is contained in:
parent
cc67f4a63f
commit
e7a2447ba2
@ -354,7 +354,7 @@ static int handle_mac_address(void)
|
|||||||
if (rc)
|
if (rc)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
rc = cl_eeprom_read_mac_addr(enetaddr);
|
rc = cl_eeprom_read_mac_addr(enetaddr, CONFIG_SYS_I2C_EEPROM_BUS);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ static int handle_mac_address(void)
|
|||||||
if (rv)
|
if (rv)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
rv = cl_eeprom_read_mac_addr(enetaddr);
|
rv = cl_eeprom_read_mac_addr(enetaddr, CONFIG_SYS_I2C_EEPROM_BUS);
|
||||||
if (rv)
|
if (rv)
|
||||||
get_efuse_mac_addr(enetaddr);
|
get_efuse_mac_addr(enetaddr);
|
||||||
|
|
||||||
|
@ -429,7 +429,7 @@ static int handle_mac_address(void)
|
|||||||
if (rc)
|
if (rc)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
rc = cl_eeprom_read_mac_addr(enetaddr);
|
rc = cl_eeprom_read_mac_addr(enetaddr, CONFIG_SYS_I2C_EEPROM_BUS);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ static int cm_t3517_handle_mac_address(void)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ret = cl_eeprom_read_mac_addr(enetaddr);
|
ret = cl_eeprom_read_mac_addr(enetaddr, CONFIG_SYS_I2C_EEPROM_BUS);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ret = am3517_get_efuse_enetaddr(enetaddr);
|
ret = am3517_get_efuse_enetaddr(enetaddr);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -165,7 +165,7 @@ static int handle_mac_address(void)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ret = cl_eeprom_read_mac_addr(enetaddr);
|
ret = cl_eeprom_read_mac_addr(enetaddr, CONFIG_SYS_I2C_EEPROM_BUS);
|
||||||
if (ret || !is_valid_ether_addr(enetaddr))
|
if (ret || !is_valid_ether_addr(enetaddr))
|
||||||
generate_mac_addr(enetaddr);
|
generate_mac_addr(enetaddr);
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#define LAYOUT_INVALID 0
|
#define LAYOUT_INVALID 0
|
||||||
#define LAYOUT_LEGACY 0xff
|
#define LAYOUT_LEGACY 0xff
|
||||||
|
|
||||||
|
static int cl_eeprom_bus;
|
||||||
static int cl_eeprom_layout; /* Implicitly LAYOUT_INVALID */
|
static int cl_eeprom_layout; /* Implicitly LAYOUT_INVALID */
|
||||||
|
|
||||||
static int cl_eeprom_read(uint offset, uchar *buf, int len)
|
static int cl_eeprom_read(uint offset, uchar *buf, int len)
|
||||||
@ -38,7 +39,7 @@ static int cl_eeprom_read(uint offset, uchar *buf, int len)
|
|||||||
int res;
|
int res;
|
||||||
unsigned int current_i2c_bus = i2c_get_bus_num();
|
unsigned int current_i2c_bus = i2c_get_bus_num();
|
||||||
|
|
||||||
res = i2c_set_bus_num(CONFIG_SYS_I2C_EEPROM_BUS);
|
res = i2c_set_bus_num(cl_eeprom_bus);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
@ -50,13 +51,18 @@ static int cl_eeprom_read(uint offset, uchar *buf, int len)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cl_eeprom_setup_layout(void)
|
static int cl_eeprom_setup(uint eeprom_bus)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
if (cl_eeprom_layout != LAYOUT_INVALID)
|
/*
|
||||||
|
* We know the setup was already done when the layout is set to a valid
|
||||||
|
* value and we're using the same bus as before.
|
||||||
|
*/
|
||||||
|
if (cl_eeprom_layout != LAYOUT_INVALID && eeprom_bus == cl_eeprom_bus)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
cl_eeprom_bus = eeprom_bus;
|
||||||
res = cl_eeprom_read(EEPROM_LAYOUT_VER_OFFSET,
|
res = cl_eeprom_read(EEPROM_LAYOUT_VER_OFFSET,
|
||||||
(uchar *)&cl_eeprom_layout, 1);
|
(uchar *)&cl_eeprom_layout, 1);
|
||||||
if (res) {
|
if (res) {
|
||||||
@ -77,7 +83,7 @@ void get_board_serial(struct tag_serialnr *serialnr)
|
|||||||
|
|
||||||
memset(serialnr, 0, sizeof(*serialnr));
|
memset(serialnr, 0, sizeof(*serialnr));
|
||||||
|
|
||||||
if (cl_eeprom_setup_layout())
|
if (cl_eeprom_setup(CONFIG_SYS_I2C_EEPROM_BUS))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
offset = (cl_eeprom_layout != LAYOUT_LEGACY) ?
|
offset = (cl_eeprom_layout != LAYOUT_LEGACY) ?
|
||||||
@ -96,11 +102,11 @@ void get_board_serial(struct tag_serialnr *serialnr)
|
|||||||
* Routine: cl_eeprom_read_mac_addr
|
* Routine: cl_eeprom_read_mac_addr
|
||||||
* Description: read mac address and store it in buf.
|
* Description: read mac address and store it in buf.
|
||||||
*/
|
*/
|
||||||
int cl_eeprom_read_mac_addr(uchar *buf)
|
int cl_eeprom_read_mac_addr(uchar *buf, uint eeprom_bus)
|
||||||
{
|
{
|
||||||
uint offset;
|
uint offset;
|
||||||
|
|
||||||
if (cl_eeprom_setup_layout())
|
if (cl_eeprom_setup(eeprom_bus))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
offset = (cl_eeprom_layout != LAYOUT_LEGACY) ?
|
offset = (cl_eeprom_layout != LAYOUT_LEGACY) ?
|
||||||
@ -123,7 +129,7 @@ u32 cl_eeprom_get_board_rev(void)
|
|||||||
if (board_rev)
|
if (board_rev)
|
||||||
return board_rev;
|
return board_rev;
|
||||||
|
|
||||||
if (cl_eeprom_setup_layout())
|
if (cl_eeprom_setup(CONFIG_SYS_I2C_EEPROM_BUS))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (cl_eeprom_layout != LAYOUT_LEGACY)
|
if (cl_eeprom_layout != LAYOUT_LEGACY)
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
#define _EEPROM_
|
#define _EEPROM_
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_I2C
|
#ifdef CONFIG_SYS_I2C
|
||||||
int cl_eeprom_read_mac_addr(uchar *buf);
|
int cl_eeprom_read_mac_addr(uchar *buf, uint eeprom_bus);
|
||||||
u32 cl_eeprom_get_board_rev(void);
|
u32 cl_eeprom_get_board_rev(void);
|
||||||
#else
|
#else
|
||||||
static inline int cl_eeprom_read_mac_addr(uchar *buf)
|
static inline int cl_eeprom_read_mac_addr(uchar *buf, uint eeprom_bus)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user