From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas =?iso-8859-1?Q?Bie=DFmann?= Date: Sun, 16 Oct 2016 22:18:13 +0200 Subject: [U-Boot] [U-Boot, v2, 3/4] board: sama5d2_xplained: Set 'ethaddr' got from AT24MAC In-Reply-To: <1473734945-23975-4-git-send-email-wenyou.yang@atmel.com> References: <1473734945-23975-4-git-send-email-wenyou.yang@atmel.com> Message-ID: <20161016201813.GA30172@mba.int.er.biessmann.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > Signed-off-by: Songjun Wu Reviewed-by: Andreas Bie?mann > --- > > 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 > #include > +#include > +#include > #include > #include > #include > @@ -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