Hi Ley Foon, > -----Original Message----- > From: Tan, Ley Foon <ley.foon....@intel.com> > Sent: Tuesday, March 23, 2021 6:04 PM > To: Lim, Elly Siew Chin <elly.siew.chin....@intel.com>; u-boot@lists.denx.de > Cc: Marek Vasut <ma...@denx.de>; See, Chin Liang > <chin.liang....@intel.com>; Simon Goldschmidt > <simon.k.r.goldschm...@gmail.com>; Chee, Tien Fong > <tien.fong.c...@intel.com>; Westergreen, Dalon > <dalon.westergr...@intel.com>; Simon Glass <s...@chromium.org>; Gan, > Yau Wai <yau.wai....@intel.com> > Subject: RE: [v1 5/5] arm: socfpga: Restructure Stratix10 and Agilex handoff > code > > > > > -----Original Message----- > > From: Lim, Elly Siew Chin <elly.siew.chin....@intel.com> > > Sent: Monday, March 15, 2021 5:43 PM > > To: u-boot@lists.denx.de > > Cc: Marek Vasut <ma...@denx.de>; Tan, Ley Foon > > <ley.foon....@intel.com>; See, Chin Liang <chin.liang....@intel.com>; > > Simon Goldschmidt <simon.k.r.goldschm...@gmail.com>; Chee, Tien Fong > > <tien.fong.c...@intel.com>; Westergreen, Dalon > > <dalon.westergr...@intel.com>; Simon Glass <s...@chromium.org>; Gan, > > Yau Wai <yau.wai....@intel.com>; Lim, Elly Siew Chin > > <elly.siew.chin....@intel.com> > > Subject: [v1 5/5] arm: socfpga: Restructure Stratix10 and Agilex > > handoff code > > > > Restructure Stratix10 and Agilex handoff code to used by all SOC64 > > devices, in preparation to support handoff for Diamond Mesa. > > > > Remove wrap_pinmux_config_s10.c. Add wrap_handoff_soc64.c which > > contains the generic function to parse the handoff data. > > > > Update system_manager_soc64.c to use generic handoff function in > > wrap_handoff_soc64.c. > > > > Signed-off-by: Siew Chin Lim <elly.siew.chin....@intel.com> > > --- > > arch/arm/mach-socfpga/Makefile | 4 +- > > arch/arm/mach-socfpga/include/mach/handoff_soc64.h | 21 +++++++ > > .../include/mach/system_manager_soc64.h | 4 -- > > arch/arm/mach-socfpga/system_manager_soc64.c | 53 ++++++++++--- > -- > > - > > arch/arm/mach-socfpga/wrap_handoff_soc64.c | 73 > > ++++++++++++++++++++++ > > > > diff --git a/arch/arm/mach-socfpga/include/mach/handoff_soc64.h > > b/arch/arm/mach-socfpga/include/mach/handoff_soc64.h > > index 2561255712..f4c03688d6 100644 > > --- a/arch/arm/mach-socfpga/include/mach/handoff_soc64.h > > +++ b/arch/arm/mach-socfpga/include/mach/handoff_soc64.h > > @@ -11,6 +11,7 @@ > > * Offset for HW handoff from Quartus tools > > */ > > /* HPS handoff */ > > +#define SOC64_HANDOFF_MAGIC_BOOT 0x424F4F54 > > #define SOC64_HANDOFF_MAGIC_MUX 0x504D5558 > > #define SOC64_HANDOFF_MAGIC_IOCTL 0x494F4354 > > #define SOC64_HANDOFF_MAGIC_FPGA 0x46504741 > > @@ -38,4 +39,24 @@ > > #define SOC64_HANDOFF_CLOCK_FPGA (SOC64_HANDOFF_BASE + > > 0x600) > > #endif > > > > +#define SOC64_HANDOFF_MUX_LEN 96 > > +#define SOC64_HANDOFF_IOCTL_LEN 96 > > +#ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 > Can change to #if CONFIG_IS_ENABLED() > > > > +#define SOC64_HANDOFF_FPGA_LEN 42 > > +#else > > +#define SOC64_HANDOFF_FPGA_LEN 40 > > +#endif > > +#define SOC64_HANDOFF_DELAY_LEN 96 > > + > > +#ifndef __ASSEMBLY__ > > +#include <asm/types.h> > > +enum endianness { > > + little_endian, > > + big_endian > > +}; > Uses capital letter for enum macros. > > > + > > +int socfpga_get_handoff_size(void *handoff_address, enum endianness > > +endian); int socfpga_handoff_read(void *handoff_address, void *table, > > u32 table_len, > > + enum endianness big_endian); > > +#endif > > #endif /* _HANDOFF_SOC64_H_ */ > > diff --git a/arch/arm/mach- > socfpga/include/mach/system_manager_soc64.h > > b/arch/arm/mach-socfpga/include/mach/system_manager_soc64.h > > index 4949cae97a..1eb8e7a904 100644 > > --- a/arch/arm/mach-socfpga/include/mach/system_manager_soc64.h > > +++ b/arch/arm/mach-socfpga/include/mach/system_manager_soc64.h > > @@ -10,10 +10,6 @@ > > void sysmgr_pinmux_init(void); > > void populate_sysmgr_fpgaintf_module(void); > > void populate_sysmgr_pinmux(void); > > -void sysmgr_pinmux_table_sel(const u32 **table, unsigned int > > *table_len); -void sysmgr_pinmux_table_ctrl(const u32 **table, > > unsigned int *table_len); -void sysmgr_pinmux_table_fpga(const u32 > > **table, unsigned int *table_len); -void > > sysmgr_pinmux_table_delay(const u32 **table, unsigned int *table_len); > > > > #define SYSMGR_SOC64_WDDBG 0x08 > > #define SYSMGR_SOC64_DMA 0x20 > > [...] > > > diff --git a/arch/arm/mach-socfpga/wrap_handoff_soc64.c > > b/arch/arm/mach-socfpga/wrap_handoff_soc64.c > > new file mode 100644 > > index 0000000000..ba168676e9 > > --- /dev/null > > +++ b/arch/arm/mach-socfpga/wrap_handoff_soc64.c > > @@ -0,0 +1,73 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > +/* > > + * Copyright (C) 2020 Intel Corporation <www.intel.com> > > + * > > + */ > > + > > +#include <common.h> > > +#include <asm/arch/handoff_soc64.h> > > +#include <asm/io.h> > > +#include <errno.h> > > +#include "log.h" > Sort this. > > > > + > > +int socfpga_get_handoff_size(void *handoff_address, enum endianness > > +endian) { > > + u32 handoff_size; > > + > > + if (endian == little_endian) { > > + handoff_size = (readl(handoff_address + > > SOC64_HANDOFF_OFFSET_LENGTH) - > > + SOC64_HANDOFF_OFFSET_DATA) / > > + sizeof(u32); > > + } else if (endian == big_endian) { > > + handoff_size = swab32(readl(handoff_address + > > + > Can merge this, just need do additional swab32 if it is bit endian. > > > [.....] > > > > + > > +int socfpga_handoff_read(void *handoff_address, void *table, u32 > > table_len, > > + enum endianness big_endian) > > +{ > > + u32 temp, i; > > + u32 *table_x32 = table; > > + > > + debug("%s: handoff addr = 0x%p ", __func__, (u32 > > *)handoff_address); > > + > > + if (big_endian) { > > + if (swab32(readl(SOC64_HANDOFF_BASE)) == > > SOC64_HANDOFF_MAGIC_BOOT) { > > + debug("Handoff table address = 0x%p ", table_x32); > > + debug("table length = 0x%x\n", table_len); > > + debug("%s: handoff data =\n{\n", __func__); > > + > > + for (i = 0; i < table_len; i++) { > > + temp = readl(handoff_address + > > + SOC64_HANDOFF_OFFSET_DATA + > > + (i * sizeof(u32))); > > + *table_x32 = swab32(temp); > > + > > + if (!(i % 2)) > > + debug(" No.%d Addr 0x%08x: ", i, > > + *table_x32); > > + else > > + debug(" 0x%08x\n", *table_x32); > > + > > + table_x32++; > > + } > > + debug("\n}\n"); > > + } else { > > + debug("%s: Cannot find > > SOC64_HANDOFF_MAGIC_BOOT ", __func__); > > + debug("at addr 0x%p\n", (u32 *)handoff_address); > > + return -EPERM; > > + } > > + } > How about if it is little endian, why don't need to fill up table_x32? > The little endian only needed in new Intel SOC N5X (Diamond Mesa) , we will upstream this part together with N5X patches later.
And, I will update the code per comment above in next review. Thanks. > > > Regards > Ley Foon