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

if BOARD_AMD_BIRMAN_GLINDA || BOARD_AMD_BIRMAN_PHOENIX

config BOARD_SPECIFIC_OPTIONS
	def_bool y
	select BOARD_ROMSIZE_KB_16384	# Birman actually has a 32MiB ROM
	select EC_ACPI
	select SOC_AMD_COMMON_BLOCK_USE_ESPI if !SOC_AMD_COMMON_BLOCK_SIMNOW_BUILD
	select DRIVERS_PCIE_RTD3_DEVICE
	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 if !SOC_AMD_COMMON_BLOCK_SIMNOW_BUILD
	select SOC_AMD_COMMON_BLOCK_SIMNOW_SUPPORTED
	select SPI_FLASH_EXIT_4_BYTE_ADDR_MODE

config FMDFILE
	default "src/mainboard/amd/birman/chromeos_glinda.fmd" if CHROMEOS && BOARD_AMD_BIRMAN_GLINDA
	default "src/mainboard/amd/birman/chromeos_phoenix.fmd" if CHROMEOS && BOARD_AMD_BIRMAN_PHOENIX
	default "src/mainboard/amd/birman/board_glinda.fmd" if BOARD_AMD_BIRMAN_GLINDA
	default "src/mainboard/amd/birman/board_phoenix.fmd"

config MAINBOARD_DIR
	default "amd/birman"

config MAINBOARD_PART_NUMBER
	default "Birman_Glinda" if BOARD_AMD_BIRMAN_GLINDA
	default "Birman_Phoenix"

config DEVICETREE
	default "devicetree_glinda.cb" if BOARD_AMD_BIRMAN_GLINDA
	default "devicetree_phoenix.cb"

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

config BIRMAN_MCHP_SIG_FILE
	string "Microchip EC signature file"
	depends on BIRMAN_HAVE_MCHP_FW
	default "3rdparty/blobs/mainboard/amd/birman/EC_birman_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 AMD_SOC_CONSOLE_UART
	default y if !SOC_AMD_COMMON_BLOCK_SIMNOW_BUILD

config BIRMAN_MCHP_FW_FILE
	string "Microchip EC firmware file"
	depends on BIRMAN_HAVE_MCHP_FW
	default "3rdparty/blobs/mainboard/amd/birman/EC_birman.bin"
	help
	  The EC firmware blob is at the EC_BODY FMAP region of the firmware image.

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 birman-specific override of soc/amd/(phoenix | glinda)/Kconfig
	default "apu/amdfw apu/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

config ENABLE_EVAL_CARD
	bool "Enable Eval Card"
	help
	  Enable the Eval Card PCIe slot

config ENABLE_EVAL_19V
	bool "Enable 19V rail for Eval Card"
	depends on ENABLE_EVAL_CARD
	help
	  Enable the 19V rail for Eval Card PCIe slot

choice
	prompt "DT SLOT/M.2 SSD1 ENABLE"
	default ENABLE_DT_SLOT
	help
	  Either DT slot or M.2 SSD1 can be used, as they are sharing PCIe lanes.

config ENABLE_DT_SLOT
	bool "Enable DT slot"

config ENABLE_M2_SSD1
	bool "Enable M.2 SSD1"

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

endchoice

choice
	prompt "WLAN/WWAN Selection"
	default WLAN0_WWAN0
	help
	  WLAN and WWAN lane configuration

config WLAN0_WWAN0
	bool "Both WLAN and WWAN Enabled (1 lane each)"

config WLAN01
	bool "Only WLAN Enabled (2 lanes WLAN, 0 lanes WWAN)"

config WWAN01
	bool "Only WWAN Enabled (2 lanes WWAN, 0 lanes WLAN)"

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_BIRMAN_GLINDA || BOARD_AMD_BIRMAN_PHOENIX
