Page MenuHomeFreeBSD

D56782.id177132.diff
No OneTemporary

D56782.id177132.diff

diff --git a/sys/dev/eqos/if_eqos_starfive.c.orig b/sys/dev/eqos/if_eqos_starfive.c
--- a/sys/dev/eqos/if_eqos_starfive.c.orig
+++ b/sys/dev/eqos/if_eqos_starfive.c
@@ -17,6 +17,7 @@
#include <sys/socket.h>
#include <machine/bus.h>
+#include <net/ethernet.h>
#include <net/if.h>
#include <net/if_media.h>
#include <dev/mii/mii.h>
@@ -40,6 +41,7 @@
#define JH7110_CSR_FREQ 198000000
#define WR4(sc, o, v) bus_write_4(sc->base.res[EQOS_RES_MEM], (o), (v))
+#define RD4(sc, o) bus_read_4(sc->base.res[EQOS_RES_MEM], (o))
static const struct ofw_compat_data compat_data[] = {
{"starfive,jh7110-dwmac", 1},
@@ -186,6 +188,31 @@
return (ENXIO);
}
+ if (OF_hasprop(node, "local-mac-address")) {
+ uint8_t eaddr[ETHER_ADDR_LEN];
+ uint32_t maclo, machi;
+
+ maclo = htobe32(RD4(sc, GMAC_MAC_ADDRESS0_LOW));
+ machi = htobe16(RD4(sc, GMAC_MAC_ADDRESS0_HIGH) & 0xFFFF);
+ if (maclo != 0xffffffff || machi != 0xffff) {
+ eaddr[3] = maclo & 0xff;
+ eaddr[2] = (maclo >> 8) & 0xff;
+ eaddr[1] = (maclo >> 16) & 0xff;
+ eaddr[0] = (maclo >> 24) & 0xff;
+ eaddr[5] = machi & 0xff;
+ eaddr[4] = (machi >> 8) & 0xff;
+ device_printf(dev, "Ethernet address was %6D\n", eaddr, ":");
+ }
+ OF_getprop(node, "local-mac-address", eaddr,
+ sizeof(eaddr));
+
+ machi = eaddr[5] | (eaddr[4] << 8);
+ WR4(sc, GMAC_MAC_ADDRESS0_HIGH, machi);
+ maclo = eaddr[3] | (eaddr[2] << 8) | (eaddr[1] << 16) | (eaddr[0] << 24);
+ WR4(sc, GMAC_MAC_ADDRESS0_LOW, maclo);
+
+ device_printf(dev, "Ethernet address set to %6D from device tree\n", eaddr, ":");
+ }
return (0);
}

File Metadata

Mime Type
text/plain
Expires
Mon, Jul 6, 2:07 AM (9 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32699302
Default Alt Text
D56782.id177132.diff (1 KB)

Event Timeline