##
## This file is part of the coreboot project.
##
## Copyright (C) 2012 The Chromium OS 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 ELOG
	depends on SPI_FLASH
	bool "Support for flash based event log"
	default n
	help
	  Enable support for flash based event logging.

if ELOG

config ELOG_DEBUG
	bool "Enable debug output for event logging"
	default n

config ELOG_FLASH_BASE
	hex "Event log offset into flash"
	default 0
	help
	  Offset into the flash chip for the ELOG block.
	  This should be allocated in the FMAP.

config ELOG_AREA_SIZE
	hex "Size of Event Log area in flash"
	default 0x1000
	help
	  This should be a multiple of flash block size.

	  Default is 4K.

config ELOG_CBMEM
	bool "Store a copy of ELOG in CBMEM"
	default n
	help
	 This option will have ELOG store a copy of the flash event log
	 in a CBMEM region and export that address in SMBIOS to the OS.
	 This is useful if the ELOG location is not in memory mapped flash,
	 but it means that events added at runtime via the SMI handler
	 will not be reflected in the CBMEM copy of the log.

endif

config ELOG_GSMI
	depends on ELOG && SPI_FLASH_SMM && SMM_TSEG
	bool "SMI interface to write and clear event log"
	default n
	help
	  This interface is compatible with the linux kernel driver
	  available with CONFIG_GOOGLE_GSMI and can be used to write
	  kernel reset/shutdown messages to the event log.

config ELOG_BOOT_COUNT
	depends on ELOG
	bool "Maintain a monotonic boot number in CMOS"
	default n
	help
	  Store a monotonic boot number in CMOS and provide an interface
	  to read the current value and increment the counter.  This boot
	  counter will be logged as part of the System Boot event.

config ELOG_BOOT_COUNT_CMOS_OFFSET
	depends on ELOG && ELOG_BOOT_COUNT && !USE_OPTION_TABLE
	int "Offset in CMOS to store the boot count"
	default 0
	help
	  This value must be greater than 16 bytes so as not to interfere
	  with the standard RTC region.  Requires 8 bytes.
