#
# 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_BAYLEYBAY
	bool "Bayley Bay"
	help
	  This is the Intel Bayley Bay Customer Reference Board. It contains an
	  Intel quad-core Atom Processor E3800 with dual-channel DDR3L SODIMM
	  4GB memory, HDMI/DP/VGA display, HD audio, SATA, USB2, USB3, SD, eMMC,
	  PCIe and some other sensor interfaces.

config TARGET_CHERRYHILL
	bool "Cherry Hill"
	help
	  This is the Intel Cherry Hill Customer Reference Board. It is in a
	  mini-ITX form factor containing the Intel Braswell SoC, which has
	  a 64-bit quad-core, single-thread, Intel Atom processor, along with
	  serial console, 10/100/1000 Ethernet, SD-Card, USB 2/3, SATA, PCIe,
	  some GPIOs, one HDMI and two DP video out.

config TARGET_COUGARCANYON2
	bool "Cougar Canyon 2"
	help
	  This is the Intel Cougar Canyon 2 Customer Reference Board. It
	  is built on the Chief River platform with Intel Ivybridge Processor
	  and Panther Point chipset. The board has 4GB RAM, with some other
	  peripheral connectors for PCIe/SATA/USB2/USB3/LAN/UART/PS2/VGA/HDMI.

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_EDISON
	bool "Edison"
	help
	  This is the Intel Edison Compute Module. It contains a dual core Intel
	  Atom Tangier CPU, 1 GB RAM integrated on package. There is also 4 GB
	  eMMC flash on board, Wi-Fi, Bluetooth 4 and USB controllers.

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/bayleybay/Kconfig"
source "board/intel/cherryhill/Kconfig"
source "board/intel/cougarcanyon2/Kconfig"
source "board/intel/crownbay/Kconfig"
source "board/intel/edison/Kconfig"
source "board/intel/galileo/Kconfig"
source "board/intel/minnowmax/Kconfig"

endif
