It would even be better to adopt the Linux kernel way of storing MAC address 
through nvmem. That works for basically any board - and you get rid of the 
vendor prefix. Any nvmem provider can store the data, not just I2C eeproms. It 
reduces the total code size since all gem drivers can call the same function.

Example:

eeprom: eeprom@50 {
        compatible = "at24,24c04";
        reg = <0x50>;
        #address-cells = <1>;
        #size-cells = <1>;
        /* NVMEM entries */
        gem0_mac: mac@0x1e8 {
                reg = <0x1e8 6>;
        };
};

&gem0 {
        /* MAC address stored in NVMEM */
        nvmem-cells = <&gem0_mac>;
        nvmem-cell-names = "mac-address";
};


On 28-01-19 09:52, Michal Simek wrote:
> It is much easier to point to eeprom which stores information like MAC
> address directly via DT. eeprom which contains this information is
> pointed by /chosen/xlnx,eeprom parameter.
> 
> For example:
>          chosen {
>                  bootargs = "earlycon";
>                  stdout-path = "serial0:115200n8";
> +               xlnx,eeprom = &eeprom;
>          };
> 
> Signed-off-by: Michal Simek <michal.si...@xilinx.com>
> ---
> 
>   board/xilinx/common/board.c | 32 ++++++++++++++++++++++++++++++++
>   1 file changed, 32 insertions(+)
> 
> diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
> index 7e813d856404..b14f530c72c5 100644
> --- a/board/xilinx/common/board.c
> +++ b/board/xilinx/common/board.c
> @@ -8,6 +8,7 @@
>   #include <dm/uclass.h>
>   #include <i2c.h>
>   
> +#if !defined(CONFIG_DM_I2C)
>   int zynq_board_read_rom_ethaddr(unsigned char *ethaddr)
>   {
>   #if defined(CONFIG_ZYNQ_GEM_EEPROM_ADDR) && \
> @@ -23,3 +24,34 @@ int zynq_board_read_rom_ethaddr(unsigned char *ethaddr)
>   
>       return 0;
>   }
> +
> +#else
> +int zynq_board_read_rom_ethaddr(unsigned char *ethaddr)
> +{
> +     int ret = -EINVAL;
> +
> +#if defined(CONFIG_ZYNQ_GEM_I2C_MAC_OFFSET)
> +     struct udevice *dev;
> +     ofnode eeprom;
> +
> +     eeprom = ofnode_get_chosen_node("xlnx,eeprom");
> +     if (!ofnode_valid(eeprom))
> +             return -ENODEV;
> +
> +     debug("%s: Path to EEPROM %s\n", __func__,
> +           ofnode_get_chosen_prop("xlnx,eeprom"));
> +
> +     ret = uclass_get_device_by_ofnode(UCLASS_I2C_EEPROM, eeprom, &dev);
> +     if (ret)
> +             return ret;
> +
> +     ret = dm_i2c_read(dev, CONFIG_ZYNQ_GEM_I2C_MAC_OFFSET, ethaddr, 6);
> +     if (ret)
> +             debug("%s: I2C EEPROM MAC address read failed\n", __func__);
> +     else
> +             debug("%s: I2C EEPROM MAC %pM\n", __func__, ethaddr);
> +#endif
> +
> +     return ret;
> +}
> +#endif
> 

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to