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

comment "Important: Run 'make distclean' before switching boards"

choice
	prompt "Mainboard vendor"
	default VENDOR_EMULATION

source "src/mainboard/*/Kconfig.name"

endchoice

source "src/mainboard/*/Kconfig"

config MAINBOARD_DIR
	string

config MAINBOARD_PART_NUMBER
	string "Mainboard part number"

config MAINBOARD_VENDOR
	string "Mainboard vendor name"

config VARIANT_DIR
	string

config BOARD_ROMSIZE_KB_256
	bool
config BOARD_ROMSIZE_KB_512
	bool
config BOARD_ROMSIZE_KB_1024
	bool
config BOARD_ROMSIZE_KB_2048
	bool
config BOARD_ROMSIZE_KB_4096
	bool
config BOARD_ROMSIZE_KB_5120
	bool
config BOARD_ROMSIZE_KB_6144
	bool
config BOARD_ROMSIZE_KB_8192
	bool
config BOARD_ROMSIZE_KB_10240
	bool
config BOARD_ROMSIZE_KB_12288
	bool
config BOARD_ROMSIZE_KB_16384
	bool
config BOARD_ROMSIZE_KB_24576
	bool
config BOARD_ROMSIZE_KB_32768
	bool
config BOARD_ROMSIZE_KB_65536
	bool

# TODO: No help text possible for choice fields?
choice
	prompt "ROM chip size"
	default COREBOOT_ROMSIZE_KB_256   if BOARD_ROMSIZE_KB_256
	default COREBOOT_ROMSIZE_KB_512   if BOARD_ROMSIZE_KB_512
	default COREBOOT_ROMSIZE_KB_1024  if BOARD_ROMSIZE_KB_1024
	default COREBOOT_ROMSIZE_KB_2048  if BOARD_ROMSIZE_KB_2048
	default COREBOOT_ROMSIZE_KB_4096  if BOARD_ROMSIZE_KB_4096
	default COREBOOT_ROMSIZE_KB_5120  if BOARD_ROMSIZE_KB_5120
	default COREBOOT_ROMSIZE_KB_6144  if BOARD_ROMSIZE_KB_6144
	default COREBOOT_ROMSIZE_KB_8192  if BOARD_ROMSIZE_KB_8192
	default COREBOOT_ROMSIZE_KB_10240 if BOARD_ROMSIZE_KB_10240
	default COREBOOT_ROMSIZE_KB_12288 if BOARD_ROMSIZE_KB_12288
	default COREBOOT_ROMSIZE_KB_16384 if BOARD_ROMSIZE_KB_16384
	default COREBOOT_ROMSIZE_KB_24576 if BOARD_ROMSIZE_KB_24576
	default COREBOOT_ROMSIZE_KB_32768 if BOARD_ROMSIZE_KB_32768
	default COREBOOT_ROMSIZE_KB_65536 if BOARD_ROMSIZE_KB_65536
	help
	  Select the size of the ROM chip you intend to flash coreboot on.

	  The build system will take care of creating a coreboot.rom file
	  of the matching size.

config COREBOOT_ROMSIZE_KB_256
	bool "256 KB"
	help
	  Choose this option if you have a 256 KB ROM chip.

config COREBOOT_ROMSIZE_KB_512
	bool "512 KB"
	help
	  Choose this option if you have a 512 KB ROM chip.

