194 lines
6.5 KiB
Plaintext
194 lines
6.5 KiB
Plaintext
# ARM architecture configuration options
|
|
|
|
# Copyright (c) 2014-2015 Wind River Systems, Inc.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
menu "ARM Options"
|
|
depends on ARM
|
|
|
|
config ARCH
|
|
default "arm"
|
|
|
|
config CPU_CORTEX
|
|
bool
|
|
help
|
|
This option signifies the use of a CPU of the Cortex family.
|
|
|
|
config ARM_CUSTOM_INTERRUPT_CONTROLLER
|
|
bool
|
|
help
|
|
This option indicates that the ARM CPU is connected to a custom (i.e.
|
|
non-GIC or NVIC) interrupt controller.
|
|
|
|
A number of Cortex-A and Cortex-R cores (Cortex-A5, Cortex-R4/5, ...)
|
|
allow interfacing to a custom external interrupt controller and this
|
|
option must be selected when such cores are connected to an interrupt
|
|
controller that is not the ARM Generic Interrupt Controller (GIC) or
|
|
the Cortex-M ARM Nested Vectored Interrupt Controller (NVIC).
|
|
|
|
When this option is selected, the architecture interrupt control
|
|
functions are mapped to the SoC interrupt control interface, which is
|
|
implemented at the SoC level.
|
|
|
|
N.B. Since all Cortex-M cores have a NVIC, if this option is selected it
|
|
is assumed that the custom interrupt control interface implementation
|
|
assumes responsibility for handling the NVIC.
|
|
|
|
config ROMSTART_RELOCATION_ROM
|
|
bool "Relocate rom_start region"
|
|
default n
|
|
help
|
|
Relocates the rom_start region containing the boot-vector data and
|
|
irq vectors to the region specified by configurations:
|
|
ROMSTART_REGION_ADDRESS and ROMSTART_REGION_SIZE
|
|
|
|
This is useful for the Linux Remoteproc framework that uses the elf-loader
|
|
such that it is able to load the correct boot-vector (contained in rom_start)
|
|
into the correct memory location independent of the chosen zephyr,flash
|
|
ROM region.
|
|
|
|
Most SOCs include an alias for the boot-vector at address 0x00000000
|
|
so a default which might be supported by the corresponding Linux rproc driver.
|
|
If it is not, additionnal options allows to specify the addresses.
|
|
|
|
In general this option should be chosen if the zephyr,flash chosen node
|
|
is not placed into the boot-vector memory area.
|
|
|
|
While this aims at generating a correct zephyr.elf file, it has the side
|
|
effect of enlarging the bin file. If the zephyr.bin file is used to boot the
|
|
secondary core, this option should be disabled.
|
|
|
|
Example:
|
|
on IMX7D, the chosen zephyr,flash can be OCRAM/OCRAM_S/TCM/DDR memories
|
|
for code location. But the boot-vector must be placed into OCRAM_S for the
|
|
CORTEX-M to boot (alias 0, real 0x00180000/32K available).
|
|
|
|
if ROMSTART_RELOCATION_ROM
|
|
|
|
config ROMSTART_REGION_ADDRESS
|
|
hex "Base address of the rom_start region"
|
|
default 0x00000000
|
|
help
|
|
Start address of the rom_start region.
|
|
This setting can be derived from a DT node reg property or specified directly.
|
|
|
|
A default value of 0x00000000 might work in most cases as SOCs have an alias
|
|
to the right memory region of the boot-vector.
|
|
|
|
Examples:
|
|
-IMX7D the boot-vector is OCRAM_S (0x00180000, aliased at 0x0).
|
|
-IMX6SX the boot-vector is TCML (0x007F8000, aliased at 0x0).
|
|
-IMX8MQ the boot-vector is TCML (0x007E0000, aliased at 0x0).
|
|
-IMX8MN the boot-vector is ITCM (0x007E0000, aliased at 0x0).
|
|
|
|
Example of DT definition:
|
|
$(dt_nodelabel_reg_addr_hex,ocram_s_sys)
|
|
|
|
config ROMSTART_REGION_SIZE
|
|
hex "Size of the rom_start region"
|
|
default 1
|
|
help
|
|
Size of the rom_start region in KB.
|
|
|
|
Default is 1KB which is enough to store the boot and irq vectors.
|
|
|
|
This setting can be derived from a DT node reg property or specified directly.
|
|
|
|
Example for IMX7D that needs the boot-vector into OCRAM_S (0x00180000):
|
|
$(dt_nodelabel_reg_size_hex,ocram_s_sys,0,K)
|
|
|
|
endif
|
|
|
|
config CODE_DATA_RELOCATION_SRAM
|
|
bool "Relocate code/data sections to SRAM"
|
|
depends on CPU_CORTEX_M
|
|
select CODE_DATA_RELOCATION
|
|
help
|
|
When selected this will relocate .text, data and .bss sections from
|
|
the specified files and places it in SRAM. The files should be specified
|
|
in the CMakeList.txt file with a cmake API zephyr_code_relocate(). This
|
|
config is used to create an MPU entry for the SRAM space used for code
|
|
relocation.
|
|
|
|
config ARM_ON_ENTER_CPU_IDLE_HOOK
|
|
bool
|
|
help
|
|
Enables a hook (z_arm_on_enter_cpu_idle()) that is called when
|
|
the CPU is made idle (by k_cpu_idle() or k_cpu_atomic_idle()).
|
|
If needed, this hook can be used to prevent the CPU from actually
|
|
entering sleep by skipping the WFE/WFI instruction.
|
|
|
|
config ARM_ON_ENTER_CPU_IDLE_PREPARE_HOOK
|
|
bool
|
|
help
|
|
Enables a hook (z_arm_on_enter_cpu_idle_prepare()) that is called when
|
|
the CPU is made idle (by k_cpu_idle() or k_cpu_atomic_idle()).
|
|
If needed, this hook can prepare data to upcoming call to
|
|
z_arm_on_enter_cpu_idle(). The z_arm_on_enter_cpu_idle_prepare differs
|
|
from z_arm_on_enter_cpu_idle because it is called before interrupts are
|
|
disabled.
|
|
|
|
config ARM_ON_EXIT_CPU_IDLE
|
|
bool
|
|
help
|
|
Enables a possibility to inject SoC-specific code just after WFI/WFE
|
|
instructions of the cpu idle implementation.
|
|
|
|
Enabling this option requires that the SoC provides a soc_cpu_idle.h
|
|
header file which defines SOC_ON_EXIT_CPU_IDLE macro guarded by
|
|
_ASMLANGUAGE.
|
|
|
|
The SOC_ON_EXIT_CPU_IDLE macro is expanded just after
|
|
WFI/WFE instructions before any memory access is performed. The purpose
|
|
of the SOC_ON_EXIT_CPU_IDLE is to perform an action that mitigate issues
|
|
observed on some SoCs caused by a memory access following WFI/WFE
|
|
instructions.
|
|
|
|
rsource "core/Kconfig"
|
|
rsource "core/Kconfig.vfp"
|
|
|
|
# General options signifying CPU capabilities of ARM SoCs
|
|
config CPU_HAS_ARM_MPU
|
|
bool
|
|
select CPU_HAS_MPU
|
|
help
|
|
This option is enabled when the CPU has a Memory Protection Unit (MPU)
|
|
in ARM flavor.
|
|
|
|
config CPU_HAS_NXP_MPU
|
|
bool
|
|
select CPU_HAS_MPU
|
|
help
|
|
This option is enabled when the CPU has a Memory Protection Unit (MPU)
|
|
in NXP flavor.
|
|
|
|
config CPU_HAS_CUSTOM_FIXED_SOC_MPU_REGIONS
|
|
bool "Custom fixed SoC MPU region definition"
|
|
help
|
|
If enabled, this option signifies that the SoC will
|
|
define and configure its own fixed MPU regions in the
|
|
SoC definition. These fixed MPU regions are currently
|
|
used to set Flash and SRAM default access policies and
|
|
they are programmed at boot time.
|
|
|
|
config CPU_HAS_ARM_SAU
|
|
bool
|
|
select CPU_HAS_TEE
|
|
help
|
|
MCU implements the ARM Security Attribution Unit (SAU).
|
|
|
|
config CPU_HAS_NRF_IDAU
|
|
bool
|
|
select CPU_HAS_TEE
|
|
help
|
|
MCU implements the nRF (vendor-specific) Security Attribution Unit.
|
|
(IDAU: "Implementation-Defined Attribution Unit", in accordance with
|
|
ARM terminology).
|
|
|
|
config HAS_SWO
|
|
bool
|
|
help
|
|
When enabled, indicates that SoC has an SWO output
|
|
|
|
endmenu
|