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

config BOARD_AMD_BIRMAN_PHOENIX
	select SOC_AMD_PHOENIX

config BOARD_AMD_BIRMAN_GLINDA
	select SOC_AMD_GLINDA

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
