This is an old revision of the document!


Show the result of doing a configuration, using Xilinx ZCU102 Rev 1.0 as an example.

Preliminary:

CONFIG_ARM=y
...
CONFIG_SYS_ARCH="arm"
CONFIG_SYS_CPU="armv8"
CONFIG_SYS_SOC="zynqmp"
CONFIG_SYS_VENDOR="xilinx"
CONFIG_SYS_BOARD="zynqmp"
CONFIG_SYS_CONFIG_NAME="xilinx_zynqmp"
...
CONFIG_ARM64=y
CONFIG_SYS_ARM_ARCH=8
...
# CONFIG_ARCH_ZYNQ is not set
# CONFIG_ARCH_ZYNQMP_R5 is not set
CONFIG_ARCH_ZYNQMP=y

zynq-related:

$ grep -i zynq .config
CONFIG_SYS_SOC="zynqmp"
CONFIG_SYS_BOARD="zynqmp"
CONFIG_SYS_CONFIG_NAME="xilinx_zynqmp"
# CONFIG_ARCH_ZYNQ is not set
# CONFIG_ARCH_ZYNQMP_R5 is not set
CONFIG_ARCH_ZYNQMP=y
CONFIG_ZYNQ_SDHCI_MAX_FREQ=200000000
CONFIG_ZYNQMP_SPL_PM_CFG_OBJ_FILE=""
CONFIG_ZYNQMP_USB=y
# CONFIG_ZYNQMP_NO_DDR is not set
# CONFIG_ZYNQMP_PSU_INIT_ENABLED is not set
# CONFIG_SPL_ZYNQMP_ALT_BOOTMODE_ENABLED is not set
# CONFIG_SPL_ZYNQMP_TWO_SDHCI is not set
CONFIG_CMD_ZYNQMP=y
CONFIG_SMBIOS_PRODUCT_NAME="zynqmp"
CONFIG_SYS_PROMPT="ZynqMP> "
CONFIG_DEFAULT_DEVICE_TREE="zynqmp-zcu102-rev1.0"
CONFIG_OF_LIST="zynqmp-zcu102-rev1.0"
CONFIG_CLK_ZYNQMP=y
CONFIG_ZYNQMP_FIRMWARE=y
CONFIG_FPGA_ZYNQMPPL=y
CONFIG_ZYNQ_GPIO=y
CONFIG_ZYNQMP_IPI=y
CONFIG_ZYNQ_GEM_I2C_MAC_OFFSET=0x20
CONFIG_MMC_SDHCI_ZYNQ=y
CONFIG_ZYNQ_SDHCI_MIN_FREQ=0
# CONFIG_ZYNQ_HISPD_BROKEN is not set
CONFIG_ZYNQ_GEM=y
CONFIG_DEBUG_UART_ZYNQ=y
CONFIG_ZYNQ_SERIAL=y
# CONFIG_ZYNQ_SPI is not set
CONFIG_ZYNQMP_GQSPI=y

Files and directories that contribute to the final configuration of a Xilinx ZCU102 (not necessarily a complete list):

  • Makefile
  • config.mk
  • configs/
    • xilinx_zynqmp_zcu102_rev1_0_defconfig
  • include/
    • configs/
      • xilinx-zynqmp.h
  • arch/
    • arm/
      • Makefile
      • Kconfig
      • config.mk
      • mach-zynqmp/
        • Makefile
        • Kconfig
        • include/
      • cpu/
        • armv8/
      • dts/
        • zynqmp-zcu102-rev1.0.dts
  • board/
    • xilinx/
      • Makefile
      • common/
        • board.c
      • zynqmp/
        • Makefile
        • Kconfig
...
export ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
...
ifeq ($(autoconf_is_old),)
include config.mk
include arch/$(ARCH)/Makefile
endif
...
ARCH := $(CONFIG_SYS_ARCH:"%"=%)
CPU := $(CONFIG_SYS_CPU:"%"=%)
ifdef CONFIG_SPL_BUILD
ifdef CONFIG_TEGRA
CPU := arm720t
endif
endif
BOARD := $(CONFIG_SYS_BOARD:"%"=%)
ifneq ($(CONFIG_SYS_VENDOR),)
VENDOR := $(CONFIG_SYS_VENDOR:"%"=%)
endif
ifneq ($(CONFIG_SYS_SOC),)
SOC := $(CONFIG_SYS_SOC:"%"=%)
endif

