[U-Boot] [PATCH v2 04/17] SPEAr : Placing ethaddr write and read within CONFIG_CMD_NET
Tom Rix
tom at bumblecow.com
Mon May 3 01:36:50 CEST 2010
Vipin KUMAR wrote:
> ethaddr can be optionally read from i2c memory. So, chip_config command supports
> reading/writing hw mac id into i2c memory. Placing this code within
> CONFIG_CMD_NET as this would only be needed when network interface is configured
>
> Signed-off-by: Vipin Kumar <vipin.kumar at st.com>
> ---
> board/spear/common/spr_misc.c | 23 ++++++++++++++++++++---
> 1 files changed, 20 insertions(+), 3 deletions(-)
>
> diff --git a/board/spear/common/spr_misc.c b/board/spear/common/spr_misc.c
> index e356912..4af9436 100644
> --- a/board/spear/common/spr_misc.c
> +++ b/board/spear/common/spr_misc.c
> @@ -38,6 +38,10 @@
> DECLARE_GLOBAL_DATA_PTR;
> static struct chip_data chip_data;
>
> +#if defined(CONFIG_CMD_NET)
> +static int i2c_read_mac(uchar *buffer);
> +#endif
> +
> int dram_init(void)
> {
> struct xloader_table *xloader_tb =
> @@ -166,6 +170,7 @@ int spear_board_init(ulong mach_type)
> return 0;
> }
>
> +#if defined(CONFIG_CMD_NET)
> static int i2c_read_mac(uchar *buffer)
> {
> u8 buf[2];
> @@ -205,15 +210,20 @@ static int write_mac(uchar *mac)
> puts("I2C EEPROM writing failed \n");
> return -1;
> }
> +#endif
>
> 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 reg, frequency;
> + unsigned int frequency;
> +
> +#if defined(CONFIG_CMD_NET)
> + unsigned int reg;
> char *s, *e;
> char i2c_mac[20];
> + unsigned char mac[6];
> +#endif
These variable should be moved to "etheraddr" if-check scope
This will clean up having multiple #if defined(CONFIG_CMD_NET) checks
>
> if ((argc > 3) || (argc < 2)) {
> cmd_usage(cmdtp);
> @@ -244,6 +254,8 @@ int do_chip_config(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> }
>
> return 0;
> +
> +#if defined(CONFIG_CMD_NET)
> } else if (!strcmp(argv[1], "ethaddr")) {
>
> s = argv[2];
> @@ -255,6 +267,7 @@ int do_chip_config(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> write_mac(mac);
>
> return 0;
> +#endif
> } else if (!strcmp(argv[1], "print")) {
>
> if (chip->cpufreq == -1)
> @@ -274,13 +287,14 @@ int do_chip_config(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> else
> printf("DDR Type = Not Known\n");
>
> +#if defined(CONFIG_CMD_NET)
> if (!i2c_read_mac(mac)) {
> sprintf(i2c_mac, "%pM", mac);
> printf("Ethaddr (from i2c mem) = %s\n", i2c_mac);
> } else {
> printf("Ethaddr (from i2c mem) = Not set\n");
> }
From misc_init_r, the mac_id is stored in the enviromement.
Because the enviroment has precendence over the i2c.
Reporting the i2c mac address may be inconsistent or wrong.
Tom
> -
> +#endif
> printf("Xloader Rev = %s\n", chip->version);
>
> return 0;
> @@ -293,4 +307,7 @@ int do_chip_config(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> U_BOOT_CMD(chip_config, 3, 1, do_chip_config,
> "configure chip",
> "chip_config cpufreq/ddrfreq frequency\n"
> +#if defined(CONFIG_CMD_NET)
> + "chip_config ethaddr XX:XX:XX:XX:XX:XX\n"
> +#endif
> "chip_config print");
More information about the U-Boot
mailing list