All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Warren <biggerbadderben@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v5 08/12] SPEAr : Support for HW mac id read/write from i2c mem
Date: Sun, 17 Jan 2010 22:15:43 -0800	[thread overview]
Message-ID: <4B53FC8F.2000909@gmail.com> (raw)
In-Reply-To: <1263563153-408-9-git-send-email-vipin.kumar@st.com>

Hi Vipin,

Sorry for chiming in so late in the review process.

Vipin KUMAR wrote:
> This patch adds the  support to read and write mac id from i2c
> memory.
> For reading:
> 	if (env contains ethaddr)
> 		pick env ethaddr
> 	else
> 		pick ethaddr from i2c memory
> For writing:
> 	chip_config ethaddr XX:XX:XX:XX:XX:XX writes the mac id
> 	in i2c memory
>
> Signed-off-by: Vipin <vipin.kumar@st.com>
> ---
>  board/spear/common/spr_misc.c         |   68 ++++++++++++++++++++++++++++++++-
>  include/asm-arm/arch-spear/spr_defs.h |    8 ++++
>  2 files changed, 75 insertions(+), 1 deletions(-)
>
> diff --git a/board/spear/common/spr_misc.c b/board/spear/common/spr_misc.c
> index dfa3ece..204ccf2 100755
> --- a/board/spear/common/spr_misc.c
> +++ b/board/spear/common/spr_misc.c
> @@ -67,6 +67,12 @@ int dram_init(void)
>  
>  int misc_init_r(void)
>  {
> +#if defined(CONFIG_CMD_NET)
> +	uchar mac_id[6];
> +
> +	if (!eth_getenv_enetaddr("ethaddr", mac_id) && !i2c_read_mac(mac_id))
> +		eth_setenv_enetaddr("ethaddr", mac_id);
>   
It's really not a good idea to programatically set an environment 
variable like this.  Also, there's already a well-defined and documented 
protocol for  how MAC addresses should be read and the precedence 
between EEPROM storage and environment storage.  Please find a way to 
fit into that model.  Since you don't have network support yet, I have 
no idea which network controller you're using, and recommend waiting 
until this is really needed.
> +#endif
>  	setenv("verify", "n");
>  
>  #if defined(CONFIG_SPEAR_USBTTY)
> @@ -101,12 +107,54 @@ int spear_board_init(ulong mach_type)
>  	return 0;
>  }
>  
> +static int i2c_read_mac(uchar *buffer)
> +{
> +	u8 buf[2];
> +
> +	i2c_read(CONFIG_I2C_CHIPADDRESS, MAGIC_OFF, 1, buf, MAGIC_LEN);
> +
> +	/* Check if mac in i2c memory is valid */
> +	if ((buf[0] == MAGIC_BYTE0) && (buf[1] == MAGIC_BYTE1)) {
> +		/* Valid mac address is saved in i2c eeprom */
> +		i2c_read(CONFIG_I2C_CHIPADDRESS, MAC_OFF, 1, buffer, MAC_LEN);
> +		return 0;
> +	}
> +
> +	return -1;
> +}
> +
> +static int write_mac(uchar *mac)
> +{
> +	u8 buf[2];
> +
> +	buf[0] = (u8)MAGIC_BYTE0;
> +	buf[1] = (u8)MAGIC_BYTE1;
> +	i2c_write(CONFIG_I2C_CHIPADDRESS, MAGIC_OFF, 1, buf, MAGIC_LEN);
> +
> +	buf[0] = (u8)~MAGIC_BYTE0;
> +	buf[1] = (u8)~MAGIC_BYTE1;
> +
> +	i2c_read(CONFIG_I2C_CHIPADDRESS, MAGIC_OFF, 1, buf, MAGIC_LEN);
> +
> +	/* check if valid MAC address is saved in I2C EEPROM or not? */
> +	if ((buf[0] == MAGIC_BYTE0) && (buf[1] == MAGIC_BYTE1)) {
> +		i2c_write(CONFIG_I2C_CHIPADDRESS, MAC_OFF, 1, mac, MAC_LEN);
> +		puts("I2C EEPROM written with mac address \n");
> +		return 0;
> +	}
> +
> +	puts("I2C EEPROM writing failed \n");
> +	return -1;
> +}
> +
>  int do_chip_config(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>  {
>  	void (*sram_setfreq) (unsigned int, unsigned int);
>  	struct chip_data *chip = &chip_data;
>  	unsigned char mac[6];
> -	unsigned int frequency;
> +	unsigned int reg, frequency;
> +	char *s, *e;
> +	char i2c_mac[20];
>  
>  	if ((argc > 3) || (argc < 2)) {
>  		cmd_usage(cmdtp);
> @@ -137,6 +185,17 @@ int do_chip_config(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>  		}
>  
>  		return 0;
> +	} else if (!strcmp(argv[1], "ethaddr")) {
> +
> +		s = argv[2];
> +		for (reg = 0; reg < 6; ++reg) {
> +			mac[reg] = s ? simple_strtoul(s, &e, 16) : 0;
> +			if (s)
> +				s = (*e) ? e + 1 : e;
> +		}
> +		write_mac(mac);
> +
> +		return 0;
>  	} else if (!strcmp(argv[1], "print")) {
>  
>  		if (chip->cpufreq == -1)
> @@ -156,6 +215,13 @@ int do_chip_config(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>  		else
>  			printf("DDR Type    = Not Known\n");
>  
> +		if (!i2c_read_mac(mac)) {
> +			sprintf(i2c_mac, "%pM", mac);
> +			printf("Ethaddr (from i2c mem) = %s\n", i2c_mac);
>   
Maybe I'm missing some context, but why's the sprintf needed?
> +		} else {
> +			printf("Ethaddr (from i2c mem) = Not set\n");
> +		}
> +
>  		printf("Xloader Rev = %s\n", chip->version);
>  
>  		return 0;
> diff --git a/include/asm-arm/arch-spear/spr_defs.h b/include/asm-arm/arch-spear/spr_defs.h
> index 9dde54a..fa8412c 100644
> --- a/include/asm-arm/arch-spear/spr_defs.h
> +++ b/include/asm-arm/arch-spear/spr_defs.h
> @@ -35,4 +35,12 @@ struct chip_data {
>  	uchar version[32];
>  };
>  
> +/* HW mac id in i2c memory definitions */
> +#define MAGIC_OFF	0x0
> +#define MAGIC_LEN	0x2
> +#define MAGIC_BYTE0	0x55
> +#define MAGIC_BYTE1	0xAA
> +#define MAC_OFF		0x2
> +#define MAC_LEN		0x6
> +
>  #endif
>   
regards,
Ben

  parent reply	other threads:[~2010-01-18  6:15 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-15 13:45 [U-Boot] [PATCH v5 00/12] Support for SPEAr SoCs Vipin KUMAR
2010-01-15 13:45 ` [U-Boot] [PATCH v5 01/12] SPEAr : Adding README.spear in doc Vipin KUMAR
2010-01-15 13:45   ` [U-Boot] [PATCH v5 02/12] SPEAr : Adding basic SPEAr architecture support Vipin KUMAR
2010-01-15 13:45     ` [U-Boot] [PATCH v5 03/12] SPEAr : i2c driver support added for SPEAr SoCs Vipin KUMAR
2010-01-15 13:45       ` [U-Boot] [PATCH v5 04/12] SPEAr : smi driver support " Vipin KUMAR
2010-01-15 13:45         ` [U-Boot] [PATCH v5 05/12] SPEAr : nand " Vipin KUMAR
2010-01-15 13:45           ` [U-Boot] [PATCH v5 06/12] SPEAr : usbd " Vipin KUMAR
2010-01-15 13:45             ` [U-Boot] [PATCH v5 07/12] SPEAr : Support added for SPEAr600 board Vipin KUMAR
2010-01-15 13:45               ` [U-Boot] [PATCH v5 08/12] SPEAr : Support for HW mac id read/write from i2c mem Vipin KUMAR
2010-01-15 13:45                 ` [U-Boot] [PATCH v5 09/12] SPEAr : Support added for SPEAr300 board Vipin KUMAR
2010-01-15 13:45                   ` [U-Boot] [PATCH v5 10/12] SPEAr : emi controller initialization for CFI driver support Vipin KUMAR
2010-01-15 13:45                     ` [U-Boot] [PATCH v5 11/12] SPEAr : Support added for SPEAr310 board Vipin KUMAR
2010-01-15 13:45                       ` [U-Boot] [PATCH v5 12/12] SPEAr : Support added for SPEAr320 board Vipin KUMAR
2010-01-18  6:15                 ` Ben Warren [this message]
2010-01-18  7:05                   ` [U-Boot] [PATCH v5 08/12] SPEAr : Support for HW mac id read/write from i2c mem Vipin KUMAR
2010-01-18  7:19                     ` Ben Warren
2010-01-18  7:24                       ` Vipin KUMAR
2010-01-18 12:59                         ` Tom
2010-01-18  7:08                   ` Mike Frysinger
2010-02-01  5:15                 ` Ben Warren
2010-02-01 13:55                   ` Tom
2010-01-18 18:02           ` [U-Boot] [PATCH v5 05/12] SPEAr : nand driver support for SPEAr SoCs Scott Wood
2010-01-17 20:12 ` [U-Boot] [PATCH v5 00/12] Support " Tom
2010-01-18  4:39   ` Vipin KUMAR
2010-01-18 12:51     ` Tom
2010-01-18 19:19       ` Remy Bohmer
2010-01-19 11:52         ` Armando VISCONTI
2010-01-21 21:30 ` Tom
2010-01-22  3:33   ` Vipin KUMAR

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B53FC8F.2000909@gmail.com \
    --to=biggerbadderben@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.