diff mbox

[U-Boot,v2,3/4] board: sama5d2_xplained: Set 'ethaddr' got from AT24MAC

Message ID 1473734945-23975-4-git-send-email-wenyou.yang@atmel.com
State Superseded
Delegated to: Andreas Bießmann
Headers show

Commit Message

Wenyou Yang Sept. 13, 2016, 2:49 a.m. UTC
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.yang@atmel.com>
Signed-off-by: Songjun Wu <songjun.wu@microchip.com>
---

Changes in v2: None

 board/atmel/sama5d2_xplained/sama5d2_xplained.c | 51 +++++++++++++++++++++++++
 include/configs/sama5d2_xplained.h              |  6 +++
 2 files changed, 57 insertions(+)

Comments

Andreas Bießmann Oct. 16, 2016, 8:18 p.m. UTC | #1
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.yang@atmel.com>
> Signed-off-by: Songjun Wu <songjun.wu@microchip.com>

Reviewed-by: Andreas Bießmann <andreas@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
Andreas Bießmann Oct. 16, 2016, 9:42 p.m. UTC | #2
Hi Wenyou,

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.yang@atmel.com>
> Signed-off-by: Songjun Wu <songjun.wu@microchip.com>
> Reviewed-by: Andreas Bießmann <andreas@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(+)
> 

<snip>

> 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

these two configs produce compile warnings due to the lately introduced check
for new config options outside Kconfig.

Please resend with these two options moved to Kconfig of sama5d2_xplained
board.

Andreas

> +
>  /* Ethernet Hardware */
>  #define CONFIG_MACB
>  #define CONFIG_RMII
Tom Rini Oct. 16, 2016, 10:03 p.m. UTC | #3
On Sun, Oct 16, 2016 at 11:42:01PM +0200, Andreas Bießmann wrote:
> Hi Wenyou,
> 
> 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.yang@atmel.com>
> > Signed-off-by: Songjun Wu <songjun.wu@microchip.com>
> > Reviewed-by: Andreas Bießmann <andreas@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(+)
> > 
> 
> <snip>
> 
> > 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
> 
> these two configs produce compile warnings due to the lately introduced check
> for new config options outside Kconfig.
> 
> Please resend with these two options moved to Kconfig of sama5d2_xplained
> board.

Or just not in CONFIG namespace if there's really no reason for them to
be changed / selected.  Thanks!
diff mbox

Patch

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