// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2021 Vyacheslav Bocharov * Author: Vyacheslav Bocharov */ #include #include #include #include #include #include #include #include #include #include int misc_init_r(void) { u8 mac_addr[ARP_HLEN]; char serial[SM_SERIAL_SIZE]; u32 sid; if (!meson_sm_get_serial(serial, SM_SERIAL_SIZE)) { sid = crc32(0, (unsigned char *)serial, SM_SERIAL_SIZE); /* Ensure the NIC specific bytes of the mac are not all 0 */ if ((sid & 0xffff) == 0) sid |= 0x800000; /* OUI registered MAC address */ mac_addr[0] = 0x10; mac_addr[1] = 0x27; mac_addr[2] = 0xBE; mac_addr[3] = (sid >> 16) & 0xff; mac_addr[4] = (sid >> 8) & 0xff; mac_addr[5] = (sid >> 0) & 0xff; eth_env_set_enetaddr("ethaddr", mac_addr); } return 0; }