1/*
2 * Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef STM32MP1_LD_S
8#define STM32MP1_LD_S
9
10#include <lib/xlat_tables/xlat_tables_defs.h>
11#include <platform_def.h>
12
13OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT)
14OUTPUT_ARCH(PLATFORM_LINKER_ARCH)
15
16ENTRY(__BL2_IMAGE_START__)
17
18MEMORY {
19	HEADER (rw) : ORIGIN = 0x00000000, LENGTH = 0x3000
20	RAM (rwx) : ORIGIN = STM32MP_BINARY_BASE, LENGTH = STM32MP_BINARY_SIZE
21}
22
23SECTIONS
24{
25    /*
26     * TF mapping must conform to ROM code specification.
27     */
28    .header : {
29        __HEADER_START__ = .;
30        KEEP(*(.header))
31        . = ALIGN(4);
32        __HEADER_END__ = .;
33    } >HEADER
34
35    . = STM32MP_BINARY_BASE;
36    .data . : {
37        . = ALIGN(PAGE_SIZE);
38        __DATA_START__ = .;
39        *(.data*)
40
41        /*
42         * dtb.
43         * The strongest and only alignment contraint is MMU 4K page.
44         * Indeed as images below will be removed, 4K pages will be re-used.
45         */
46#if STM32MP_USE_STM32IMAGE
47        . = ( STM32MP_DTB_BASE - STM32MP_BINARY_BASE );
48#else
49        . = ( STM32MP_BL2_DTB_BASE - STM32MP_BINARY_BASE );
50#endif /* STM32MP_USE_STM32IMAGE */
51        __DTB_IMAGE_START__ = .;
52        *(.dtb_image*)
53        __DTB_IMAGE_END__ = .;
54
55        /*
56         * bl2.
57         * The strongest and only alignment contraint is MMU 4K page.
58         * Indeed as images below will be removed, 4K pages will be re-used.
59         */
60        . = ( STM32MP_BL2_BASE - STM32MP_BINARY_BASE );
61        __BL2_IMAGE_START__ = .;
62        *(.bl2_image*)
63        __BL2_IMAGE_END__ = .;
64
65#if STM32MP_USE_STM32IMAGE && !defined(AARCH32_SP_OPTEE)
66        /*
67         * bl32 will be settled by bl2.
68         * The strongest and only alignment constraint is 8 words to simplify
69         * memraise8 assembly code.
70         */
71        . = ( STM32MP_BL32_BASE - STM32MP_BINARY_BASE );
72        __BL32_IMAGE_START__ = .;
73        *(.bl32_image*)
74        __BL32_IMAGE_END__ = .;
75#endif /* STM32MP_USE_STM32IMAGE && !defined(AARCH32_SP_OPTEE) */
76
77        __DATA_END__ = .;
78    } >RAM
79
80    __TF_END__ = .;
81
82}
83#endif /* STM32MP1_LD_S */
84