/*******************************************************************************
 * Copyright (C) Marvell International Ltd. and its affiliates
 *******************************************************************************
 * Marvell GPL License Option
 *
 * If you received this File from Marvell, you may opt to use, redistribute and/or
 * modify this File in accordance with the terms and conditions of the General
 * Public License Version 2, June 1991 (the "GPL License"), a copy of which is
 * available along with the File in the license.txt file or by writing to the Free
 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
 * on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
 *
 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
 * DISCLAIMED.  The GPL License provides additional details about this warranty
 * disclaimer.
 *******************************************************************************/
/*
 * bootloader memory layout:
 *  0x00100000 - 0x0017C000  496kB vt, drm_img, custkey, bootloader preloaded buffer
 *  0x0017C000 - 0x00180000   16kB 16kB for level 1 translation table base
 *  0x00180000 - 0x004C0000 3328kB code, rodata, data, bss, heap
 *  0x004C0000 - 0x00500000  256kB stack
 *
 *******************************************************************************/

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(BootLoaderEntry)
SECTIONS
{
	. = 0x1100000 - 0x10000;
	__usb_console_buf_start = .;

	. = 0x1100000;
	__usb_console_buf_end = .;

	. = 0x01600000;
	__preload_buf_start = .;

	. = 0x01680000 - 0x4000;
	. = ALIGN(0x4000);
	__ttb_base_start = .;

	. = 0x01680000;
	. = ALIGN(4);
	.text :
	{
		*(.text)
	}

	.rodata :
	{
		*(.rodata)
	}

        . = ALIGN(4);
	.data :
	{
		*(.data)
	}
	__exidx_start = .;
	.ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
	__exidx_end = .;

	. = ALIGN(4);
	__bss_start = .;
        .bss :
	{
		*(.bss)
	}
	__bss_end = .;

	. = ALIGN(8);
	__heap_start = .;

	. = 0x01A00000 - 0x00040000;
	__heap_end = .;

	. = 0x01A00000;
	. = ALIGN(8);
	__stack_start = .;

}
