summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorMichal Simek <michal.simek@amd.com>2022-11-23 14:48:44 +0300
committerMichal Simek <michal.simek@amd.com>2022-12-05 10:55:54 +0300
commitf3538a3cbe8aa29e5b7188e223f926da79788d63 (patch)
treee9a2525e3d5d1e8a97360047ffa37635b39b12a5 /board
parent906e20a613abdcba5f558ac8e93cb6fad464f786 (diff)
downloadu-boot-f3538a3cbe8aa29e5b7188e223f926da79788d63.tar.xz
xilinx: Add option to select SC id instead of DUT id for SC support
Reading MAC address from on board EEPROM requires different type for System Controller (SC). Signed-off-by: Michal Simek <michal.simek@amd.com> Link: https://lore.kernel.org/r/90bb7cc5463568a690b979f18c8d42556986b46d.1669204122.git.michal.simek@amd.com
Diffstat (limited to 'board')
-rw-r--r--board/xilinx/Kconfig9
-rw-r--r--board/xilinx/common/fru.h1
-rw-r--r--board/xilinx/common/fru_ops.c6
3 files changed, 15 insertions, 1 deletions
diff --git a/board/xilinx/Kconfig b/board/xilinx/Kconfig
index 746a2332ad..7b31d7eaed 100644
--- a/board/xilinx/Kconfig
+++ b/board/xilinx/Kconfig
@@ -82,3 +82,12 @@ config CMD_FRU
information present in the device. The FRU Information is used
to primarily to provide "inventory" information about the boards
that the FRU Information Device is located on.
+
+config FRU_SC
+ bool "FRU system controller decoding"
+ help
+ Xilinx System Controller (SC) FRU format is describing boards from two
+ angles. One from DUT and then from SC. DUT is default option for
+ the main CPU. SC behaves more or less as slave and have different ID.
+ If you build U-Boot for SC you should enable this option to get proper
+ MAC address.
diff --git a/board/xilinx/common/fru.h b/board/xilinx/common/fru.h
index 59f6b722cf..586c41b66e 100644
--- a/board/xilinx/common/fru.h
+++ b/board/xilinx/common/fru.h
@@ -90,6 +90,7 @@ struct fru_table {
#define FRU_MULTIREC_MAC_OFFSET 4
#define FRU_LAST_REC BIT(7)
#define FRU_DUT_MACID 0x31
+#define FRU_SC_MACID 0x11
/* This should be minimum of fields */
#define FRU_BOARD_AREA_TOTAL_FIELDS 5
diff --git a/board/xilinx/common/fru_ops.c b/board/xilinx/common/fru_ops.c
index 49846ae3d6..c4f009affc 100644
--- a/board/xilinx/common/fru_ops.c
+++ b/board/xilinx/common/fru_ops.c
@@ -239,8 +239,12 @@ static int fru_parse_multirec(unsigned long addr)
if (mrc.rec_type == FRU_MULTIREC_TYPE_OEM) {
struct fru_multirec_mac *mac = (void *)addr + hdr_len;
+ u32 type = FRU_DUT_MACID;
- if (mac->ver == FRU_DUT_MACID) {
+ if (CONFIG_IS_ENABLED(FRU_SC))
+ type = FRU_SC_MACID;
+
+ if (mac->ver == type) {
mac_len = mrc.len - FRU_MULTIREC_MAC_OFFSET;
memcpy(&fru_data.mac.macid, mac->macid, mac_len);
}