boards: spresense: Introduce ramconfig-new.ld for the system bus

Summary:
- In order to support the atomic instructions by ldrex/strex instruction
  in NuttX SMP, the data or later sections are mapped to the system bus.

Impact:
- Bootloader for Spresense SDK 2.1.0 or later must be installed
- Loops per msec must be adjusted
- Physical address for DMA must be converted with CXD56_PHYSADDR

Testing:
- Will be tested with later commits

Signed-off-by: Kazuya Hioki <Kazuya.Hioki@sony.com>
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
This commit is contained in:
Kazuya Hioki 2021-06-03 06:24:45 +09:00 committed by Xiang Xiao
parent 281921bcf9
commit d3ef61af31
3 changed files with 122 additions and 4 deletions

View File

@ -19,6 +19,10 @@ as the more advanced NuttX based SDK.
Refer to https://developer.sony.com/develop/spresense/ for further information
about this board.
NOTICE:
To run the nuttx, bootloader for Spresense SDK 2.1.0 or later must be installed.
Configuration sub-directories
-----------------------------
@ -36,9 +40,7 @@ Configuration sub-directories
smp
This is a configuration to run Spresense in SMP mode. To use this
configuration, bootloader for Spresense SDK 1.5.0 or later must be
installed.
This is a configuration to run Spresense in SMP mode.
wifi

View File

@ -25,7 +25,11 @@ include $(TOPDIR)/arch/arm/src/armv7-m/Toolchain.defs
# Setup for the kind of memory that we are executing from
LDSCRIPT = ramconfig.ld
ifeq ($(CONFIG_CXD56_USE_SYSBUS), y)
LDSCRIPT = ramconfig-new.ld
else
LDSCRIPT = ramconfig.ld
endif
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
ARCHSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)}"

View File

@ -0,0 +1,112 @@
/****************************************************************************
* boards/arm/cxd56xx/spresense/scripts/ramconfig-new.ld
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you 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
*
* http://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.
*
****************************************************************************/
MEMORY
{
ram (rwx) : ORIGIN = 0x0d000000, LENGTH = 1536K
}
OUTPUT_ARCH(arm)
ENTRY(__start) /* Treat __start as the anchor for dead code stripping */
EXTERN(_vectors) /* Force the vectors to be included in the output */
EXTERN(__stack) /* Force the __stack to be included in the output */
SECTIONS
{
.text : {
_stext = ABSOLUTE(.);
*(.vectors)
*(.text .text.*)
*(.fixup)
*(.gnu.warning)
*(.rodata .rodata.*)
*(.gnu.linkonce.t.*)
*(.glue_7)
*(.glue_7t)
*(.got)
*(.gcc_except_table)
*(.gnu.linkonce.r.*)
_image_modlist_base = .;
KEEP(*(.modulelist))
_image_modlist_limit = .;
_etext = ABSOLUTE(.);
} > ram
.init_section : {
_sinit = ABSOLUTE(.);
KEEP(*(.init_array .init_array.*))
_einit = ABSOLUTE(.);
} > ram
.ARM.extab : {
*(.ARM.extab*)
} > ram
__exidx_start = ABSOLUTE(.);
.ARM.exidx : {
*(.ARM.exidx*)
} > ram
__exidx_end = ABSOLUTE(.);
_eronly = ABSOLUTE(.);
/* Map .data and .bss sections to system bus */
. = ALIGN(16);
. |= 0x20000000;
.data . : ALIGN(16) {
_sdata = ABSOLUTE(.);
*(.data .data.*)
*(.gnu.linkonce.d.*)
CONSTRUCTORS
. = ALIGN(4);
_edata = ABSOLUTE(.);
} AT > ram
.bss . : { /* BSS */
_sbss = ABSOLUTE(.);
*(.bss .bss.*)
*(.gnu.linkonce.b.*)
*(COMMON)
. = ALIGN(4);
_ebss = ABSOLUTE(.);
} AT > ram
/* __stack symbol is referred from mkspk tool
* and means the end address of heap region */
PROVIDE(__stack = ORIGIN(ram) + LENGTH(ram) + 0x20000000);
__stack -= DEFINED(__reserved_ramsize) ? __reserved_ramsize : 0;
ASSERT(_ebss < __stack, "Error: Out of memory")
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_info 0 : { *(.debug_info) }
.debug_line 0 : { *(.debug_line) }
.debug_pubnames 0 : { *(.debug_pubnames) }
.debug_aranges 0 : { *(.debug_aranges) }
}