瀏覽代碼

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>
Heiko Schocher 14 年之前
父節點
當前提交
0d01520200
共有 2 個文件被更改,包括 17 次插入0 次删除
  1. 13 0
      board/keymile/common/common.c
  2. 4 0
      board/keymile/common/common.h

+ 13 - 0
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) +

+ 4 - 0
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);