blob: 2ab371f375006dca84d5aab31ee343b3b8bc0293 [file] [log] [blame]
#! cpp
/*
* Copyright (c) 2019-2020 Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef STACK_SIZE
#define STACK_SIZE 0x8000
#endif
#ifndef HEAP_SIZE
#define HEAP_SIZE 0x8000
#endif
#if defined(TRUSTZONE_BUILD) && !defined(ETHOSU_TEST)
/*
* Include trustzone.h with common addresses and sizes.
* The build configuration sets whether TRUSTZONE_SECURE is set or
* TRUSTZONE_NONSECURE which sets the memory start addresses and sizes.
*/
#include "trustzone.h"
#define USE_TRUSTZONE
#else //TRUSTZONE_BUILD
#define LR_START 0x10000000
#define LR_SIZE 0x01000000
#define ITCM_START 0x10000000
#define ITCM_SIZE 0x00080000
#define BRAM_START 0x11000000
#define BRAM_SIZE 0x00200000
#define DTCM_START 0x30000000
#define DTCM_SIZE 0x00080000
#define SRAM_START 0x31000000
#define SRAM_SIZE 0x00200000
#define DDR_START 0x70000000
#define DDR_SIZE 0x02000000
#define STACK_HEAP 0x30080000
#endif //TRUSTZONE_BUILD
/* ----------------------------------------------------------------------------
Stack seal size definition
*----------------------------------------------------------------------------*/
#if defined(USE_TRUSTZONE) && defined(TRUSTZONE_SECURE)
#define __STACKSEAL_SIZE ( 8 )
#else
#define __STACKSEAL_SIZE ( 0 )
#endif
APP_IMAGE LR_START LR_SIZE
{
; ITCM 512kB
rom_exec ITCM_START ITCM_SIZE
{
*.o (RESET, +First)
*(InRoot$$Sections)
; Make sure reset_handler ends up in root segment, when split across
; ITCM and DTCM
startup_ARMCM55.o
.ANY (+RO)
}
#if defined(USE_TRUSTZONE) && defined(TRUSTZONE_SECURE)
; MPS3 BRAM
; Shared between Cortex-M and the NPU
BRAM BRAM_START UNINIT (BRAM_SIZE - TZ_NSC_SIZE)
{
}
ROM_NSC TZ_NSC_START TZ_NSC_SIZE
{
*(Veneer$$CMSE)
}
#else
; MPS3 BRAM
BRAM BRAM_START UNINIT BRAM_SIZE
{
}
#endif
; DTCM 512kB
; Only accessible from the Cortex-M
DTCM DTCM_START (DTCM_SIZE - STACK_SIZE - HEAP_SIZE - __STACKSEAL_SIZE)
{
.ANY1 (+RW +ZI)
}
; SSE-300 SRAM (3 cycles read latency) from M55/U55
; 2x2MB - only first part mapped
SRAM SRAM_START UNINIT SRAM_SIZE
{
#ifndef ETHOSU_FAST_MEMORY_SIZE
; Place tensor arena in SRAM if we do not have a fast memory area
* (.bss.NoInit) ; Tensor Arena
#else
* (.bss.ethosu_scratch)
#endif
}
ARM_LIB_HEAP (STACK_HEAP - STACK_SIZE - __STACKSEAL_SIZE - HEAP_SIZE) EMPTY ALIGN 8 HEAP_SIZE {}
ARM_LIB_STACK (STACK_HEAP - STACK_SIZE - __STACKSEAL_SIZE) EMPTY ALIGN 8 STACK_SIZE {}
#if defined(USE_TRUSTZONE) && defined(TRUSTZONE_SECURE)
STACKSEAL +0 EMPTY __STACKSEAL_SIZE {
; Reserve empty region for stack seal immediately after stack
}
#endif
}
LOAD_REGION_1 DDR_START DDR_SIZE
{
; 2GB DDR4 available
rom_dram DDR_START
#if defined(USE_TRUSTZONE) && defined(TRUSTZONE_NONSECURE)
{
}
#else //trustzone secure or non-trustzone
{
* (network_model_sec)
* (input_data_sec)
* (expected_output_data_sec)
* (output_data_sec)
}
#ifdef ETHOSU_FAST_MEMORY_SIZE
; Place tensor arena in DRAM if we have a fast memory area
ARENA +0 UNINIT ALIGN 16
{
* (.bss.NoInit) ; Tensor Arena
}
#endif
#endif
}