| # 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 |