# 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
	default 0x100000 if ARCH_ZYNQ || ARCH_ZYNQMP
	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 || MICROBLAZE
	default 0xFC0000 if ARCH_ZYNQ || MICROBLAZE
	default 0x3E80000 if ARCH_ZYNQMP
	default 0x7F80000 if ARCH_VERSAL
	help
	   Specifies distro boot script offset in NAND/QSPI/NOR flash.

config ZYNQ_MAC_IN_EEPROM
	bool "Reading MAC address from EEPROM"
	help
	  Enable this option if your MAC address is saved in eeprom and
	  xlnx,eeprom DT property in chosen node points to it.

if ZYNQ_MAC_IN_EEPROM

config ZYNQ_GEM_I2C_MAC_OFFSET
	hex "Set the I2C MAC offset"
	default 0x0
	depends on DM_I2C
	help
	  Set the MAC offset for i2C.

endif

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.
