##
## Copyright 2016 Google Inc.  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.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

source src/module/fsp/Kconfig

config HEAP_SIZE
	hex "The size of the heap in bytes"
	default 0x600000
	help
	  The size of the heap in bytes.

config STACK_SIZE
	hex "The size of the stack in bytes"
	default 0x40000
	help
	  The size of the stack in bytes.


# Options which are passed to the linker script. When making changes, update
# the list of options in Makefile.inc as well.

config KERNEL_START
	hex "Physical address of the region the kernel image is loaded into"
	default 0x100000
	help
	  The start of a region of memory the kernel image is loaded into from
	  the boot medium (vboot, network, etc.). This image may or may not be
	  a wrapper around the actual kernel code (e.g. FIT) and may or may not
	  require further decompression or relocation. Also, this area is used
	  by the old trampoline code in a way nobody cares about anymore.

config KERNEL_SIZE
	hex "The size of the region the kernel image is loaded into"
	default 0x2000000
	help
	  The size of the memory region described in KERNEL_START.

config BASE_ADDRESS
	hex "The address depthcharge is linked to run at"
	default 0x2000000
	help
	  The address that the main part of depthcharge runs at. That includes
	  everything except the code which pivots between the read only and
	  read/write firmware which is linked to run from the region of memory
	  the kernel is eventually loaded into.
