On Tue, Sep 13, 2016 at 10:49:04AM +0800, Wenyou Yang wrote: > If 'ethaddr' is not set, we will get the ethernet address from AT24MAC, > and set it to 'ethaddr' variable. > > Signed-off-by: Wenyou Yang <wenyou.y...@atmel.com> > Signed-off-by: Songjun Wu <songjun...@microchip.com>
Reviewed-by: Andreas Bießmann <andr...@biessmann.org> > --- > > Changes in v2: None > > board/atmel/sama5d2_xplained/sama5d2_xplained.c | 51 > +++++++++++++++++++++++++ > include/configs/sama5d2_xplained.h | 6 +++ > 2 files changed, 57 insertions(+) > > diff --git a/board/atmel/sama5d2_xplained/sama5d2_xplained.c > b/board/atmel/sama5d2_xplained/sama5d2_xplained.c > index 7ccadf2..c94574b 100644 > --- a/board/atmel/sama5d2_xplained/sama5d2_xplained.c > +++ b/board/atmel/sama5d2_xplained/sama5d2_xplained.c > @@ -7,6 +7,8 @@ > > #include <common.h> > #include <atmel_hlcdc.h> > +#include <dm.h> > +#include <i2c.h> > #include <lcd.h> > #include <mmc.h> > #include <net.h> > @@ -192,6 +194,55 @@ int board_eth_init(bd_t *bis) > return rc; > } > > +#ifdef CONFIG_CMD_I2C > +static int set_ethaddr_from_eeprom(void) > +{ > + const int ETH_ADDR_LEN = 6; > + unsigned char ethaddr[ETH_ADDR_LEN]; > + const char *ETHADDR_NAME = "ethaddr"; > + struct udevice *bus, *dev; > + > + if (getenv(ETHADDR_NAME)) > + return 0; > + > + if (uclass_get_device_by_seq(UCLASS_I2C, 1, &bus)) { > + printf("Cannot find I2C bus 1\n"); > + return -1; > + } > + > + if (dm_i2c_probe(bus, CONFIG_AT24MAC_ADDR, 0, &dev)) { > + printf("Failed to probe I2C chip\n"); > + return -1; > + } > + > + if (dm_i2c_read(dev, CONFIG_AT24MAC_REG, ethaddr, ETH_ADDR_LEN)) { > + printf("Failed to read ethernet address from EEPROM\n"); > + return -1; > + } > + > + if (!is_valid_ethaddr(ethaddr)) { > + printf("The ethernet address read from EEPROM is not valid!\n"); > + return -1; > + } > + > + return eth_setenv_enetaddr(ETHADDR_NAME, ethaddr); > +} > +#else > +static int set_ethaddr_from_eeprom(void) > +{ > + return 0; > +} > +#endif > + > +#ifdef CONFIG_MISC_INIT_R > +int misc_init_r(void) > +{ > + set_ethaddr_from_eeprom(); > + > + return 0; > +} > +#endif > + > /* SPL */ > #ifdef CONFIG_SPL_BUILD > void spl_board_init(void) > diff --git a/include/configs/sama5d2_xplained.h > b/include/configs/sama5d2_xplained.h > index 77757a3..cada04f 100644 > --- a/include/configs/sama5d2_xplained.h > +++ b/include/configs/sama5d2_xplained.h > @@ -15,6 +15,8 @@ > > #include "at91-sama5_common.h" > > +#define CONFIG_MISC_INIT_R > + > /* SDRAM */ > #define CONFIG_NR_DRAM_BANKS 1 > #define CONFIG_SYS_SDRAM_BASE ATMEL_BASE_DDRCS > @@ -54,6 +56,10 @@ > #define CONFIG_DOS_PARTITION > #endif > > +/* I2C */ > +#define CONFIG_AT24MAC_ADDR 0x5c > +#define CONFIG_AT24MAC_REG 0x9a > + > /* Ethernet Hardware */ > #define CONFIG_MACB > #define CONFIG_RMII _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot