X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=board%2Fkeymile%2Fcommon%2Fivm.c;fp=board%2Fkeymile%2Fcommon%2Fivm.c;h=e9e518cf7257165d0e647d340ff6a865639d2ee1;hb=b2f2c7be3429ad4dc9b242b85a7e87e0ded0487a;hp=3495fafffe6a5e9b579d99e16e54643474ebca78;hpb=b63d4f34d06e1d08571a9a2649d9f9ec0dbd806c;p=people%2Fms%2Fu-boot.git diff --git a/board/keymile/common/ivm.c b/board/keymile/common/ivm.c index 3495fafffe..e9e518cf72 100644 --- a/board/keymile/common/ivm.c +++ b/board/keymile/common/ivm.c @@ -189,7 +189,7 @@ static int ivm_check_crc(unsigned char *buf, int block) /* take care of the possible MAC address offset and the IVM content offset */ static int process_mac(unsigned char *valbuf, unsigned char *buf, - int offset) + int offset, bool unique) { unsigned char mac[6]; unsigned long val = (buf[4] << 16) + (buf[5] << 8) + buf[6]; @@ -199,6 +199,13 @@ static int process_mac(unsigned char *valbuf, unsigned char *buf, */ memcpy(mac, buf+1, 6); + /* MAC adress can be set to locally administred, this is only allowed + * for interfaces which have now connection to the outside. For these + * addresses we need to set the second bit in the first byte. + */ + if (!unique) + mac[0] |= 0x2; + if (offset) { val += offset; mac[3] = (val >> 16) & 0xff; @@ -300,12 +307,23 @@ static int ivm_populate_env(unsigned char *buf, int len) return 0; page2 = &buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN*2]; +#ifndef CONFIG_KMTEGR1 /* if an offset is defined, add it */ - process_mac(valbuf, page2, CONFIG_PIGGY_MAC_ADRESS_OFFSET); + process_mac(valbuf, page2, CONFIG_PIGGY_MAC_ADRESS_OFFSET, true); setenv((char *)"ethaddr", (char *)valbuf); #ifdef CONFIG_KMVECT1 /* KMVECT1 has two ethernet interfaces */ - process_mac(valbuf, page2, 1); + process_mac(valbuf, page2, 1, true); + setenv((char *)"eth1addr", (char *)valbuf); +#endif +#else +/* KMTEGR1 has a special setup. eth0 has no connection to the outside and + * gets an locally administred MAC address, eth1 is the debug interface and + * gets the official MAC address from the IVM + */ + process_mac(valbuf, page2, CONFIG_PIGGY_MAC_ADRESS_OFFSET, false); + setenv((char *)"ethaddr", (char *)valbuf); + process_mac(valbuf, page2, CONFIG_PIGGY_MAC_ADRESS_OFFSET, true); setenv((char *)"eth1addr", (char *)valbuf); #endif