if ARM64

config ARMV8_MULTIENTRY
        bool "Enable multiple CPUs to enter into U-Boot"

config ARMV8_SET_SMPEN
        bool "Enable data coherency with other cores in cluster"
        help
	  Say Y here if there is not any trust firmware to set
	  CPUECTLR_EL1.SMPEN bit before U-Boot.

	  For A53, it enables data coherency with other cores in the
	  cluster, and for A57/A72, it enables receiving of instruction
	  cache and TLB maintenance operations.
	  Cortex A53/57/72 cores require CPUECTLR_EL1.SMPEN set even
	  for single core systems. Unfortunately write access to this
	  register may be controlled by EL3/EL2 firmware. To be more
	  precise, by default (if there is EL2/EL3 firmware running)
	  this register is RO for NS EL1.
	  This switch can be used to avoid writing to CPUECTLR_EL1,
	  it can be safely enabled when EL2/EL3 initialized SMPEN bit
	  or when CPU implementation doesn't include that register.

config ARMV8_SPIN_TABLE
	bool "Support spin-table enable method"
	depends on ARMV8_MULTIENTRY && OF_LIBFDT
	help
	  Say Y here to support "spin-table" enable method for booting Linux.

	  To use this feature, you must do:
	    - Specify enable-method = "spin-table" in each CPU node in the
	      Device Tree you are using to boot the kernel
	    - Bring secondary CPUs into U-Boot proper in a board specific
	      manner.  This must be done *after* relocation.  Otherwise, the
	      secondary CPUs will spin in unprotected memory area because the
	      master CPU protects the relocated spin code.

	  U-Boot automatically does:
	    - Set "cpu-release-addr" property of each CPU node
	      (overwrites it if already exists).
	    - Reserve the code for the spin-table and the release address
	      via a /memreserve/ region in the Device Tree.

menu "ARMv8 secure monitor firmware"
config ARMV8_SEC_FIRMWARE_SUPPORT
	bool "Enable ARMv8 secure monitor firmware framework support"
	select OF_LIBFDT
	select FIT
	help
	  This framework is aimed at making secure monitor firmware load
	  process brief.
	  Note: Only FIT format image is supported.
	  You should prepare and provide the below information:
	    - Address of secure firmware.
	    - Address to hold the return address from secure firmware.
	    - Secure firmware FIT image related information.
	      Such as: SEC_FIRMWARE_FIT_IMAGE and SEC_FIRMEWARE_FIT_CNF_NAME
	    - The target exception level that secure monitor firmware will
	      return to.

config SPL_ARMV8_SEC_FIRMWARE_SUPPORT
	bool "Enable ARMv8 secure monitor firmware framework support for SPL"
	select SPL_OF_LIBFDT
	select SPL_FIT
	help
	  Say Y here to support this framework in SPL phase.

config SEC_FIRMWARE_ARMV8_PSCI
	bool "PSCI implementation in secure monitor firmware"
	depends on ARMV8_SEC_FIRMWARE_SUPPORT || SPL_ARMV8_SEC_FIRMWARE_SUPPORT
	help
	  This config enables the ARMv8 PSCI implementation in secure monitor
	  firmware. This is a private PSCI implementation and different from
	  those implemented under the common ARMv8 PSCI framework.

config ARMV8_SEC_FIRMWARE_ERET_ADDR_REVERT
	bool "ARMv8 secure monitor firmware ERET address byteorder swap"
	depends on ARMV8_SEC_FIRMWARE_SUPPORT || SPL_ARMV8_SEC_FIRMWARE_SUPPORT
	help
	  Say Y here when the endianness of the register or memory holding the
	  Secure firmware exception return address is different with core's.

endmenu

config PSCI_RESET
	bool "Use PSCI for reset and shutdown"
	default y
	depends on !ARCH_EXYNOS7 && !ARCH_BCM283X && !TARGET_LS2080A_EMU && \
		   !TARGET_LS2080A_SIMU && !TARGET_LS2080AQDS && \
		   !TARGET_LS2080ARDB && !TARGET_LS1012AQDS && \
		   !TARGET_LS1012ARDB && !TARGET_LS1012AFRDM && \
		   !TARGET_LS1043ARDB && !TARGET_LS1043AQDS && \
		   !TARGET_LS1046ARDB && !TARGET_LS1046AQDS && \
		   !ARCH_UNIPHIER && !ARCH_SNAPDRAGON && !TARGET_S32V234EVB && \
		   !ARCH_IMX8M
	help
	  Most armv8 systems have PSCI support enabled in EL3, either through
	  ARM Trusted Firmware or other firmware.

	  On these systems, we do not need to implement system reset manually,
	  but can instead rely on higher level firmware to deal with it.

	  Select Y here to make use of PSCI calls for system reset

config ARMV8_PSCI
	bool "Enable PSCI support" if EXPERT
	default n
	help
	  PSCI is Power State Coordination Interface defined by ARM.
	  The PSCI in U-boot provides a general framework and each platform
	  can implement their own specific PSCI functions.
	  Say Y here to enable PSCI support on ARMv8 platform.

config ARMV8_PSCI_NR_CPUS
	int "Maximum supported CPUs for PSCI"
	depends on ARMV8_PSCI
	default 4
	help
	  The maximum number of CPUs supported in the PSCI firmware.
	  It is no problem to set a larger value than the number of CPUs in
	  the actual hardware implementation.

config ARMV8_PSCI_CPUS_PER_CLUSTER
	int "Number of CPUs per cluster"
	depends on ARMV8_PSCI
	default 0
	help
	  The number of CPUs per cluster, suppose each cluster has same number
	  of CPU cores, platforms with asymmetric clusters don't apply here.
	  A value 0 or no definition of it works for single cluster system.
	  System with multi-cluster should difine their own exact value.

if SYS_HAS_ARMV8_SECURE_BASE

config ARMV8_SECURE_BASE
	hex "Secure address for PSCI image"
	depends on ARMV8_PSCI
	help
	  Address for placing the PSCI text, data and stack sections.
	  If not defined, the PSCI sections are placed together with the u-boot
	  but platform can choose to place PSCI code image separately in other
	  places such as some secure RAM built-in SOC etc.

endif

endif
