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
This commit is contained in:
Michal Simek 2022-11-23 12:48:44 +01:00
parent 906e20a613
commit f3538a3cbe
3 changed files with 15 additions and 1 deletions

View File

@ -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.

View File

@ -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

View File

@ -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);
}