1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * (C) Copyright 2014 - 2019 Xilinx, Inc. 4 * Michal Simek <michal.simek@xilinx.com> 5 */ 6 7 #include <common.h> 8 #include <dm/uclass.h> 9 #include <i2c.h> 10 11 #if !defined(CONFIG_DM_I2C) 12 int zynq_board_read_rom_ethaddr(unsigned char *ethaddr) 13 { 14 #if defined(CONFIG_ZYNQ_GEM_EEPROM_ADDR) && \ 15 defined(CONFIG_ZYNQ_GEM_I2C_MAC_OFFSET) && \ 16 defined(CONFIG_ZYNQ_EEPROM_BUS) 17 i2c_set_bus_num(CONFIG_ZYNQ_EEPROM_BUS); 18 19 if (eeprom_read(CONFIG_ZYNQ_GEM_EEPROM_ADDR, 20 CONFIG_ZYNQ_GEM_I2C_MAC_OFFSET, 21 ethaddr, 6)) 22 printf("I2C EEPROM MAC address read failed\n"); 23 #endif 24 25 return 0; 26 } 27 28 #else 29 int zynq_board_read_rom_ethaddr(unsigned char *ethaddr) 30 { 31 int ret = -EINVAL; 32 33 #if defined(CONFIG_ZYNQ_GEM_I2C_MAC_OFFSET) 34 struct udevice *dev; 35 ofnode eeprom; 36 37 eeprom = ofnode_get_chosen_node("xlnx,eeprom"); 38 if (!ofnode_valid(eeprom)) 39 return -ENODEV; 40 41 debug("%s: Path to EEPROM %s\n", __func__, 42 ofnode_get_chosen_prop("xlnx,eeprom")); 43 44 ret = uclass_get_device_by_ofnode(UCLASS_I2C_EEPROM, eeprom, &dev); 45 if (ret) 46 return ret; 47 48 ret = dm_i2c_read(dev, CONFIG_ZYNQ_GEM_I2C_MAC_OFFSET, ethaddr, 6); 49 if (ret) 50 debug("%s: I2C EEPROM MAC address read failed\n", __func__); 51 else 52 debug("%s: I2C EEPROM MAC %pM\n", __func__, ethaddr); 53 #endif 54 55 return ret; 56 } 57 #endif 58