diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2022-07-10 12:02:00 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2022-07-10 12:02:00 +0000 |
commit | fe14f67c92704dc608eff7453150448d4ad7c0d5 (patch) | |
tree | 890dba5063663d004a7ff32e5b9e8574ba3a12ca /sys/src/9/imx8 | |
parent | fdd3e1808fc2ec0f6a2d2c5dd8cec914a0b20476 (diff) |
imx8: get mac address from OTP rom
Diffstat (limited to 'sys/src/9/imx8')
-rw-r--r-- | sys/src/9/imx8/etherimx.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/sys/src/9/imx8/etherimx.c b/sys/src/9/imx8/etherimx.c index 9b816920f..4ed331f8d 100644 --- a/sys/src/9/imx8/etherimx.c +++ b/sys/src/9/imx8/etherimx.c @@ -655,18 +655,22 @@ ctl(Ether*, void*, long len) static int reset(Ether *edev) { - Ctlr *ctlr = edev->ctlr; - u32int paddr1, paddr2; - - /* steal mac address from uboot */ - paddr1 = rr(ctlr, ENET_PALR); - paddr2 = rr(ctlr, ENET_PAUR); - edev->ea[0] = paddr1>>24; - edev->ea[1] = paddr1>>16; - edev->ea[2] = paddr1>>8; - edev->ea[3] = paddr1>>0; - edev->ea[4] = paddr2>>24; - edev->ea[5] = paddr2>>16; + enum { + OCOTP_HW_OCOTP_MAC_ADDR0 = 0x640/4, + OCOTP_HW_OCOTP_MAC_ADDR1 = 0x650/4, + }; + static u32int *ocotp = (u32int*)(VIRTIO + 0x350000); + u32int a0, a1; + + a0 = ocotp[OCOTP_HW_OCOTP_MAC_ADDR0]; + a1 = ocotp[OCOTP_HW_OCOTP_MAC_ADDR1]; + + edev->ea[0] = a1>>8; + edev->ea[1] = a1>>0; + edev->ea[2] = a0>>24; + edev->ea[3] = a0>>16; + edev->ea[4] = a0>>8; + edev->ea[5] = a0>>0; shutdown(edev); |