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

config BOARD_GOOGLE_BASEBOARD_TREMBYLE
	def_bool n
	select AMD_FP5

config BOARD_GOOGLE_BASEBOARD_DALBOZ
	def_bool n
	select AMD_FT5

if BOARD_GOOGLE_BASEBOARD_TREMBYLE || BOARD_GOOGLE_BASEBOARD_DALBOZ

config BOARD_SPECIFIC_OPTIONS
	def_bool y
	select SOC_AMD_COMMON_BLOCK_USE_ESPI
	select SOC_AMD_PICASSO
	select VGA_BIOS
	select BOARD_ROMSIZE_KB_16384
	select DISABLE_SPI_FLASH_ROM_SHARING
	select DRIVERS_I2C_GENERIC
	select DRIVERS_I2C_HID
	select EC_GOOGLE_CHROMEEC
	select EC_GOOGLE_CHROMEEC_BOARDID
	select EC_GOOGLE_CHROMEEC_ESPI
	select EC_GOOGLE_CHROMEEC_I2C_TUNNEL
	select EC_GOOGLE_CHROMEEC_SKUID
	select EC_GOOGLE_CHROMEEC_SWITCHES
	select ELOG
	select ELOG_BOOT_COUNT
	select ELOG_GSMI
	select HAVE_ACPI_TABLES
	select GFXUMA
	select GOOGLE_SMBIOS_MAINBOARD_VERSION
	select MAINBOARD_HAS_CHROMEOS
	select PICASSO_UART
	select MAINBOARD_HAS_I2C_TPM_CR50
	select MAINBOARD_HAS_TPM2
	select PCIEXP_ASPM
	select PCIEXP_CLK_PM
	select PCIEXP_COMMON_CLOCK
	select PCIEXP_L1_SUB_STATE
	select HAVE_EM100_SUPPORT
	select SYSTEM_TYPE_LAPTOP
	select DRIVERS_GENERIC_MAX98357A
	select HAVE_ACPI_RESUME
	select DRIVERS_USB_ACPI
	select DRIVERS_UART_ACPI
	select PSP_UNLOCK_SECURE_DEBUG

config ELOG_BOOT_COUNT_CMOS_OFFSET
	int
	default 144

# FMDFILE is set here so that coreboot build picks up this flash map layout
# even when CHROMEOS is not selected when building upstream.
config FMDFILE
	string
	default "src/mainboard/$(CONFIG_MAINBOARD_DIR)/chromeos.fmd"

config MAINBOARD_DIR
	string
	default google/zork

config VGA_BIOS_ID

config VGA_BIOS_FILE
	string
	default "3rdparty/blobs/mainboard/google/zork/PicassoGenericVbios.bin"

config VARIANT_DIR
	string
	default "ezkinil" if BOARD_GOOGLE_EZKINIL
	default "morphius" if BOARD_GOOGLE_MORPHIUS
	default "trembyle" if BOARD_GOOGLE_TREMBYLE
	default "dalboz" if BOARD_GOOGLE_DALBOZ
	default "berknip" if BOARD_GOOGLE_BERKNIP
	default "vilboz" if BOARD_GOOGLE_VILBOZ

config MAINBOARD_PART_NUMBER
	string
	default "Ezkinil" if BOARD_GOOGLE_EZKINIL
	default "Morphius" if BOARD_GOOGLE_MORPHIUS
	default "Trembyle" if BOARD_GOOGLE_TREMBYLE
	default "Dalboz" if BOARD_GOOGLE_DALBOZ
	default "Berknip" if BOARD_GOOGLE_BERKNIP
	default "Vilboz" if BOARD_GOOGLE_VILBOZ

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

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

config MAINBOARD_FAMILY
	string
	default "Google_Zork"

config MAX_CPUS
	int
	default 8

config IRQ_SLOT_COUNT
	int
	default 11

config ONBOARD_VGA_IS_PRIMARY
	bool
	default y

config VGA_ROM_RUN
	select HAVE_VGA_TEXT_FRAMEBUFFER
	select ALWAYS_LOAD_OPROM
	select ALWAYS_RUN_OPROM
	help
	  Execute VGA Option ROMs in coreboot if found. This can be used
	  to enable PCI/AGP/PCI-E video cards when not using a SeaBIOS
	  payload.

	  When using a SeaBIOS payload it runs all option ROMs with much
	  more complete BIOS interrupt services available than coreboot,
	  which some option ROMs require in order to function correctly.

