## This file is part of the coreboot project.
##
## Copyright (C) 2011 The ChromiumOS Authors.  All rights reserved.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; version 2 of the License.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##

config MAINBOARD_HAS_CHROMEOS
	def_bool n

menu "ChromeOS"
	depends on MAINBOARD_HAS_CHROMEOS

config CHROMEOS
	bool "Build for ChromeOS"
	default n
	select TPM
	select TPM_INIT_FAILURE_IS_FATAL if PC80_SYSTEM && LPC_TPM
	select SKIP_TPM_STARTUP_ON_NORMAL_BOOT if PC80_SYSTEM && LPC_TPM
	select BOOTMODE_STRAPS
	select ELOG if SPI_FLASH
	select COLLECT_TIMESTAMPS
	select VBOOT_VERIFY_FIRMWARE
	select MULTIPLE_CBFS_INSTANCES
	help
	  Enable ChromeOS specific features like the GPIO sub table in
	  the coreboot table. NOTE: Enabling this option on an unsupported
	  board will most likely break your build.

if CHROMEOS

config VBNV_OFFSET
	hex
	default 0x26
	depends on PC80_SYSTEM
	help
	  CMOS offset for VbNv data. This value must match cmos.layout
	  in the mainboard directory, minus 14 bytes for the RTC.

config VBNV_SIZE
	hex
	default 0x10
	depends on PC80_SYSTEM
	help
	  CMOS storage size for VbNv data. This value must match cmos.layout
	  in the mainboard directory.

config CHROMEOS_VBNV_CMOS
	bool "Vboot non-volatile storage in CMOS."
	default n
	help
	  VBNV is stored in CMOS

config CHROMEOS_VBNV_EC
	bool "Vboot non-volatile storage in EC."
	default n
	help
	  VBNV is stored in EC

config CHROMEOS_VBNV_FLASH
	def_bool n
	help
	  VBNV is stored in flash storage

config CHROMEOS_RAMOOPS
	bool "Reserve space for Chrome OS ramoops"
	default y

config CHROMEOS_RAMOOPS_DYNAMIC
	bool "Allocate RAM oops buffer in cbmem"
	default n
	depends on CHROMEOS_RAMOOPS && HAVE_ACPI_TABLES

config CHROMEOS_RAMOOPS_NON_ACPI
	bool "Allocate RAM oops buffer in cbmem passed through cb tables to payload"
	default n
	depends on CHROMEOS_RAMOOPS && !HAVE_ACPI_TABLES

config CHROMEOS_RAMOOPS_RAM_START
	hex "Physical address of preserved RAM"
	default 0x00f00000
	depends on CHROMEOS_RAMOOPS && !CHROMEOS_RAMOOPS_DYNAMIC

config CHROMEOS_RAMOOPS_RAM_SIZE
	hex "Size of preserved RAM"
	default 0x00100000
	depends on CHROMEOS_RAMOOPS

config EC_SOFTWARE_SYNC
	bool "Enable EC software sync"
	default n
	depends on VBOOT_VERIFY_FIRMWARE
	help
	  EC software sync is a mechanism where the AP helps the EC verify its
	  firmware similar to how vboot verifies the main system firmware. This
	  option selects whether depthcharge should support EC software sync.

config VBOOT_EC_SLOW_UPDATE
	bool "EC is slow to update"
	default n
	depends on EC_SOFTWARE_SYNC
	help
	  Whether the EC (or PD) is slow to update and needs to display a
	  screen that informs the user the update is happening.

config VBOOT_OPROM_MATTERS
	bool "Video option ROM matters"
	default n
	depends on VBOOT_VERIFY_FIRMWARE
	help
	  Whether the video option ROM has run matters on this platform.

config VIRTUAL_DEV_SWITCH
	bool "Virtual developer switch support"
	default n
	depends on VBOOT_VERIFY_FIRMWARE
	help
	  Whether this platform has a virtual developer switch.

config VBOOT_VERIFY_FIRMWARE
	bool "Verify firmware with vboot."
	default n
	depends on HAVE_HARD_RESET
	help
	  Enabling VBOOT_VERIFY_FIRMWARE will use vboot to verify the components
	  of the firmware (stages, payload, etc).

config NO_TPM_RESUME
	bool
	default n
	help
	  On some boards the TPM stays powered up in S3. On those
	  boards, booting Windows will break if the TPM resume command
	  is sent during an S3 resume.

config PHYSICAL_REC_SWITCH
	bool "Physical recovery switch is present"
	default n
	help
	  Whether this platform has a physical recovery switch

config LID_SWITCH
	bool "Lid switch is present"
	default n
	help
	  Whether this platform has a lid switch

config WIPEOUT_SUPPORTED
	bool "User is able to request factory reset"
	default n
	help
	  When this option is enabled, the firmware provides the ability to
	  signal the application the need for factory reset (a.k.a. wipe
	  out) of the device

source src/vendorcode/google/chromeos/vboot2/Kconfig

endif # CHROMEOS
endmenu
