blob: 00dce9a02e9b7cb06182a5d50c80c966dbbc3b31 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001From 67db0da72eb7ed87ebaaeb8a26891cb2cf916500 Mon Sep 17 00:00:00 2001
2From: Luis Araneda <luaraneda@gmail.com>
3Date: Sun, 21 Jul 2019 23:24:12 -0400
4Subject: [U-Boot] [PATCH] arm: zynq: read mac address from SPI flash memory
5
6Implement a method for reading the MAC address from an
7SPI flash memory.
8In particular, this method is used by the Zybo Z7 board
9to read the MAC address from the OTP region in the SPI NOR
10memory
11
12Signed-off-by: Luis Araneda <luaraneda@gmail.com>
13---
14As of 2019-08-18, this patch has not been accepted by upstream U-Boot.
15Keep this patch until an alternative is accepted by upstream.
16---
17 board/xilinx/common/board.c | 28 ++++++++++++++++++++++++++++
18 configs/zynq_zybo_z7_defconfig | 3 +++
19 drivers/misc/Kconfig | 17 +++++++++++++++++
20 3 files changed, 48 insertions(+)
21
22--- a/board/xilinx/common/board.c
23+++ b/board/xilinx/common/board.c
24@@ -6,7 +6,10 @@
25
26 #include <common.h>
27 #include <dm/uclass.h>
28+#include <dm/device.h>
29+#include <dm/device-internal.h>
30 #include <i2c.h>
31+#include <spi_flash.h>
32
33 int zynq_board_read_rom_ethaddr(unsigned char *ethaddr)
34 {
35@@ -34,5 +37,30 @@ int zynq_board_read_rom_ethaddr(unsigned
36 debug("%s: I2C EEPROM MAC %pM\n", __func__, ethaddr);
37 #endif
38
39+#if defined(CONFIG_MAC_ADDR_IN_SPI_FLASH)
40+ struct spi_flash *flash;
41+ struct udevice *dev;
42+
43+ ret = spi_flash_probe_bus_cs(CONFIG_SF_DEFAULT_BUS,
44+ CONFIG_SF_DEFAULT_CS,
45+ 0, 0, &dev);
46+ if (ret) {
47+ printf("SPI(bus:%u cs:%u) probe failed\n",
48+ CONFIG_SF_DEFAULT_BUS,
49+ CONFIG_SF_DEFAULT_CS);
50+ return 0;
51+ }
52+
53+ flash = dev_get_uclass_priv(dev);
54+ flash->read_opcode = CONFIG_MAC_ADDR_SPI_FLASH_READ_CMD;
55+
56+ if (spi_flash_read_dm(dev,
57+ CONFIG_MAC_ADDR_SPI_FLASH_DATA_OFFSET,
58+ 6, ethaddr))
59+ printf("SPI MAC address read failed\n");
60+
61+ device_remove(dev, DM_REMOVE_NORMAL);
62+#endif
63+
64 return ret;
65 }
66--- a/configs/zynq_zybo_z7_defconfig
67+++ b/configs/zynq_zybo_z7_defconfig
68@@ -42,6 +42,9 @@ CONFIG_DFU_RAM=y
69 CONFIG_FPGA_XILINX=y
70 CONFIG_FPGA_ZYNQPL=y
71 CONFIG_DM_GPIO=y
72+CONFIG_MAC_ADDR_IN_SPI_FLASH=y
73+CONFIG_MAC_ADDR_SPI_FLASH_READ_CMD=0x4b
74+CONFIG_MAC_ADDR_SPI_FLASH_DATA_OFFSET=0x20
75 CONFIG_MMC_SDHCI=y
76 CONFIG_MMC_SDHCI_ZYNQ=y
77 CONFIG_SPI_FLASH=y
78--- a/drivers/misc/Kconfig
79+++ b/drivers/misc/Kconfig
80@@ -366,6 +366,23 @@ config SYS_I2C_EEPROM_ADDR_OVERFLOW
81
82 endif
83
84+config MAC_ADDR_IN_SPI_FLASH
85+ bool "MAC address in SPI flash"
86+ help
87+ Read MAC address from an SPI flash memory
88+
89+if MAC_ADDR_IN_SPI_FLASH
90+
91+config MAC_ADDR_SPI_FLASH_READ_CMD
92+ hex "Read command for the SPI flash memory"
93+ default 0
94+
95+config MAC_ADDR_SPI_FLASH_DATA_OFFSET
96+ hex "Offset of MAC data in SPI flash memory"
97+ default 0
98+
99+endif
100+
101 config GDSYS_RXAUI_CTRL
102 bool "Enable gdsys RXAUI control driver"
103 depends on MISC