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

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
