# SPDX-License-Identifier: GPL-2.0-only

if BOARD_AMD_MAYAN_PHOENIX

config BOARD_SPECIFIC_OPTIONS
	def_bool y
	select BOARD_ROMSIZE_KB_16384	# Mayan actually has a 32MiB ROM
	select EC_ACPI
	select SOC_AMD_COMMON_BLOCK_USE_ESPI
	select AMD_SOC_CONSOLE_UART
	select MAINBOARD_HAS_CHROMEOS
	select PCIEXP_ASPM
	select PCIEXP_CLK_PM
	select PCIEXP_COMMON_CLOCK
	select PCIEXP_L1_SUB_STATE
	select SOC_AMD_COMMON_BLOCK_ESPI_RETAIN_PORT80_EN
	select SOC_AMD_PHOENIX

config FMDFILE
	default "src/mainboard/amd/mayan/chromeos.fmd" if CHROMEOS
	default "src/mainboard/amd/mayan/board.fmd"

config MAINBOARD_DIR
	default "amd/mayan"

config MAINBOARD_PART_NUMBER
	default "Mayan_Phoenix"

config DEVICETREE
	default "devicetree_phoenix.cb"

config MAYAN_HAVE_MCHP_FW
	bool "Have Microchip EC firmware?"
	default n

config MAYAN_MCHP_SIG_FILE
	string "Microchip EC signature file"
	depends on MAYAN_HAVE_MCHP_FW
	default "3rdparty/blobs/mainboard/amd/mayan/EC_mayan_sig.bin"
	help
	  The EC sig blob is the first 4kBytes of the firmware image.
	  The first 4 bytes form a pointer (with CRC) to where the EC firmware
	  is located

config MAYAN_MCHP_FW_FILE
	string "Microchip EC firmware file"
	depends on MAYAN_HAVE_MCHP_FW
	default "3rdparty/blobs/mainboard/amd/mayan/EC_mayan.bin"
	help
	  The EC firmware blob is at the MAYAN_MCHP_FW_OFFSET offset of the
	  firmware image.

config MAYAN_MCHP_FW_OFFSET
	hex
	depends on MAYAN_HAVE_MCHP_FW
	default 0x81000
	help
	  The EC firmware blob defaults to the 4MByte offset of the firmware
	  image. If this offset needs to change, a new signature block must be
	  generated with the updated offset.

config VBOOT
	select VBOOT_NO_BOARD_SUPPORT
	select VBOOT_SEPARATE_VERSTAGE
	select VBOOT_STARTS_IN_BOOTBLOCK

config VBOOT_VBNV_OFFSET
	hex
	default 0x2A

config RO_REGION_ONLY
	string
	depends on VBOOT_SLOTS_RW_AB || VBOOT_SLOTS_RW_A
	# Add the EFS and EC to the RO region only
	# This is a mayan-specific override of soc/amd/phoenix/Kconfig
	default "apu/amdfw ec/ecfw"

config CHROMEOS
	# Use default libpayload config
	select LP_DEFCONFIG_OVERRIDE if PAYLOAD_DEPTHCHARGE
	# We don't have recovery buttons, so we can't manually enable devmode.
	select GBB_FLAG_FORCE_DEV_SWITCH_ON

choice
	prompt "DT SLOT/M.2 SSD1 ENABLE"
	default ENABLE_DT_SLOT_MAYAN
	help
	  Either DT slot or M.2 SSD1 can be used to boot on Mayan,
	  as they are sharing IO lanes.

config ENABLE_DT_SLOT_MAYAN
	bool "Enable DT slot"

config ENABLE_M2_SSD1_MAYAN
	bool "Enable M.2 SSD1"

config DISABLE_DT_M2_MAYAN
	bool "Disable both DT and M.2 slot"

endchoice

if !EM100	# EM100 defaults in soc/amd/common/blocks/spi/Kconfig
config EFS_SPI_READ_MODE
	default 3	# Quad IO (1-1-4)

config EFS_SPI_SPEED
	default 0	# 66MHz

config EFS_SPI_MICRON_FLAG
	default 0

config NORMAL_READ_SPI_SPEED
	default 1	# 33MHz

config ALT_SPI_SPEED
	default 1	# 33MHz

config TPM_SPI_SPEED
	default 1	# 33MHz

endif # !EM100

endif # BOARD_AMD_MAYAN_PHOENIX