config COREBOOT_ROMSIZE_KB_1024
	bool "1024 KB (1 MB)"
	help
	  Choose this option if you have a 1024 KB (1 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_2048
	bool "2048 KB (2 MB)"
	help
	  Choose this option if you have a 2048 KB (2 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_4096
	bool "4096 KB (4 MB)"
	help
	  Choose this option if you have a 4096 KB (4 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_5120
	bool "5120 KB (5 MB)"
	help
	  Choose this option if you have a 5120 KB (5 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_6144
	bool "6144 KB (6 MB)"
	help
	  Choose this option if you have a 6144 KB (6 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_8192
	bool "8192 KB (8 MB)"
	help
	  Choose this option if you have a 8192 KB (8 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_10240
	bool "10240 KB (10 MB)"
	help
	  Choose this option if you have a 10240 KB (10 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_12288
	bool "12288 KB (12 MB)"
	help
	  Choose this option if you have a 12288 KB (12 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_16384
	bool "16384 KB (16 MB)"
	help
	  Choose this option if you have a 16384 KB (16 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_24576
	bool "24576 KB (24 MB)"
	help
	  Choose this option if you have a 24576 KB (24 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_32768
	bool "32768 KB (32 MB)"
	help
	  Choose this option if you have a 32768 KB (32 MB) ROM chip.

config COREBOOT_ROMSIZE_KB_65536
	bool "65536 KB (64 MB)"
	help
	  Choose this option if you have a 65536 KB (64 MB) ROM chip.

endchoice

# Map the config names to an integer (KB).
config COREBOOT_ROMSIZE_KB
	int
	default   256 if COREBOOT_ROMSIZE_KB_256
	default   512 if COREBOOT_ROMSIZE_KB_512
	default  1024 if COREBOOT_ROMSIZE_KB_1024
	default  2048 if COREBOOT_ROMSIZE_KB_2048
	default  4096 if COREBOOT_ROMSIZE_KB_4096
	default  5120 if COREBOOT_ROMSIZE_KB_5120
	default  6144 if COREBOOT_ROMSIZE_KB_6144
	default  8192 if COREBOOT_ROMSIZE_KB_8192
	default 10240 if COREBOOT_ROMSIZE_KB_10240
	default 12288 if COREBOOT_ROMSIZE_KB_12288
	default 16384 if COREBOOT_ROMSIZE_KB_16384
	default 24576 if COREBOOT_ROMSIZE_KB_24576
	default 32768 if COREBOOT_ROMSIZE_KB_32768
	default 65536 if COREBOOT_ROMSIZE_KB_65536

# Map the config names to a hex value (bytes).
config ROM_SIZE
	hex
	default 0x00040000 if COREBOOT_ROMSIZE_KB_256
	default 0x00080000 if COREBOOT_ROMSIZE_KB_512
	default 0x00100000 if COREBOOT_ROMSIZE_KB_1024
	default 0x00200000 if COREBOOT_ROMSIZE_KB_2048
	default 0x00400000 if COREBOOT_ROMSIZE_KB_4096
	default 0x00500000 if COREBOOT_ROMSIZE_KB_5120
	default 0x00600000 if COREBOOT_ROMSIZE_KB_6144
	default 0x00800000 if COREBOOT_ROMSIZE_KB_8192
	default 0x00a00000 if COREBOOT_ROMSIZE_KB_10240
	default 0x00c00000 if COREBOOT_ROMSIZE_KB_12288
	default 0x01000000 if COREBOOT_ROMSIZE_KB_16384
	default 0x01800000 if COREBOOT_ROMSIZE_KB_24576
	default 0x02000000 if COREBOOT_ROMSIZE_KB_32768
	default 0x04000000 if COREBOOT_ROMSIZE_KB_65536

config ENABLE_POWER_BUTTON
	bool "Enable the power button" if POWER_BUTTON_IS_OPTIONAL
	default y if POWER_BUTTON_DEFAULT_ENABLE
	default n if POWER_BUTTON_DEFAULT_DISABLE
	help
	  The selected mainboard can optionally have the power button tied
	  to ground with a jumper so that the button appears to be
	  constantly depressed. If this option is enabled and the jumper is
	  installed then the board will turn on, but turn off again after a
	  short timeout, usually 4 seconds.

	  Select Y here if you have removed the jumper and want to use an
	  actual power button. Select N if you have the jumper installed.

config ENABLE_POWER_BUTTON
	def_bool y if !POWER_BUTTON_IS_OPTIONAL && POWER_BUTTON_FORCE_ENABLE
	def_bool n if !POWER_BUTTON_IS_OPTIONAL && POWER_BUTTON_FORCE_DISABLE

config HAVE_POWER_STATE_AFTER_FAILURE
	bool

if HAVE_POWER_STATE_AFTER_FAILURE

config HAVE_POWER_STATE_PREVIOUS_AFTER_FAILURE
	bool

config POWER_STATE_DEFAULT_ON_AFTER_FAILURE
	bool
	help
	  Selected by platforms or mainboards that want a "default on"
	  behaviour.

choice
	prompt "System Power State after Failure"
	default POWER_STATE_ON_AFTER_FAILURE \
		if POWER_STATE_DEFAULT_ON_AFTER_FAILURE
	default POWER_STATE_OFF_AFTER_FAILURE
	help
	  Provides a default for the power state the system should
	  go into after G3 (power loss). On many boards this can be
	  overridden by an NVRAM option.

config POWER_STATE_OFF_AFTER_FAILURE
	bool "S5 Soft Off"
	help
	  Choose this option if you want to put system into
	  S5 after reapplying power after failure.

config POWER_STATE_ON_AFTER_FAILURE
	bool "S0 Full On"
	help
	  Choose this option if you want to keep system in
	  S0 after reapplying power after failure.

config POWER_STATE_PREVIOUS_AFTER_FAILURE
	bool "Keep Previous State"
	depends on HAVE_POWER_STATE_PREVIOUS_AFTER_FAILURE
	help
	  Choose this option if you want to keep system in the
	  same power state as before failure after reapplying
	  power.

endchoice

config MAINBOARD_POWER_FAILURE_STATE
	int
	default 2 if POWER_STATE_PREVIOUS_AFTER_FAILURE
	default 1 if POWER_STATE_ON_AFTER_FAILURE
	default 0

endif # HAVE_POWER_STATE_AFTER_FAILURE