void board_set_ethaddr(void) { uint8_t mac_addr[6]; int i; u64 mac1, mac2; u8 mac_addr1[6], mac_addr2[6]; int num_macs; /* * Export any Ethernet MAC addresses from EEPROM. * On AM57xx the 2 MAC addresses define the address range */ board_ti_get_eth_mac_addr(0, mac_addr1); board_ti_get_eth_mac_addr(1, mac_addr2); if (is_valid_ethaddr(mac_addr1) && is_valid_ethaddr(mac_addr2)) { mac1 = mac_to_u64(mac_addr1); mac2 = mac_to_u64(mac_addr2); /* must contain an address range */ num_macs = mac2 - mac1 + 1; /* <= 50 to protect against user programming error */ if (num_macs > 0 && num_macs <= 50) { for (i = 0; i < num_macs; i++) { u64_to_mac(mac1 + i, mac_addr); if (is_valid_ethaddr(mac_addr)) { eth_setenv_enetaddr_by_index("eth", i + 2, mac_addr); } } } } }
int board_eth_init(bd_t *bis) { int ret; uint8_t mac_addr[6]; uint32_t mac_hi, mac_lo; uint32_t ctrl_val; /* try reading mac address from efuse */ mac_lo = readl((*ctrl)->control_core_mac_id_0_lo); mac_hi = readl((*ctrl)->control_core_mac_id_0_hi); mac_addr[0] = (mac_hi & 0xFF0000) >> 16; mac_addr[1] = (mac_hi & 0xFF00) >> 8; mac_addr[2] = mac_hi & 0xFF; mac_addr[3] = (mac_lo & 0xFF0000) >> 16; mac_addr[4] = (mac_lo & 0xFF00) >> 8; mac_addr[5] = mac_lo & 0xFF; if (!getenv("ethaddr")) { printf("<ethaddr> not set. Validating first E-fuse MAC\n"); if (is_valid_ethaddr(mac_addr)) eth_setenv_enetaddr("ethaddr", mac_addr); } mac_lo = readl((*ctrl)->control_core_mac_id_1_lo); mac_hi = readl((*ctrl)->control_core_mac_id_1_hi); mac_addr[0] = (mac_hi & 0xFF0000) >> 16; mac_addr[1] = (mac_hi & 0xFF00) >> 8; mac_addr[2] = mac_hi & 0xFF; mac_addr[3] = (mac_lo & 0xFF0000) >> 16; mac_addr[4] = (mac_lo & 0xFF00) >> 8; mac_addr[5] = mac_lo & 0xFF; if (!getenv("eth1addr")) { if (is_valid_ethaddr(mac_addr)) eth_setenv_enetaddr("eth1addr", mac_addr); } ctrl_val = readl((*ctrl)->control_core_control_io1) & (~0x33); ctrl_val |= 0x22; writel(ctrl_val, (*ctrl)->control_core_control_io1); if (*omap_si_rev == DRA722_ES1_0) cpsw_data.active_slave = 1; if (board_is_dra72x_revc_or_later()) { cpsw_slaves[0].phy_if = PHY_INTERFACE_MODE_RGMII_ID; cpsw_slaves[1].phy_if = PHY_INTERFACE_MODE_RGMII_ID; } ret = cpsw_register(&cpsw_data); if (ret < 0) printf("Error %d registering CPSW switch\n", ret); return ret; }
int board_eth_init(bd_t *bis) { int ret; uint8_t mac_addr[6]; uint32_t mac_hi, mac_lo; uint32_t ctrl_val; /* try reading mac address from efuse */ mac_lo = readl((*ctrl)->control_core_mac_id_0_lo); mac_hi = readl((*ctrl)->control_core_mac_id_0_hi); mac_addr[0] = (mac_hi & 0xFF0000) >> 16; mac_addr[1] = (mac_hi & 0xFF00) >> 8; mac_addr[2] = mac_hi & 0xFF; mac_addr[3] = (mac_lo & 0xFF0000) >> 16; mac_addr[4] = (mac_lo & 0xFF00) >> 8; mac_addr[5] = mac_lo & 0xFF; if (!getenv("ethaddr")) { printf("<ethaddr> not set. Validating first E-fuse MAC\n"); if (is_valid_ethaddr(mac_addr)) eth_setenv_enetaddr("ethaddr", mac_addr); } mac_lo = readl((*ctrl)->control_core_mac_id_1_lo); mac_hi = readl((*ctrl)->control_core_mac_id_1_hi); mac_addr[0] = (mac_hi & 0xFF0000) >> 16; mac_addr[1] = (mac_hi & 0xFF00) >> 8; mac_addr[2] = mac_hi & 0xFF; mac_addr[3] = (mac_lo & 0xFF0000) >> 16; mac_addr[4] = (mac_lo & 0xFF00) >> 8; mac_addr[5] = mac_lo & 0xFF; if (!getenv("eth1addr")) { if (is_valid_ethaddr(mac_addr)) eth_setenv_enetaddr("eth1addr", mac_addr); } ctrl_val = readl((*ctrl)->control_core_control_io1) & (~0x33); ctrl_val |= 0x22; writel(ctrl_val, (*ctrl)->control_core_control_io1); /* The phy address for the AM57xx IDK are different than x15 */ if (board_is_am572x_idk() || board_is_am571x_idk()) { cpsw_data.slave_data[0].phy_addr = 0; cpsw_data.slave_data[1].phy_addr = 1; } ret = cpsw_register(&cpsw_data); if (ret < 0) printf("Error %d registering CPSW switch\n", ret); return ret; }
int misc_init_r(void) { #ifdef CONFIG_ATSHA204A int err; struct udevice *dev = get_atsha204a_dev(); u8 mac0[4], mac1[4], mac[6]; if (!dev) goto out; err = atsha204a_wakeup(dev); if (err) goto out; err = atsha204a_read(dev, ATSHA204A_ZONE_OTP, false, OMNIA_ATSHA204_OTP_MAC0, mac0); if (err) goto out; err = atsha204a_read(dev, ATSHA204A_ZONE_OTP, false, OMNIA_ATSHA204_OTP_MAC1, mac1); if (err) goto out; atsha204a_sleep(dev); mac[0] = mac0[1]; mac[1] = mac0[2]; mac[2] = mac0[3]; mac[3] = mac1[1]; mac[4] = mac1[2]; mac[5] = mac1[3]; if (is_valid_ethaddr(mac)) eth_env_set_enetaddr("ethaddr", mac); increment_mac(mac); if (is_valid_ethaddr(mac)) eth_env_set_enetaddr("eth1addr", mac); increment_mac(mac); if (is_valid_ethaddr(mac)) eth_env_set_enetaddr("eth2addr", mac); out: #endif return 0; }
static int set_ethaddr_from_eeprom(void) { const int ETH_ADDR_LEN = 6; unsigned char ethaddr[ETH_ADDR_LEN]; const char * ETHADDR_NAME = "ethaddr"; if (getenv(ETHADDR_NAME)) return 0; if (i2c_set_bus_num(0)) { printf("i2c bus 0 is not valid\n"); return -1; } if (i2c_read(CONFIG_AT24MAC_ADDR, CONFIG_AT24MAC_REG, 1, ethaddr, ETH_ADDR_LEN)) { printf("Failed to read ethernet address from EEPROM\n"); return -1; } if (!is_valid_ethaddr(ethaddr)) { printf("The ethernet address read from EEPROM is not valid!\n"); return -1; } return eth_setenv_enetaddr(ETHADDR_NAME, ethaddr); }
static const char *dtbmacaddr(u32 ifno) { int node, len; char enet[16]; const char *mac; const char *path; if (gd->fdt_blob == NULL) { printf("%s: don't have a valid gd->fdt_blob!\n", __func__); return NULL; } node = fdt_path_offset(gd->fdt_blob, "/aliases"); if (node < 0) return NULL; sprintf(enet, "ethernet%d", ifno); path = fdt_getprop(gd->fdt_blob, node, enet, NULL); if (!path) { printf("no alias for %s\n", enet); return NULL; } node = fdt_path_offset(gd->fdt_blob, path); mac = fdt_getprop(gd->fdt_blob, node, "mac-address", &len); if (mac && is_valid_ethaddr((u8 *)mac)) return mac; return NULL; }
int board_eth_init(bd_t *bis) { int n = 0; #if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \ (defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD)) struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE; #ifdef CONFIG_FACTORYSET int rv; if (!is_valid_ethaddr(factory_dat.mac)) printf("Error: no valid mac address\n"); else eth_setenv_enetaddr("ethaddr", factory_dat.mac); #endif /* #ifdef CONFIG_FACTORYSET */ /* Set rgmii mode and enable rmii clock to be sourced from chip */ writel(RGMII_MODE_ENABLE | RGMII_INT_DELAY, &cdev->miisel); rv = cpsw_register(&cpsw_data); if (rv < 0) printf("Error %d registering CPSW switch\n", rv); else n += rv; #endif return n; }
int misc_init_r(void) { u8 mac_addr[EFUSE_MAC_SIZE]; char serial[EFUSE_SN_SIZE]; ssize_t len; /* Set RMII mode */ out_le32(GXBB_ETH_REG_0, GXBB_ETH_REG_0_INVERT_RMII_CLK | GXBB_ETH_REG_0_CLK_EN); /* Use Internal PHY */ out_le32(GXBB_ETH_REG_2, 0x10110181); out_le32(GXBB_ETH_REG_3, 0xe40908ff); /* Enable power and clock gate */ setbits_le32(GXBB_GCLK_MPEG_1, GXBB_GCLK_MPEG_1_ETH); clrbits_le32(GXBB_MEM_PD_REG_0, GXBB_MEM_PD_REG_0_ETH_MASK); if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, mac_addr, EFUSE_MAC_SIZE); if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) eth_env_set_enetaddr("ethaddr", mac_addr); } if (!env_get("serial#")) { len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, EFUSE_SN_SIZE); if (len == EFUSE_SN_SIZE) env_set("serial#", serial); } return 0; }
static int set_ethaddr_from_at24mac(void) { const int ETH_ADDR_LEN = 6; unsigned char ethaddr[ETH_ADDR_LEN]; const char *ETHADDR_NAME = "ethaddr"; struct udevice *bus, *dev; if (getenv(ETHADDR_NAME)) return 0; if (uclass_get_device_by_seq(UCLASS_I2C, AT24MAC_ON_I2C_BUS, &bus)) { printf("Cannot find I2C bus\n"); return -1; } if (dm_i2c_probe(bus, AT24MAC_ADDR, 0, &dev)) { printf("Failed to probe I2C device chip\n"); return -1; } if (dm_i2c_read(dev, AT24MAC_REG, ethaddr, ETH_ADDR_LEN)) { printf("Failed to read ethernet address from AT24MAC\n"); return -1; } if (!is_valid_ethaddr(ethaddr)) { printf("The ethernet address read from AT24MAC is not valid\n"); return -1; } return eth_setenv_enetaddr(ETHADDR_NAME, ethaddr); }
int misc_init_r(void) { u8 mac_addr[EFUSE_MAC_SIZE]; char serial[EFUSE_SN_SIZE]; ssize_t len; meson_gx_eth_init(PHY_INTERFACE_MODE_RMII, MESON_GXL_USE_INTERNAL_RMII_PHY); /* Enable power and clock gate */ setbits_le32(GX_GCLK_MPEG_1, GX_GCLK_MPEG_1_ETH); clrbits_le32(GX_MEM_PD_REG_0, GX_MEM_PD_REG_0_ETH_MASK); if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, mac_addr, EFUSE_MAC_SIZE); if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) eth_env_set_enetaddr("ethaddr", mac_addr); } if (!env_get("serial#")) { len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, EFUSE_SN_SIZE); if (len == EFUSE_SN_SIZE) env_set("serial#", serial); } return 0; }
static int eth_write_hwaddr(struct udevice *dev) { struct eth_pdata *pdata = dev->platdata; int ret = 0; if (!dev || !device_active(dev)) return -EINVAL; /* seq is valid since the device is active */ if (eth_get_ops(dev)->write_hwaddr && !eth_mac_skip(dev->seq)) { if (!is_valid_ethaddr(pdata->enetaddr)) { printf("\nError: %s address %pM illegal value\n", dev->name, pdata->enetaddr); return -EINVAL; } /* * Drivers are allowed to decide not to implement this at * run-time. E.g. Some devices may use it and some may not. */ ret = eth_get_ops(dev)->write_hwaddr(dev); if (ret == -ENOSYS) ret = 0; if (ret) printf("\nWarning: %s failed to set MAC address\n", dev->name); } return ret; }
int misc_init_r(void) { u8 mac_addr[EFUSE_MAC_SIZE]; char serial[EFUSE_SN_SIZE]; ssize_t len; meson_gx_eth_init(PHY_INTERFACE_MODE_RGMII, 0); /* Reset PHY on GPIOZ_14 */ clrbits_le32(GX_GPIO_EN(3), BIT(14)); clrbits_le32(GX_GPIO_OUT(3), BIT(14)); mdelay(10); setbits_le32(GX_GPIO_OUT(3), BIT(14)); if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, mac_addr, EFUSE_MAC_SIZE); if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) eth_env_set_enetaddr("ethaddr", mac_addr); } if (!env_get("serial#")) { len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, EFUSE_SN_SIZE); if (len == EFUSE_SN_SIZE) env_set("serial#", serial); } return 0; }
static void board_init_enetaddr(uchar *mac_addr) { #ifndef CONFIG_SYS_NO_FLASH /* we cram the MAC in the last flash sector */ uchar *board_mac_addr = (uchar *)0x203F0096; if (is_valid_ethaddr(board_mac_addr)) { memcpy(mac_addr, board_mac_addr, 6); eth_setenv_enetaddr("ethaddr", mac_addr); } #endif }
int board_late_init(void) { #if !defined(CONFIG_SPL_BUILD) uint8_t mac_addr[6]; uint32_t mac_hi, mac_lo; /* try reading mac address from efuse */ mac_lo = readl(&cdev->macid0l); mac_hi = readl(&cdev->macid0h); mac_addr[0] = mac_hi & 0xFF; mac_addr[1] = (mac_hi & 0xFF00) >> 8; mac_addr[2] = (mac_hi & 0xFF0000) >> 16; mac_addr[3] = (mac_hi & 0xFF000000) >> 24; mac_addr[4] = mac_lo & 0xFF; mac_addr[5] = (mac_lo & 0xFF00) >> 8; if (!getenv("ethaddr")) { printf("<ethaddr> not set. Validating first E-fuse MAC\n"); if (is_valid_ethaddr(mac_addr)) eth_setenv_enetaddr("ethaddr", mac_addr); } mac_lo = readl(&cdev->macid1l); mac_hi = readl(&cdev->macid1h); mac_addr[0] = mac_hi & 0xFF; mac_addr[1] = (mac_hi & 0xFF00) >> 8; mac_addr[2] = (mac_hi & 0xFF0000) >> 16; mac_addr[3] = (mac_hi & 0xFF000000) >> 24; mac_addr[4] = mac_lo & 0xFF; mac_addr[5] = (mac_lo & 0xFF00) >> 8; if (!getenv("eth1addr")) { if (is_valid_ethaddr(mac_addr)) eth_setenv_enetaddr("eth1addr", mac_addr); } #endif return 0; }
int misc_init_r(void) { uchar data[128]; char str[32]; u32 serial; int ret; /* EEPROM is at bus 0. */ ret = i2c_set_bus_num(0); if (ret) { puts("Cannot select EEPROM I2C bus.\n"); return 0; } /* EEPROM is at address 0x50. */ ret = eeprom_read(0x50, 0, data, sizeof(data)); if (ret) { puts("Cannot read I2C EEPROM.\n"); return 0; } /* Check EEPROM signature. */ if (!(data[0] == 0xa5 && data[1] == 0x5a)) { puts("Invalid I2C EEPROM signature.\n"); setenv("unit_serial", "invalid"); setenv("unit_ident", "VINing-xxxx-STD"); setenv("hostname", "vining-invalid"); return 0; } /* If 'unit_serial' is already set, do nothing. */ if (!getenv("unit_serial")) { /* This field is Big Endian ! */ serial = (data[0x54] << 24) | (data[0x55] << 16) | (data[0x56] << 8) | (data[0x57] << 0); memset(str, 0, sizeof(str)); sprintf(str, "%07i", serial); setenv("unit_serial", str); } if (!getenv("unit_ident")) { memset(str, 0, sizeof(str)); memcpy(str, &data[0x2e], 18); setenv("unit_ident", str); } /* Set ethernet address from EEPROM. */ if (!getenv("ethaddr") && is_valid_ethaddr(&data[0x62])) eth_setenv_enetaddr("ethaddr", &data[0x62]); return 0; }
void board_ti_set_ethaddr(int index) { uint8_t mac_addr[6]; int i; u64 mac1, mac2; u8 mac_addr1[6], mac_addr2[6]; int num_macs; /* * Export any Ethernet MAC addresses from EEPROM. * The 2 MAC addresses in EEPROM define the address range. */ board_ti_get_eth_mac_addr(0, mac_addr1); board_ti_get_eth_mac_addr(1, mac_addr2); if (is_valid_ethaddr(mac_addr1) && is_valid_ethaddr(mac_addr2)) { mac1 = mac_to_u64(mac_addr1); mac2 = mac_to_u64(mac_addr2); /* must contain an address range */ num_macs = mac2 - mac1 + 1; if (num_macs <= 0) return; if (num_macs > 50) { printf("%s: Too many MAC addresses: %d. Limiting to 50\n", __func__, num_macs); num_macs = 50; } for (i = 0; i < num_macs; i++) { u64_to_mac(mac1 + i, mac_addr); if (is_valid_ethaddr(mac_addr)) { eth_env_set_enetaddr_by_index("eth", i + index, mac_addr); } } } }
static int am3517_get_efuse_enetaddr(u8 *enetaddr) { u32 lsb = __raw_readl(CONTROL_EFUSE_EMAC_LSB); u32 msb = __raw_readl(CONTROL_EFUSE_EMAC_MSB); enetaddr[0] = (u8)((msb >> 16) & 0xff); enetaddr[1] = (u8)((msb >> 8) & 0xff); enetaddr[2] = (u8)(msb & 0xff); enetaddr[3] = (u8)((lsb >> 16) & 0xff); enetaddr[4] = (u8)((lsb >> 8) & 0xff); enetaddr[5] = (u8)(lsb & 0xff); return is_valid_ethaddr(enetaddr); }
int board_late_init(void) { u8 mac[6]; /* Read Mac Address and set*/ i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); i2c_set_bus_num(CONFIG_SYS_I2C_MODULE); /* Read MAC address */ i2c_read(0x50, 0x0, 0, mac, 6); if (is_valid_ethaddr(mac)) eth_setenv_enetaddr("ethaddr", mac); return 0; }
int board_late_init(void) { unsigned char mac[8]; int cpurev = get_cpu_rev(); setenv("cpu", get_imx_type((cpurev & 0xFF000) >> 12)); if (!getenv("board")) setenv("board", "insp"); if (!getenv("uboot_defconfig")) setenv("uboot_defconfig", CONFIG_DEFCONFIG); imx_get_mac_from_fuse(0, mac); if (is_valid_ethaddr(mac)) { if (!getenv("ethaddr")) eth_setenv_enetaddr("ethaddr", mac); } return 0; }
static void board_init_enetaddr(uchar *mac_addr) { /* the MAC is stored in OTP memory page 0xDF */ uint32_t ret; uint64_t otp_mac; ret = bfrom_OtpRead(0xDF, OTP_LOWER_HALF, &otp_mac); if (!(ret & OTP_MASTER_ERROR)) { uchar *otp_mac_p = (uchar *)&otp_mac; for (ret = 0; ret < 6; ++ret) mac_addr[ret] = otp_mac_p[5 - ret]; if (is_valid_ethaddr(mac_addr)) eth_setenv_enetaddr("ethaddr", mac_addr); } }
int board_eth_init(bd_t *bis) { int rv = 0; char mac_addr[6]; const char *mac = 0; uint32_t mac_hi, mac_lo; /* try reading mac address from efuse */ mac_lo = readl(&cdev->macid0l); mac_hi = readl(&cdev->macid0h); mac_addr[0] = mac_hi & 0xFF; mac_addr[1] = (mac_hi & 0xFF00) >> 8; mac_addr[2] = (mac_hi & 0xFF0000) >> 16; mac_addr[3] = (mac_hi & 0xFF000000) >> 24; mac_addr[4] = mac_lo & 0xFF; mac_addr[5] = (mac_lo & 0xFF00) >> 8; #if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \ (defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD)) if (!getenv("ethaddr")) { #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_USE_FDT) printf("<ethaddr> not set. trying DTB ... "); mac = dtbmacaddr(0); #endif if (!mac) { printf("<ethaddr> not set. validating E-fuse MAC ... "); if (is_valid_ethaddr((const u8 *)mac_addr)) mac = (const char *)mac_addr; } if (mac) { printf("using: %pM on ", mac); eth_setenv_enetaddr("ethaddr", (const u8 *)mac); } } writel(MII_MODE_ENABLE, &cdev->miisel); cpsw_slaves[0].phy_if = PHY_INTERFACE_MODE_MII; cpsw_slaves[1].phy_if = PHY_INTERFACE_MODE_MII; rv = cpsw_register(&cpsw_data); if (rv < 0) { printf("Error %d registering CPSW switch\n", rv); return 0; } #endif /* CONFIG_DRIVER_TI_CPSW, ... */ return rv; }
static int handle_mac_address(char *env_var, uint eeprom_bus) { unsigned char enetaddr[6]; int rc; rc = eth_env_get_enetaddr(env_var, enetaddr); if (rc) return 0; rc = cl_eeprom_read_mac_addr(enetaddr, eeprom_bus); if (rc) return rc; if (!is_valid_ethaddr(enetaddr)) return -1; return eth_env_set_enetaddr(env_var, enetaddr); }
/* * Routine: handle_mac_address * Description: prepare MAC address for on-board Ethernet. */ static int handle_mac_address(void) { unsigned char enetaddr[6]; int rc; rc = eth_env_get_enetaddr("ethaddr", enetaddr); if (rc) return 0; rc = cl_eeprom_read_mac_addr(enetaddr, CONFIG_SYS_I2C_EEPROM_BUS); if (rc) return rc; if (!is_valid_ethaddr(enetaddr)) return -1; return eth_env_set_enetaddr("ethaddr", enetaddr); }
/* * Routine: handle_mac_address * Description: prepare MAC address for on-board Ethernet. */ static int handle_mac_address(void) { uchar enetaddr[6]; int rv; rv = eth_getenv_enetaddr("ethaddr", enetaddr); if (rv) return 0; rv = cl_eeprom_read_mac_addr(enetaddr, CONFIG_SYS_I2C_EEPROM_BUS); if (rv) get_efuse_mac_addr(enetaddr); if (!is_valid_ethaddr(enetaddr)) return -1; return eth_setenv_enetaddr("ethaddr", enetaddr); }
/* * cl_som_imx7_handle_mac_address() - set Ethernet MAC address environment. * * @env_var: MAC address environment variable * @eeprom_bus: I2C bus of the environment EEPROM * * @return: 0 on success, < 0 on failure */ static int cl_som_imx7_handle_mac_address(char *env_var, uint eeprom_bus) { int ret; unsigned char enetaddr[6]; ret = eth_env_get_enetaddr(env_var, enetaddr); if (ret) return 0; ret = cl_eeprom_read_mac_addr(enetaddr, eeprom_bus); if (ret) return ret; ret = is_valid_ethaddr(enetaddr); if (!ret) return -1; return eth_env_set_enetaddr(env_var, enetaddr); }
int board_eth_init(bd_t *bis) { int rv, n = 0; uint8_t mac_addr[6]; uint32_t mac_hi, mac_lo; const char *devname; if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { /* try reading mac address from efuse */ mac_lo = readl(&cdev->macid0l); mac_hi = readl(&cdev->macid0h); mac_addr[0] = mac_hi & 0xFF; mac_addr[1] = (mac_hi & 0xFF00) >> 8; mac_addr[2] = (mac_hi & 0xFF0000) >> 16; mac_addr[3] = (mac_hi & 0xFF000000) >> 24; mac_addr[4] = mac_lo & 0xFF; mac_addr[5] = (mac_lo & 0xFF00) >> 8; if (is_valid_ethaddr(mac_addr)) eth_env_set_enetaddr("ethaddr", mac_addr); }
/* * Routine: handle_mac_address * Description: prepare MAC address for on-board Ethernet. */ static int cm_t3517_handle_mac_address(void) { unsigned char enetaddr[6]; int ret; ret = eth_env_get_enetaddr("ethaddr", enetaddr); if (ret) return 0; ret = cl_eeprom_read_mac_addr(enetaddr, CONFIG_SYS_I2C_EEPROM_BUS); if (ret) { ret = am3517_get_efuse_enetaddr(enetaddr); if (ret) return ret; } if (!is_valid_ethaddr(enetaddr)) return -1; return eth_env_set_enetaddr("ethaddr", enetaddr); }
int board_eth_init(bd_t *bis) { uint8_t mac_addr[6]; uint32_t mac_hi, mac_lo; if (!eth_getenv_enetaddr("ethaddr", mac_addr)) { printf("<ethaddr> not set. Reading from E-fuse\n"); /* try reading mac address from efuse */ mac_lo = readl(&cdev->macid0l); mac_hi = readl(&cdev->macid0h); mac_addr[0] = mac_hi & 0xFF; mac_addr[1] = (mac_hi & 0xFF00) >> 8; mac_addr[2] = (mac_hi & 0xFF0000) >> 16; mac_addr[3] = (mac_hi & 0xFF000000) >> 24; mac_addr[4] = mac_lo & 0xFF; mac_addr[5] = (mac_lo & 0xFF00) >> 8; if (is_valid_ethaddr(mac_addr)) eth_setenv_enetaddr("ethaddr", mac_addr); else printf("Unable to read MAC address. Set <ethaddr>\n"); }
/* * Read ethernet MAC address from EEPROM for DVEVM compatible boards. * Returns 1 if found, 0 otherwise. */ int dvevm_read_mac_address(uint8_t *buf) { #ifdef CONFIG_SYS_I2C_EEPROM_ADDR /* Read MAC address. */ if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x7F00, CONFIG_SYS_I2C_EEPROM_ADDR_LEN, (uint8_t *) &buf[0], 6)) goto i2cerr; /* Check that MAC address is valid. */ if (!is_valid_ethaddr(buf)) goto err; return 1; /* Found */ i2cerr: printf("Read from EEPROM @ 0x%02x failed\n", CONFIG_SYS_I2C_EEPROM_ADDR); err: #endif /* CONFIG_SYS_I2C_EEPROM_ADDR */ return 0; }
int misc_init_r(void) { u8 mac_addr[EFUSE_MAC_SIZE]; char serial[EFUSE_SN_SIZE]; ssize_t len; meson_eth_init(PHY_INTERFACE_MODE_RMII, 0); if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, mac_addr, EFUSE_MAC_SIZE); if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) eth_env_set_enetaddr("ethaddr", mac_addr); } if (!env_get("serial#")) { len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, EFUSE_SN_SIZE); if (len == EFUSE_SN_SIZE) env_set("serial#", serial); } return 0; }