Patchwork [U-Boot,v3,19/23] keymile boards: add CONFIG_PIGGY_MAC_ADRESS_OFFSET

login
register
mail settings
Submitter Heiko Schocher
Date March 21, 2011, 7:02 a.m.
Message ID <1300690939-31511-20-git-send-email-hs@denx.de>
Download mbox | patch
Permalink /patch/87706/
State Superseded
Headers show

Comments

Heiko Schocher - March 21, 2011, 7:02 a.m.
Normaly the PIGGY_MAC_ADRESS can be read directly from the
IVM on keymile boards. On mgcoge3 it differs. Because there
are two piggy boards deployed the second MAC adress must be
calculated with the IVM mac adress and an offset. This patch
allows to set such a offset in the board config.

Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
cc: Valentin Longchamp <valentin.longchamp@keymile.com>
cc: Heiko Schocher <hs@denx.de>
---
Changes for v2:
  - fix checkpatch.pl errors and warnings
changes for v3
  - rebased
  - use %pM in sprintf for mac address handling
    as Wolfgang Denk suggested.

 board/keymile/common/common.c |   13 +++++++++++++
 board/keymile/common/common.h |    4 ++++
 2 files changed, 17 insertions(+), 0 deletions(-)

Patch

diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index 6600e08..8392a64 100644
--- a/board/keymile/common/common.c
+++ b/board/keymile/common/common.c
@@ -228,8 +228,21 @@  static int ivm_analyze_block2(unsigned char *buf, int len)
 	/* IVM_MacAddress */
 	sprintf((char *)valbuf, "%pM", buf);
 	ivm_set_value("IVM_MacAddress", (char *)valbuf);
+	/* if an offset is defined, add it */
+#if defined(CONFIG_PIGGY_MAC_ADRESS_OFFSET)
+	if (CONFIG_PIGGY_MAC_ADRESS_OFFSET > 0) {
+		unsigned long val = (buf[4] << 16) + (buf[5] << 8) + buf[6];
+
+		val += CONFIG_PIGGY_MAC_ADRESS_OFFSET;
+		buf[4] = (val >> 16) & 0xff;
+		buf[5] = (val >> 8) & 0xff;
+		buf[6] = val & 0xff;
+		sprintf((char *)valbuf, "%pM", buf);
+	}
+#endif
 	if (getenv("ethaddr") == NULL)
 		setenv((char *)"ethaddr", (char *)valbuf);
+
 	/* IVM_MacCount */
 	count = (buf[10] << 24) +
 		   (buf[11] << 16) +
diff --git a/board/keymile/common/common.h b/board/keymile/common/common.h
index e0d2603..03838fe 100644
--- a/board/keymile/common/common.h
+++ b/board/keymile/common/common.h
@@ -38,6 +38,10 @@  struct km_bec_fpga {
 	unsigned char	pgy_out;
 };
 
+#if !defined(CONFIG_PIGGY_MAC_ADRESS_OFFSET)
+#define CONFIG_PIGGY_MAC_ADRESS_OFFSET	0
+#endif
+
 int ethernet_present(void);
 int ivm_read_eeprom(void);