static void imx_ocotp_init_dt(struct ocotp_priv *priv) { char mac[MAC_BYTES]; const __be32 *prop; struct device_node *node = priv->dev.parent->device_node; int len; if (!node) return; prop = of_get_property(node, "barebox,provide-mac-address", &len); if (!prop) return; for (; len >= MAC_ADDRESS_PROPLEN; len -= MAC_ADDRESS_PROPLEN) { struct device_node *rnode; uint32_t phandle, offset; phandle = be32_to_cpup(prop++); rnode = of_find_node_by_phandle(phandle); offset = be32_to_cpup(prop++); if (imx_ocotp_read_mac(priv->data, priv->map, OCOTP_OFFSET_TO_ADDR(offset), mac)) continue; of_eth_register_ethaddr(rnode, mac); } }
static int art_set_mac(struct device_d *dev, struct ar9300_eeprom *eeprom) { struct device_node *node = dev->device_node; struct device_node *rnode; if (!node) return -ENOENT; rnode = of_parse_phandle_from(node, NULL, "barebox,provide-mac-address", 0); if (!rnode) return -ENOENT; of_eth_register_ethaddr(rnode, &eeprom->mac_addr[0]); return 0; }
static void imx_ocotp_init_dt(struct device_d *dev, void __iomem *base) { char mac[6]; const __be32 *prop; struct device_node *node = dev->device_node; int len; if (!node) return; prop = of_get_property(node, "barebox,provide-mac-address", &len); if (!prop) return; while (len >= MAC_ADDRESS_PROPLEN) { struct device_node *rnode; uint32_t phandle, offset; phandle = be32_to_cpup(prop++); rnode = of_find_node_by_phandle(phandle); offset = be32_to_cpup(prop++); mac[5] = readb(base + offset); offset = inc_offset(offset); mac[4] = readb(base + offset); offset = inc_offset(offset); mac[3] = readb(base + offset); offset = inc_offset(offset); mac[2] = readb(base + offset); offset = inc_offset(offset); mac[1] = readb(base + offset); offset = inc_offset(offset); mac[0] = readb(base + offset); of_eth_register_ethaddr(rnode, mac); len -= MAC_ADDRESS_PROPLEN; } }
static int rdu2_eth_register_ethaddr(struct device_node *np) { u8 mac[ETH_ALEN]; u8 *data; int i; data = nvmem_cell_get_and_read(np, "mac-address", ETH_ALEN); if (IS_ERR(data)) return PTR_ERR(data); /* * EEPROM stores MAC address in reverse (to what we expect it * to be) byte order. */ for (i = 0; i < ETH_ALEN; i++) mac[i] = data[ETH_ALEN - i - 1]; free(data); of_eth_register_ethaddr(np, mac); return 0; }