##
## Copyright 2012 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


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

config LDSCRIPT_ARCH
	bool "Architecture specific linker script"
	default n
	help
	  When enabled, the linker script given as argument to the linker is
	  the architecture specific linker script provided from libpayload.
	  Otherwise, the default src/image/depthchearge.ldscript is used.

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.

config HEAP_SIZE
	hex "The size of the heap in bytes"
	default 0x200000
	help
	  The size of the heap in bytes, minus any padding needed to align it
	  to a 16 byte boundary.

config STACK_SIZE
	hex "The size of the stack in bytes"
	default 0x4000
	help
	  The size of the stack in bytes, minus any padding needed to align it
	  to a 16 byte boundary.

config GBB_COPY_SIZE
	hex "The size of the area to cache the GBB contents"
	default 0x100000
	help
	  The size of the area the GBB is loaded into during the RO portion of
	  the boot which is referred to later by vboot in both RO and RW.


# End of options passed to the linker script.

config FMAP_OFFSET
	hex "Offset of the FMAP in the firmware image"
	help
	  This is the offset of the FMAP in the ROM. The FMAP is not searched
	  for, so if the address isn't correct the system won't boot.
