[U-Boot] [RFC PATCH] arm: zynq: read mac address from SPI flash memory
Michal Simek
michal.simek at xilinx.com
Tue Aug 14 14:07:18 UTC 2018
Hi Luis, +Jagan,
On 14.8.2018 06:55, Luis Araneda wrote:
> Implement a method for reading the MAC address from an
> SPI flash memory.
> In particular, this method is used by the Zybo Z7 board
> to read the MAC address from the OTP region in the SPI NOR
> memory
>
> Signed-off-by: Luis Araneda <luaraneda at gmail.com>
> ---
>
> I'm trying to implement the reading of the MAC address of
> the Zybo Z7 board from the OTP region of its SPI NOR memory.
>
> I took some ideas from Digilent's fork, but the commit was
> marked as not upstremeable. That's why I'm asking for comments.
I have done this code long time ago because there was a work which
wasn't finished. Also upstreaming takes some time to finish.
>
> If the code can't be merged, ideas on how this can be implemented
> are welcome.
>
> Thanks,
>
> Luis Araneda.
>
> ---
> board/xilinx/zynq/board.c | 28 ++++++++++++++++++++++++++++
> configs/zynq_zybo_z7_defconfig | 3 +++
> drivers/misc/Kconfig | 17 +++++++++++++++++
> 3 files changed, 48 insertions(+)
>
> diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c
> index 614d93c082..a252c38956 100644
> --- a/board/xilinx/zynq/board.c
> +++ b/board/xilinx/zynq/board.c
> @@ -6,9 +6,12 @@
>
> #include <common.h>
> #include <dm/uclass.h>
> +#include <dm/device.h>
> +#include <dm/device-internal.h>
> #include <fdtdec.h>
> #include <fpga.h>
> #include <mmc.h>
> +#include <spi_flash.h>
> #include <watchdog.h>
> #include <wdt.h>
> #include <zynqpl.h>
> @@ -87,6 +90,31 @@ int zynq_board_read_rom_ethaddr(unsigned char *ethaddr)
> printf("I2C EEPROM MAC address read failed\n");
> #endif
>
> +#if defined(CONFIG_MAC_ADDR_IN_SPI_FLASH)
> + struct spi_flash *flash;
> + struct udevice *dev;
> + int ret;
> +
> + ret = spi_flash_probe_bus_cs(CONFIG_SF_DEFAULT_BUS,
> + CONFIG_SF_DEFAULT_CS,
> + 0, 0, &dev);
> + if (ret) {
> + printf("SPI(bus:%u cs:%u) probe failed\n",
> + CONFIG_SF_DEFAULT_BUS,
> + CONFIG_SF_DEFAULT_CS);
> + return 0;
> + }
> +
> + flash = dev_get_uclass_priv(dev);
> + flash->read_cmd = CONFIG_MAC_ADDR_SPI_FLASH_READ_CMD;
> +
> + if (spi_flash_read_dm(dev,
> + CONFIG_MAC_ADDR_SPI_FLASH_DATA_OFFSET,
> + 6, ethaddr))
> + printf("SPI MAC address read failed\n");
> +
> + device_remove(dev, DM_REMOVE_NORMAL);
> +#endif
> return 0;
> }
>
> diff --git a/configs/zynq_zybo_z7_defconfig b/configs/zynq_zybo_z7_defconfig
> index ad44e772aa..ca402e3231 100644
> --- a/configs/zynq_zybo_z7_defconfig
> +++ b/configs/zynq_zybo_z7_defconfig
> @@ -44,6 +44,9 @@ CONFIG_DM_GPIO=y
> CONFIG_SYS_I2C_ZYNQ=y
> CONFIG_ZYNQ_I2C0=y
> CONFIG_ZYNQ_I2C1=y
> +CONFIG_MAC_ADDR_IN_SPI_FLASH=y
> +CONFIG_MAC_ADDR_SPI_FLASH_READ_CMD=0x4b
I am doing spi but isn't this any standard OTP read command which should
put to spi framework.
> +CONFIG_MAC_ADDR_SPI_FLASH_DATA_OFFSET=0x20
> CONFIG_MMC_SDHCI=y
> CONFIG_MMC_SDHCI_ZYNQ=y
> CONFIG_SPI_FLASH=y
> diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
> index c031dfde9d..40cec81e66 100644
> --- a/drivers/misc/Kconfig
> +++ b/drivers/misc/Kconfig
> @@ -272,6 +272,23 @@ config SYS_I2C_EEPROM_ADDR_OVERFLOW
>
> endif
>
> +config MAC_ADDR_IN_SPI_FLASH
> + bool "MAC address in SPI flash"
> + help
> + Read MAC address from an SPI flash memory
> +
> +if MAC_ADDR_IN_SPI_FLASH
> +
> +config MAC_ADDR_SPI_FLASH_READ_CMD
> + hex "Read command for the SPI flash memory"
> + default 0
> +
> +config MAC_ADDR_SPI_FLASH_DATA_OFFSET
> + hex "Offset of MAC data in SPI flash memory"
> + default 0
> +
> +endif
> +
> config GDSYS_RXAUI_CTRL
> bool "Enable gdsys RXAUI control driver"
> depends on MISC
>
Thanks,
Michal
More information about the U-Boot
mailing list