[PATCH] xilinx: Add option to select SC id instead of DUT id for SC support
Michal Simek
monstr at monstr.eu
Mon Nov 28 12:30:16 CET 2022
st 23. 11. 2022 v 12:49 odesílatel Michal Simek <michal.simek at amd.com> napsal:
>
> Reading MAC address from on board EEPROM requires different type for System
> Controller (SC).
>
> Signed-off-by: Michal Simek <michal.simek at amd.com>
> ---
>
> board/xilinx/Kconfig | 9 +++++++++
> board/xilinx/common/fru.h | 1 +
> board/xilinx/common/fru_ops.c | 6 +++++-
> 3 files changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/board/xilinx/Kconfig b/board/xilinx/Kconfig
> index 4ea78418780c..4f0776e8bd95 100644
> --- a/board/xilinx/Kconfig
> +++ b/board/xilinx/Kconfig
> @@ -65,3 +65,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 59f6b722cf12..586c41b66ef7 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 49846ae3d660..c4f009affc5e 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);
> }
> --
> 2.36.1
>
Applied.
M
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP/Versal SoCs
More information about the U-Boot
mailing list