
Introduce the support for three variants of Enclustra's Intel Mercury AA1 (with Intel Arria10) SoMs and additional configs. This is supposed to be the first step to upstream several of Enclustras SoC FPGA Modules. There are still things to be modified. So, this is supposed to start the discussion and also to clarify some of my open issues. I verified boot on SD card and emmc is booting, as also checkpatch is mostly fine and I hope the git comments are reasonable.
Open Issues I still have:
- checkpatch.pl: CONFIG options for env settings in include/configs/socfpga_mercury_aa1.h show up as error at checkpatch.pl. Additionally an env file as demo is provided, along with instructions. Although, I noticed, when providing a uboot.env file as binary, this replaces the default (socfpga) environment. Is there a way to just append some settings by a compiled uboot.env? As this happens to be, when declared in include/configs. Also other boards (still) used to have settings in board header files in include/configs. So, do I need to remove CONFIG_ entries in this file, or may it be acceptable?
- MAC address from secure eeprom: The implementation does not bring in a new driver. It uses actually the ATSHA204a driver following DM and already existing in uboot. Function is verified. Is this usage ok?
- Si53338 driver: This is a new clock generator driver with partly generated code. To be honest, I'm not sure if this should be even be upstreamed. Fact is, the SoMs work w/o this driver. Optional features may need that driver on the system later. It's a nice to have, but also quite specific.
- DT: We don't have upstream kernel DT fragments, so that's also why we still use the classic location here. The bigger problem is, I have 3x (slightly) different AA1 modules. All can be combined with three different baseboards. Most of those combinations support several bootmodes (SD, eMMC, QSPI) with yet another .dtsi fragment. What is the best way to deal with this situation? For sure I don't like to bring in all combinations as particular new DT setups. Hence, the current approach is to have a top level "enclustra-aa1.dts" including particular .dtsi elements. In combination then using .dtbos and a boot.scr approach. I feel a fit image can be part of the solution, but I'm unsure. I'm unsure if this is part of the BSP later, say a yocto setup, or part of the bootloader. Is it enough to just provide the .dtsi elementst or also an .its file for a demo? In the documentation .rst file currently I refere to the described. Do I need to improve this setup, and what would be the desired approach for this situation?
- uImage: uImage was the classic approach at Enclustra. Anyway this goes into the same direction as above: A more advanced approach would involve a fit image, as e.g. the "image.ub" Xilinx is doing. But is this needed? Doesn't it also depend on the specific customer and project? Hence, a similar question, is there anything missing? What would be additionally needed? Or, is the current setup is enough?
- Maintainer: checkpatch.pl complains about a missing maintainer entry for the new board. So, I registered myself, since I have access to this hardware. Unsure here, please let me know how to procede.
Lothar Rubusch (9): doc: board: enclustra: add Enclustra Intel AA1 SoM ARM: dts: socfpga: add Enclustra Intel AA1 ARM: socfpga: add Enclustra AA1 SoM support ARM: socfpga: add Enclustra AA1 extra env settings ARM: socfpga: add Enclustra AA1 demo env files ARM: socfpga: add Enclustra AA1 boot scripts ARM: socfpga: AA1: support MAC from secure eeprom ARM: socfpga: add si5338 clock generator support ARM: socfpga: make AA1 use si5338 clock gen
arch/arm/dts/ME-AA1-270-2I2-D11E-NFX3.dtsi | 14 + arch/arm/dts/ME-AA1-270-3E4-D11E-NFX3.dtsi | 14 + arch/arm/dts/ME-AA1-480-2I3-D12E-NFX3.dtsi | 15 + arch/arm/dts/Makefile | 2 + arch/arm/dts/enclustra-aa1.dts | 32 ++ .../dts/socfpga_arria10_mercury_aa1_handoff.h | 307 ++++++++++++ .../dts/socfpga_enclustra_mercury_aa1.dtsi | 179 +++++++ ...cfpga_enclustra_mercury_aa1_qspi_boot.dtsi | 18 + ...fpga_enclustra_mercury_aa1_sdmmc_boot.dtsi | 18 + .../dts/socfpga_enclustra_mercury_pe1.dtsi | 7 + .../dts/socfpga_enclustra_mercury_pe3.dtsi | 8 + .../dts/socfpga_enclustra_mercury_st1.dtsi | 8 + arch/arm/mach-socfpga/Kconfig | 9 + board/enclustra/bootscripts/qspi-aa1.cmd | 12 + board/enclustra/bootscripts/sd-aa1.cmd | 10 + board/enclustra/common/Kconfig | 24 + board/enclustra/common/Makefile | 7 + board/enclustra/common/enclustra_mac.h | 48 ++ board/enclustra/common/mac_atsha204.c | 97 ++++ board/enclustra/common/mac_common.c | 54 +++ board/enclustra/common/mac_ds28.c | 88 ++++ board/enclustra/mercury_aa1/Kconfig | 15 + board/enclustra/mercury_aa1/MAINTAINERS | 10 + board/enclustra/mercury_aa1/Makefile | 4 + board/enclustra/mercury_aa1/bitstream.its | 32 ++ board/enclustra/mercury_aa1/mercury_aa1.c | 199 ++++++++ board/enclustra/mercury_aa1/mercury_aa1.env | 65 +++ .../socfpga_enclustra_mercury_aa1_defconfig | 81 ++++ doc/board/enclustra/index.rst | 9 + doc/board/enclustra/mercury-aa1.rst | 209 +++++++++ doc/board/index.rst | 1 + drivers/clk/Kconfig | 1 + drivers/clk/Makefile | 1 + drivers/clk/skyworks/Kconfig | 10 + drivers/clk/skyworks/Makefile | 3 + drivers/clk/skyworks/Si5338-RevB-Registers.h | 441 ++++++++++++++++++ drivers/clk/skyworks/si5338_clkgen.c | 177 +++++++ drivers/clk/skyworks/si5338_clkgen.h | 18 + drivers/misc/Kconfig | 2 +- include/configs/socfpga_mercury_aa1.h | 68 +++ 40 files changed, 2316 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/ME-AA1-270-2I2-D11E-NFX3.dtsi create mode 100644 arch/arm/dts/ME-AA1-270-3E4-D11E-NFX3.dtsi create mode 100644 arch/arm/dts/ME-AA1-480-2I3-D12E-NFX3.dtsi create mode 100644 arch/arm/dts/enclustra-aa1.dts create mode 100644 arch/arm/dts/socfpga_arria10_mercury_aa1_handoff.h create mode 100644 arch/arm/dts/socfpga_enclustra_mercury_aa1.dtsi create mode 100644 arch/arm/dts/socfpga_enclustra_mercury_aa1_qspi_boot.dtsi create mode 100644 arch/arm/dts/socfpga_enclustra_mercury_aa1_sdmmc_boot.dtsi create mode 100644 arch/arm/dts/socfpga_enclustra_mercury_pe1.dtsi create mode 100644 arch/arm/dts/socfpga_enclustra_mercury_pe3.dtsi create mode 100644 arch/arm/dts/socfpga_enclustra_mercury_st1.dtsi create mode 100644 board/enclustra/bootscripts/qspi-aa1.cmd create mode 100644 board/enclustra/bootscripts/sd-aa1.cmd create mode 100644 board/enclustra/common/Kconfig create mode 100644 board/enclustra/common/Makefile create mode 100644 board/enclustra/common/enclustra_mac.h create mode 100644 board/enclustra/common/mac_atsha204.c create mode 100644 board/enclustra/common/mac_common.c create mode 100644 board/enclustra/common/mac_ds28.c create mode 100644 board/enclustra/mercury_aa1/Kconfig create mode 100644 board/enclustra/mercury_aa1/MAINTAINERS create mode 100644 board/enclustra/mercury_aa1/Makefile create mode 100644 board/enclustra/mercury_aa1/bitstream.its create mode 100644 board/enclustra/mercury_aa1/mercury_aa1.c create mode 100644 board/enclustra/mercury_aa1/mercury_aa1.env create mode 100644 configs/socfpga_enclustra_mercury_aa1_defconfig create mode 100644 doc/board/enclustra/index.rst create mode 100644 doc/board/enclustra/mercury-aa1.rst create mode 100644 drivers/clk/skyworks/Kconfig create mode 100644 drivers/clk/skyworks/Makefile create mode 100644 drivers/clk/skyworks/Si5338-RevB-Registers.h create mode 100644 drivers/clk/skyworks/si5338_clkgen.c create mode 100644 drivers/clk/skyworks/si5338_clkgen.h create mode 100644 include/configs/socfpga_mercury_aa1.h