# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2018, Luca Ceresoli <luca@lucaceresoli.net>

if ARCH_ZYNQ || ARCH_ZYNQMP

config XILINX_PS_INIT_FILE
	string "Zynq/ZynqMP PS init file(s) location"
	help
	  On Zynq and ZynqMP U-Boot SPL (or U-Boot proper if
	  ZYNQMP_PSU_INIT_ENABLED is set) is responsible for some
	  basic initializations, such as enabling peripherals and
	  configuring pinmuxes. The PS init file (called
	  psu_init_gpl.c on ZynqMP, ps7_init_gpl.c for Zynq-7000)
	  contains the code for such initializations.

	  U-Boot contains PS init files for some boards, but each of
	  them describes only one specific configuration. Users of a
	  different board, or needing a different configuration, can
	  generate custom files using the Xilinx development tools.

	  There are three ways to give a PS init file to U-Boot:

	  1. Set this variable to the path, either relative to the
	     source tree or absolute, where the psu_init_gpl.c or
	     ps7_init_gpl.c file is located. U-Boot will build this
	     file.

	  2. If you leave an empty string here, U-Boot will use
	     board/xilinx/zynq/$(CONFIG_DEFAULT_DEVICE_TREE)/ps7_init_gpl.c
	     for Zynq-7000, or
	     board/xilinx/zynqmp/$(CONFIG_DEFAULT_DEVICE_TREE)/psu_init_gpl.c
	     for ZynqMP.

	  3. If the above file does not exist, U-Boot will use
	     board/xilinx/zynq/ps7_init_gpl.c for Zynq-7000, or
	     board/xilinx/zynqmp/psu_init_gpl.c for ZynqMP. This file
	     is not provided by U-Boot, you have to copy it there
	     before the build.

endif

config XILINX_OF_BOARD_DTB_ADDR
	hex "Default DTB pickup address"
	default 0x1000 if ARCH_VERSAL || ARCH_VERSAL_NET || ARCH_VERSAL2
	default 0x8000 if MICROBLAZE
	default 0x100000 if ARCH_ZYNQ || ARCH_ZYNQMP
	default 0x83000000 if TARGET_XILINX_MBV
	depends on OF_BOARD || OF_SEPARATE
	help
	  Offset in the memory where the board configuration DTB is placed.

config BOOT_SCRIPT_OFFSET
	hex "Boot script offset"
	depends on ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL || ARCH_VERSAL_NET || ARCH_VERSAL2 || MICROBLAZE || TARGET_XILINX_MBV
	default 0xFC0000 if ARCH_ZYNQ || MICROBLAZE
	default 0x3E80000 if ARCH_ZYNQMP
	default 0x7F80000 if ARCH_VERSAL || ARCH_VERSAL_NET || ARCH_VERSAL2
	default 0 if TARGET_XILINX_MBV
	help
	   Specifies distro boot script offset in NAND/QSPI/NOR flash.

config CMD_FRU
	bool "FRU information for product"
	help
	  This option enables FRU commands to capture and display 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.
