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

config INTEL_QUARK
	bool
	select HAVE_RMU
	select ARCH_EARLY_INIT_R
	select ARCH_MISC_INIT
	imply ENABLE_MRC_CACHE
	imply ETH_DESIGNWARE
	imply ICH_SPI
	imply INTEL_ICH6_GPIO
	imply MMC
	imply MMC_PCI
	imply MMC_SDHCI
	imply MMC_SDHCI_SDMA
	imply SPI_FLASH
	imply SYS_NS16550
	imply USB
	imply USB_EHCI_HCD

if INTEL_QUARK

config HAVE_RMU
	bool "Add a Remote Management Unit (RMU) binary"
	help
	  Select this option to add a Remote Management Unit (RMU) binary
	  to the resulting U-Boot image. It is a data block (up to 64K) of
	  machine-specific code which must be put in the flash for the RMU
	  within the Quark SoC processor to access when powered up before
	  system BIOS is executed.

config RMU_FILE
	string "Remote Management Unit (RMU) binary filename"
	depends on HAVE_RMU
	default "rmu.bin"
	help
	  The filename of the file to use as Remote Management Unit (RMU)
	  binary in the board directory.

config RMU_ADDR
	hex "Remote Management Unit (RMU) binary location"
	depends on HAVE_RMU
	default 0xfff00000
	help
	  The location of the RMU binary is determined by a strap. It must be
	  put in flash at a location matching the strap-determined base address.

	  The default base address of 0xfff00000 indicates that the binary must
	  be located at offset 0 from the beginning of a 1MB flash device.

config HAVE_CMC
	bool
	default HAVE_RMU

config CMC_FILE
	string
	depends on HAVE_CMC
	default RMU_FILE

config CMC_ADDR
	hex
	depends on HAVE_CMC
	default RMU_ADDR

config ESRAM_BASE
	hex
	default 0x80000000
	help
	  Embedded SRAM (eSRAM) memory-mapped base address.

config PCIE_ECAM_BASE
	hex
	default 0xe0000000

config RCBA_BASE
	hex
	default 0xfed1c000
	help
	  Root Complex register block memory-mapped base address.

config ACPI_PM1_BASE
	hex
	default 0x1000
	help
	  ACPI Power Managment 1 (PM1) i/o-mapped base address.
	  This device is defined in ACPI specification, with 16 bytes in size.

config ACPI_PBLK_BASE
	hex
	default 0x1010
	help
	  ACPI Processor Block (PBLK) i/o-mapped base address.
	  This device is defined in ACPI specification, with 16 bytes in size.

config SPI_DMA_BASE
	hex
	default 0x1020
	help
	  SPI DMA i/o-mapped base address.

config GPIO_BASE
	hex
	default 0x1080
	help
	  GPIO i/o-mapped base address.

config ACPI_GPE0_BASE
	hex
	default 0x1100
	help
	  ACPI General Purpose Event 0 (GPE0) i/o-mapped base address.
	  This device is defined in ACPI specification, with 64 bytes in size.

config WDT_BASE
	hex
	default 0x1140
	help
	  Watchdog timer i/o-mapped base address.

config SYS_CAR_ADDR
	hex
	default ESRAM_BASE

config SYS_CAR_SIZE
	hex
	default 0x8000
	help
	  Space in bytes in eSRAM used as Cache-As-ARM (CAR).
	  Note this size must not exceed eSRAM's total size.

endif
