summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Schocher <hs@denx.de>2011-01-06 10:25:26 +0100
committerWolfgang Denk <wd@denx.de>2011-04-30 00:45:17 +0200
commit0d01520200f3bb0686567134bc2e7bb940009559 (patch)
tree5c1c23708950965e4f94f5f60a3165929ff42a95
parent731b968044b0f96239dd41b8c7ba642cac81cfc5 (diff)
keymile boards: add CONFIG_PIGGY_MAC_ADRESS_OFFSET
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>
-rw-r--r--board/keymile/common/common.c13
-rw-r--r--board/keymile/common/common.h4
2 files changed, 17 insertions, 0 deletions
diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index 6600e08711..8392a6413e 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 8497ab63d1..e32de8d9fa 100644
--- a/board/keymile/common/common.h
+++ b/board/keymile/common/common.h
@@ -39,6 +39,10 @@ struct km_bec_fpga {
unsigned char pgy_eth;
};
+#if !defined(CONFIG_PIGGY_MAC_ADRESS_OFFSET)
+#define CONFIG_PIGGY_MAC_ADRESS_OFFSET 0
+#endif
+
int ethernet_present(void);
int ivm_read_eeprom(void);