config VBOOT
	select EC_GOOGLE_CHROMEEC_SWITCHES
	select VBOOT_LID_SWITCH
	select VBOOT_STARTS_BEFORE_BOOTBLOCK

config VBOOT_VBNV_OFFSET
	hex
	default 0x2A

config CHROMEOS
	# Use default libpayload config
	select LP_DEFCONFIG_OVERRIDE if PAYLOAD_DEPTHCHARGE

config AMD_FWM_POSITION_INDEX
	int
	default 2

config DRIVER_TPM_I2C_BUS
	hex
	default 0x03

config DRIVER_TPM_I2C_ADDR
	hex
	default 0x50

config USE_OEM_BIN
	bool "Add an oem.bin file"
	help
	  Add an oem.bin file to identify the manufacturer in SMBIOS, overriding the
	  CONFIG_MAINBOARD_SMBIOS_MANUFACTURER value.

config OEM_BIN_FILE
	string "OEM ID table"
	depends on USE_OEM_BIN
	default ""

config FSP_M_FILE
	string "FSP-M (memory init) binary path and filename"
	depends on ADD_FSP_BINARIES
	default "3rdparty/amd_blobs/picasso/PICASSO_M.fd"
	help
	  The path and filename of the FSP-M binary for this platform.
	  TODO: remove this: Mandolin temporarily makes the default
	  location the coreboot root for easy internal development.

config FSP_S_FILE
	string "FSP-S (silicon init) binary path and filename"
	depends on ADD_FSP_BINARIES
	default "3rdparty/amd_blobs/picasso/PICASSO_S.fd"
	help
	  The path and filename of the FSP-S binary for this platform.
	  TODO: remove this: Mandolin temporarily makes the default
	  location the coreboot root for easy internal development.

config HAVE_APCB_BLOB
	bool "Have AGESA PSP Customization Block file?"
	default n
	help
	  The PSP requires the APCB file to know how to configure memory, as
	  well as other settings it will initialize.  To build an image that
	  will get to POST, select 'y' and provide the file path/name.  The
	  default of 'n' allows the board to build successfully but it avoids
	  redistributing the APCB blob extracted from UEFI.
	  TODO: Add the ability to construct APCB on the fly for any mainboard.

config PAYLOAD_CONFIGFILE
	string
	depends on PAYLOAD_SEABIOS
	default "$(top)/src/mainboard/google/zork/config_seabios"

#TODO: Change these to get the postition from the FMAP file
config PICASSO_FW_A_POSITION
	hex
	default 0xFF031040
	depends on VBOOT_SLOTS_RW_AB && VBOOT_STARTS_BEFORE_BOOTBLOCK
	help
	  Location of the AMD firmware in the RW_A region.

config PICASSO_FW_B_POSITION
	hex
	default 0xFF3CF040
	depends on VBOOT_SLOTS_RW_AB && VBOOT_STARTS_BEFORE_BOOTBLOCK
	help
	  Location of the AMD firmware in the RW_B region

config VARIANT_HAS_FW_CONFIG
	bool
	help
	  Honor FW_CONFIG in CBI.

config VARIANT_BOARD_VER_FW_CONFIG_VALID
	int
	default 256
	depends on VARIANT_HAS_FW_CONFIG
	help
	  Which board version did FW_CONFIG become valid in CBI.

config VARIANT_MIN_BOARD_ID_V3_SCHEMATICS
	int
	default 4 if BOARD_GOOGLE_TREMBYLE
	default 3 if BOARD_GOOGLE_EZKINIL
	default 3 if BOARD_GOOGLE_MORPHIUS
	default 2 if BOARD_GOOGLE_BERKNIP
	default 3 if BOARD_GOOGLE_DALBOZ
	default 2 if BOARD_GOOGLE_VILBOZ

endif # BOARD_GOOGLE_BASEBOARD_TREMBYLE || BOARD_GOOGLE_BASEBOARD_DALBOZ
