# 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
	default 0x8000 if MICROBLAZE
	default 0x100000 if ARCH_ZYNQ || ARCH_ZYNQMP
	default 0x23000000 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 || MICROBLAZE || TARGET_XILINX_MBV
	default 0xFC0000 if ARCH_ZYNQ || MICROBLAZE
	default 0x3E80000 if ARCH_ZYNQMP
	default 0x7F80000 if ARCH_VERSAL || ARCH_VERSAL_NET
	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.
