# SPDX-License-Identifier: GPL-2.0-or-later

config BOARD_GOOGLE_BASEBOARD_SKYRIM
	def_bool n

if BOARD_GOOGLE_BASEBOARD_SKYRIM

config AMD_FWM_POSITION_INDEX
	int
	default 3

config BOARD_SPECIFIC_OPTIONS
	def_bool y
	select AMD_SOC_CONSOLE_UART
	select BOARD_ROMSIZE_KB_16384
	select DISABLE_KEYBOARD_RESET_PIN
	select DISABLE_SPI_FLASH_ROM_SHARING
	select DRIVERS_GENERIC_GPIO_KEYS
	select DRIVERS_GENERIC_MAX98357A
	select DRIVERS_ACPI_THERMAL_ZONE
	select DRIVERS_I2C_GENERIC
	select DRIVERS_I2C_HID
	select DRIVERS_I2C_NAU8825
	select DRIVERS_USB_HUB
	select DRIVERS_UART_ACPI
	select DRIVERS_PCIE_RTD3_DEVICE
	select DRIVERS_PCIE_GENERIC
	select EC_GOOGLE_CHROMEEC
	select EC_GOOGLE_CHROMEEC_ESPI
	select EC_GOOGLE_CHROMEEC_SKUID
	select EC_GOOGLE_CHROMEEC_BOARDID
	select ELOG
	select ELOG_GSMI
	select FW_CONFIG
	select FW_CONFIG_SOURCE_CHROMEEC_CBI
	select GOOGLE_SMBIOS_MAINBOARD_VERSION
	select HAS_RECOVERY_MRC_CACHE
	select I2C_TPM
	select MAINBOARD_HAS_CHROMEOS
	select MAINBOARD_HAS_TPM2
	select MB_COMPRESS_RAMSTAGE_LZ4
	select SOC_AMD_MENDOCINO
	select SOC_AMD_COMMON_BLOCK_I2C3_TPM_SHARED_WITH_PSP
	select SOC_AMD_COMMON_BLOCK_USE_ESPI
	select SYSTEM_TYPE_LAPTOP
	select TPM_GOOGLE_TI50
	select PCIEXP_ASPM
	select PCIEXP_CLK_PM
	select PCIEXP_COMMON_CLOCK
	select PCIEXP_L1_SUB_STATE

config DEVICETREE
	default "variants/baseboard/devicetree.cb"

config DRIVER_TPM_I2C_BUS
	hex
	default 0x03

config DRIVER_TPM_I2C_ADDR
	hex
	default 0x50

config AMDFW_CONFIG_FILE
	string
	default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/amdfw.cfg"
	help
	  Custom firmware list excluding the fwTPM binary.

config HAVE_SPL_FILE
	bool
	default y

config SPL_TABLE_FILE
	string
	depends on HAVE_SPL_FILE
	default "3rdparty/blobs/mainboard/google/skyrim/TypeId0x55_SplTableBl_MDN_CHROME_RO.sbin"

config HAVE_SPL_RW_AB_FILE
	bool
	default y

config SPL_RW_AB_TABLE_FILE
	string
	depends on HAVE_SPL_RW_AB_FILE
	default "3rdparty/blobs/mainboard/google/skyrim/TypeId0x55_SplTableBl_MDN_CHROME.sbin"

config SOC_AMD_COMMON_BLOCK_PSP_FUSE_SPL
	default y if BOARD_GOOGLE_WINTERHOLD
	default y if BOARD_GOOGLE_FROSTFLOW
	default n

config FMDFILE
	default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/chromeos.fmd"

config MAINBOARD_DIR
	default "google/skyrim"

config MAINBOARD_FAMILY
	string
	default "Google_Skyrim"

config MAINBOARD_PART_NUMBER
	default "Skyrim" if BOARD_GOOGLE_SKYRIM
	default "Winterhold" if BOARD_GOOGLE_WINTERHOLD
	default "Frostflow" if BOARD_GOOGLE_FROSTFLOW
	default "Crystaldrift" if BOARD_GOOGLE_CRYSTALDRIFT
	default "Markarth" if BOARD_GOOGLE_MARKARTH

config OVERRIDE_DEVICETREE
	string
	default "variants/\$(CONFIG_VARIANT_DIR)/overridetree.cb"

config VARIANT_DIR
	string
	default "skyrim" if BOARD_GOOGLE_SKYRIM
	default "winterhold" if BOARD_GOOGLE_WINTERHOLD
	default "frostflow" if BOARD_GOOGLE_FROSTFLOW
	default "crystaldrift" if BOARD_GOOGLE_CRYSTALDRIFT
	default "markarth" if BOARD_GOOGLE_MARKARTH

config USE_VARIANT_DXIO_DESCRIPTOR
	bool
	default y if BOARD_GOOGLE_WINTERHOLD
	default n
	help
	  Enable this to allow a variant to override the dxio descriptor values
	  in port_descriptors.c

config VBOOT
	select EC_GOOGLE_CHROMEEC_SWITCHES
	select VBOOT_LID_SWITCH
	select VBOOT_SEPARATE_VERSTAGE

config VBOOT_STARTS_BEFORE_BOOTBLOCK
	bool "Enable PSP_verstage"
	default y if VBOOT
	select SEPARATE_SIGNED_PSPFW

config VBOOT_STARTS_IN_BOOTBLOCK
	bool
	default y if VBOOT && !VBOOT_STARTS_BEFORE_BOOTBLOCK

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

config EFS_SPI_SPEED
	default 4 if BOARD_GOOGLE_WINTERHOLD
	default 0	# 66MHz

config EFS_SPI_MICRON_FLAG
	default 0

config NORMAL_READ_SPI_SPEED
	default 1	# 33MHz

config ALT_SPI_SPEED
	default 4 if BOARD_GOOGLE_WINTERHOLD
	default 0	# 66MHz

endif # !EM100

config OVERRIDE_EFS_SPI_SPEED
	int
	default 3 if EM100
	default 4	# 100MHz
	help
	  Override EFS SPI Speed Configuration to be applied based on certain
	  board version.

config OVERRIDE_EFS_SPI_SPEED_MIN_BOARD
	hex
	default 0x5 if BOARD_GOOGLE_SKYRIM
	default 0x1 if BOARD_GOOGLE_FROSTFLOW
	default 0x1 if BOARD_GOOGLE_MARKARTH
	default 0xffffffff
	help
	  Minimum board version starting which the Override EFS SPI Speed
	  configuration has to be applied.

config CONSOLE_CBMEM_BUFFER_SIZE
	hex
	default 0x80000

config ENABLE_STB_SPILL_TO_DRAM
	default y
	help
	  Spill-to-DRAM is an STB feature that extends the buffer from using
	  just the small SRAM buffer to a much larger area reserved in main
	  memory.

config CARDBUS_PLUGIN_SUPPORT
	default n

endif # BOARD_GOOGLE_BASEBOARD_SKYRIM
