#
# Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
#
# SPDX-License-Identifier:	GPL-2.0+
#

if VENDOR_INTEL

choice
	prompt "Mainboard model"
	optional

config TARGET_CROWNBAY
	bool "Crown Bay"
	help
	  This is the Intel Crown Bay Customer Reference Board. It contains
	  the Intel Atom Processor E6xx populated on the COM Express module
	  with 1GB DDR2 soldered down memory and a carrier board with the
	  Intel Platform Controller Hub EG20T, other system components and
	  peripheral connectors for PCIe/SATA/USB/LAN/SD/UART/Audio/LVDS.

config TARGET_GALILEO
	bool "Galileo"
	help
	  This is the Intel Galileo board, which is the first in a family of
	  Arduino-certified development and prototyping boards based on Intel
	  architecture. It includes an Intel Quark SoC X1000 processor, a 32-bit
	  single-core, single-thread, Intel Pentium processor instrunction set
	  architecture (ISA) compatible, operating at speeds up to 400Mhz,
	  along with 256MB DDR3 memory. It supports a wide range of industry
	  standard I/O interfaces, including a full-sized mini-PCIe slot,
	  one 100Mb Ethernet port, a microSD card slot, a USB host port and
	  a USB client port.

config TARGET_MINNOWMAX
	bool "Minnowboard MAX"
	help
	  This is the Intel Minnowboard MAX. It contains an Atom E3800
	  processor in a small form factor with Ethernet, micro-SD, USB 2,
	  USB 3, SATA, serial console, some GPIOs and HDMI 1.3 video out.
	  It requires some binary blobs - see README.x86 for details.

	  Note that PCIE_ECAM_BASE is set up by the FSP so the value used
	  by U-Boot matches that value.

endchoice

source "board/intel/crownbay/Kconfig"
source "board/intel/galileo/Kconfig"
source "board/intel/minnowmax/Kconfig"

endif
