| # XTENSA architecture configuration options |
| |
| # Copyright (c) 2016 Cadence Design Systems, Inc. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| menu "XTENSA Options" |
| depends on XTENSA |
| |
| config ARCH |
| default "xtensa" |
| |
| config SIMULATOR_XTENSA |
| bool "Simulator Target" |
| help |
| Enable if building to run on simulator. |
| |
| config XTENSA_RESET_VECTOR |
| bool "Build reset vector code" |
| default y |
| help |
| This option controls whether the initial reset vector code is built. |
| This is always needed for the simulator. Real boards may already |
| implement this in boot ROM. |
| |
| config XTENSA_USE_CORE_CRT1 |
| bool "Use crt1.S from core" |
| default y |
| help |
| SoC or boards might define their own __start by setting this setting |
| to false. |
| |
| config XTENSA_ENABLE_BACKTRACE |
| bool "Backtrace on panic exception" |
| default y |
| depends on SOC_SERIES_ESP32 || SOC_FAMILY_INTEL_ADSP || SOC_XTENSA_DC233C |
| help |
| Enable this config option to print backtrace on panic exception |
| |
| config XTENSA_SMALL_VECTOR_TABLE_ENTRY |
| bool "Workaround for small vector table entries" |
| help |
| This option enables a small indirection to bypass the size |
| constraint of the vector table entry and moved the default |
| handlers to the end of vector table, renaming them to |
| _Level\LVL\()VectorHelper. |
| |
| config XTENSA_RPO_CACHE |
| bool "Cached/uncached RPO mapping" |
| help |
| Support Cached/uncached RPO mapping. |
| |
| A design trick on multi-core hardware is to map memory twice |
| so that it can be seen in both (incoherent) cached mappings |
| and a coherent "shared" area. |
| |
| if XTENSA_RPO_CACHE |
| config XTENSA_CACHED_REGION |
| int "Cached RPO mapping" |
| range 0 7 |
| help |
| This specifies which 512M region (0-7, as defined by the Xtensa |
| Region Protection Option) contains the "cached" mapping. |
| |
| config XTENSA_UNCACHED_REGION |
| int "Uncached RPO mapping" |
| range 0 7 |
| help |
| As for XTENSA_CACHED_REGION, this specifies which 512M |
| region (0-7) contains the "uncached" mapping. |
| |
| endif |
| |
| config XTENSA_CCOUNT_HZ |
| int "CCOUNT cycle rate" |
| default 1000000 |
| help |
| Rate in HZ of the Xtensa core as measured by the value of |
| the CCOUNT register. |
| |
| config XTENSA_MORE_SPIN_RELAX_NOPS |
| bool "Use Xtensa specific arch_spin_relax() with more NOPs" |
| help |
| Some Xtensa SoCs, especially under SMP, may need extra |
| NOPs after failure to lock a spinlock. This gives |
| the bus extra time to synchronize the RCW transaction |
| among CPUs. |
| |
| config XTENSA_NUM_SPIN_RELAX_NOPS |
| int "Number of NOPs to be used in arch_spin_relax()" |
| default 1 |
| depends on XTENSA_MORE_SPIN_RELAX_NOPS |
| help |
| Specify the number of NOPs in Xtensa specific |
| arch_spin_relax(). |
| |
| menu "Xtensa HiFi Options" |
| |
| config XTENSA_CPU_HAS_HIFI |
| bool |
| |
| config XTENSA_CPU_HAS_HIFI3 |
| select XTENSA_CPU_HAS_HIFI |
| bool |
| |
| config XTENSA_CPU_HAS_HIFI4 |
| select XTENSA_CPU_HAS_HIFI |
| bool |
| |
| # Selected when at least one XTENSA_HIFIn version has been configured |
| config XTENSA_HIFI |
| bool |
| |
| if XTENSA_CPU_HAS_HIFI |
| |
| config XTENSA_HIFI3 |
| bool "HiFi3 AudioEngine instructions" |
| depends on XTENSA_CPU_HAS_HIFI3 |
| default y |
| select XTENSA_HIFI |
| help |
| This option enables HiFi 3 instruction support. |
| |
| config XTENSA_HIFI4 |
| bool "HiFi4 AudioEngine instructions" |
| depends on XTENSA_CPU_HAS_HIFI4 |
| default y |
| select XTENSA_HIFI |
| help |
| This option enables HiFi 4 instruction support. |
| |
| config XTENSA_HIFI_SHARING |
| bool "HiFi register sharing" |
| depends on XTENSA_HIFI |
| help |
| This option enables preservation of the hardware HiFi registers |
| across context switches to allow multiple threads to perform |
| concurrent HiFi operations. |
| |
| endif # XTENSA_CPU_HAS_HIFI |
| |
| endmenu # Xtensa HiFi Options |
| |
| if CPU_HAS_MMU |
| |
| config XTENSA_MMU |
| bool "Xtensa MMU Support" |
| select MMU |
| select ARCH_MEM_DOMAIN_SYNCHRONOUS_API if USERSPACE |
| select XTENSA_SMALL_VECTOR_TABLE_ENTRY |
| select KERNEL_VM_USE_CUSTOM_MEM_RANGE_CHECK if XTENSA_RPO_CACHE |
| select CURRENT_THREAD_USE_NO_TLS if USERSPACE |
| help |
| Enable support for Xtensa Memory Management Unit. |
| |
| if XTENSA_MMU |
| |
| choice |
| prompt "PageTable virtual address" |
| default XTENSA_MMU_PTEVADDR_20000000 |
| help |
| The virtual address for Xtensa page table (PTEVADDR). |
| |
| config XTENSA_MMU_PTEVADDR_20000000 |
| bool "0x20000000" |
| |
| endchoice |
| |
| config XTENSA_MMU_PTEVADDR |
| hex |
| default 0x20000000 if XTENSA_MMU_PTEVADDR_20000000 |
| help |
| The virtual address for Xtensa page table (PTEVADDR). |
| |
| config XTENSA_MMU_PTEVADDR_SHIFT |
| int |
| default 29 if XTENSA_MMU_PTEVADDR_20000000 |
| help |
| The bit shift number for the virtual address for Xtensa |
| page table (PTEVADDR). |
| |
| config XTENSA_MMU_NUM_L1_TABLES |
| int "Number of L1 page tables" |
| default 1 if !USERSPACE |
| default 4 |
| help |
| This option specifies the maximum number of traslation tables. |
| Translation tables are directly related to the number of |
| memory domains in the target, considering the kernel itself requires one. |
| |
| config XTENSA_MMU_NUM_L2_TABLES |
| int "Number of L2 page tables" |
| default 20 if USERSPACE |
| default 10 |
| help |
| Each table can address up to 4MB memory address. |
| |
| config XTENSA_MMU_DOUBLE_MAP |
| bool "Map memory in cached and uncached region" |
| help |
| This option specifies that the memory is mapped in two |
| distinct region, cached and uncached. |
| |
| config XTENSA_INVALIDATE_MEM_DOMAIN_TLB_ON_SWAP |
| bool |
| help |
| This invalidates all TLBs referred by the incoming thread's |
| memory domain when swapping page tables. |
| |
| config PRIVILEGED_STACK_SIZE |
| # Must be multiple of CONFIG_MMU_PAGE_SIZE |
| default 4096 |
| |
| endif # XTENSA_MMU |
| |
| endif # CPU_HAS_MMU |
| |
| if CPU_HAS_MPU |
| |
| menuconfig XTENSA_MPU |
| bool "Xtensa MPU Support" |
| select MPU |
| select SRAM_REGION_PERMISSIONS |
| select XTENSA_SMALL_VECTOR_TABLE_ENTRY |
| select ARCH_MEM_DOMAIN_SYNCHRONOUS_API if USERSPACE |
| select CURRENT_THREAD_USE_NO_TLS if USERSPACE |
| select EXPERIMENTAL |
| # TODO: the target the MPU code developed on (basically sample_controller |
| # plus MPU minus s32c1i) does not have cache or SMP capability. |
| # Need to verify functionalities with targets supporting these. |
| depends on !CACHE && !SMP |
| help |
| Enable support for Xtensa Memory Protection Unit. |
| |
| if XTENSA_MPU |
| |
| config XTENSA_MPU_DEFAULT_MEM_TYPE |
| hex "Default Memory Type" |
| default 0x18 |
| help |
| Default memory type for memory regions: non-cacheable memory, |
| non-shareable, non-bufferable and interruptible. |
| |
| If userspace is enabled, it will be used to restore the memory type of |
| the region being removed from a memory domain. |
| |
| config XTENSA_MPU_ONLY_SOC_RANGES |
| bool |
| help |
| Enable this by the SoC to indicate to the architecture code to use |
| the MPU ranges specified by SoC only, and skip the common ranges |
| defined in the core architecture code. This gives total control to |
| the SoC on the MPU ranges. |
| |
| endif # XTENSA_MPU |
| |
| endif # CPU_HAS_MPU |
| |
| config XTENSA_SYSCALL_USE_HELPER |
| bool "Use userspace syscall helper" |
| default y if "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "xt-clang" |
| depends on (XTENSA_MMU || XTENSA_MPU) && USERSPACE |
| help |
| Use syscall helpers for passing more then 3 arguments. |
| This is a workaround for toolchains where they have |
| issue modeling register usage. |
| |
| config XTENSA_INSECURE_USERSPACE |
| bool |
| default y |
| depends on (XTENSA_MMU || XTENSA_MPU) && USERSPACE |
| |
| endmenu |