# Some architecture config.mk files need to know what CPUDIR is set to,
# so calculate CPUDIR before including ARCH/SOC/CPU config.mk files.
# Check if arch/$ARCH/cpu/$CPU exists, otherwise assume arch/$ARCH/cpu contains
# CPU-specific code.
CPUDIR=arch/$(ARCH)/cpu$(if $(CPU),/$(CPU),)

sinclude $(srctree)/arch/$(ARCH)/config.mk      # include architecture dependend rules
sinclude $(srctree)/$(CPUDIR)/config.mk         # include  CPU  specific rules

ifdef   SOC
sinclude $(srctree)/$(CPUDIR)/$(SOC)/config.mk  # include  SoC  specific rules
endif
ifneq ($(BOARD),)
ifdef   VENDOR
BOARDDIR = $(VENDOR)/$(BOARD)
else
BOARDDIR = $(BOARD)
endif
endif
ifdef   BOARD
sinclude $(srctree)/board/$(BOARDDIR)/config.mk # include board specific rules
endif
CONFIG_ARM=y
CONFIG_ARCH_ZYNQ=y
... much more ...

zynq-common.h

Consulted from arch/arm/mach-zynq/Kconfig.

config SYS_ARCH
        default "arm"

... snip ...

config ARCH_ZYNQ
        bool "Xilinx Zynq based platform"
        select BOARD_EARLY_INIT_F if WDT
        select CLK
        select CLK_ZYNQ
        select CPU_V7A
        select DM
        select DM_ETH if NET
        select DM_MMC if MMC
        select DM_SERIAL
        select DM_SPI
        select DM_SPI_FLASH
        select DM_USB if USB
        select OF_CONTROL
        select SPI
        select SPL_BOARD_INIT if SPL
        select SPL_CLK if SPL
        select SPL_DM if SPL
        select SPL_OF_CONTROL if SPL
        select SPL_SEPARATE_BSS if SPL
        select SUPPORT_SPL
        imply ARCH_EARLY_INIT_R
        imply BOARD_LATE_INIT
        imply CMD_CLK
        imply CMD_DM
        imply CMD_SPL
        imply FAT_WRITE
        
... snip ...
machine-$(CONFIG_ARCH_ZYNQ)             += zynq
machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
head-y := arch/arm/cpu/$(CPU)/start.o
...
libs-y += arch/arm/cpu/$(CPU)/
libs-y += arch/arm/cpu/
libs-y += arch/arm/lib/

Kconfig

config SYS_BOARD
        string "Board name"
        default "zynq"

config SYS_VENDOR
        string "Vendor name"
        default "xilinx"

config SYS_SOC
        default "zynq"

config SYS_CONFIG_NAME
        string "Board configuration name"
        default "zynq-common"
        help
          This option contains information about board configuration name.
          Based on this option include/configs/<CONFIG_SYS_CONFIG_NAME>.h header
          will be used for board configuration.

In addition to generating the appropriate .config file, you can go one step further and produce the subsequent u-boot.cfg file with:

$ make cfg

Relevant entries that define the remainder of the build:

#define CONFIG_SYS_CPU "armv7"
#define CONFIG_SYS_CONFIG_NAME "zynq-common"
#define CONFIG_BOARDDIR board/xilinx/zynq
#define CONFIG_CPU_V7A 1
#define CONFIG_SYS_VENDOR "xilinx"
#define CONFIG_SYS_ARCH "arm"
#define CONFIG_SYS_BOARD "zynq"
#define CONFIG_SYS_ARM_ARCH 7
#define CONFIG_ARM 1
#define CONFIG_ARCH_ZYNQ 1
  • u-boot_configuration.1577345613.txt.gz
  • Last modified: 2019/12/26 07:33
  • by rpjday