ref: fe14f67c92704dc608eff7453150448d4ad7c0d5
parent: fdd3e1808fc2ec0f6a2d2c5dd8cec914a0b20476
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Jul 10 08:02:00 EDT 2022
imx8: get mac address from OTP rom
--- a/sys/src/9/imx8/etherimx.c
+++ b/sys/src/9/imx8/etherimx.c
@@ -655,18 +655,22 @@
static int
reset(Ether *edev)
{
- Ctlr *ctlr = edev->ctlr;
- u32int paddr1, paddr2;
+ enum {
+ OCOTP_HW_OCOTP_MAC_ADDR0 = 0x640/4,
+ OCOTP_HW_OCOTP_MAC_ADDR1 = 0x650/4,
+ };
+ static u32int *ocotp = (u32int*)(VIRTIO + 0x350000);
+ u32int a0, a1;
- /* 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;
+ 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);