/* ------------------------------------------ | |
* Copyright (c) 2016, Synopsys, Inc. All rights reserved. | |
* Redistribution and use in source and binary forms, with or without modification, | |
* are permitted provided that the following conditions are met: | |
* 1) Redistributions of source code must retain the above copyright notice, this | |
* list of conditions and the following disclaimer. | |
* 2) Redistributions in binary form must reproduce the above copyright notice, | |
* this list of conditions and the following disclaimer in the documentation and/or | |
* other materials provided with the distribution. | |
* 3) Neither the name of the Synopsys, Inc., nor the names of its contributors may | |
* be used to endorse or promote products derived from this software without | |
* specific prior written permission. | |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | |
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | |
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
* | |
* \version 2016.05 | |
* \date 2016-09-08 | |
* \author Huaqi Fang(Huaqi.Fang@synopsys.com) | |
--------------------------------------------- */ | |
/** | |
* \file | |
* \ingroup ARC_HAL_MISC | |
* \brief header file for arc feature configuration | |
*/ | |
/** | |
* \addtogroup ARC_HAL_MISC | |
* @{ | |
*/ | |
#ifndef _ARC_FEATURE_CONFIG_H_ | |
#define _ARC_FEATURE_CONFIG_H_ | |
// Enable core_config.h in EMSK OSP | |
//#ifdef EMBARC_TCF_GENERATED | |
#include "arc_core_config.h" | |
//#endif | |
/** ARC baseline instruction set version number */ | |
#if !defined(_ARCVER) | |
#if defined(core_config_cir_identity_arcver) | |
#define _ARCVER core_config_cir_identity_arcver | |
#else | |
#define _ARCVER 0x42 | |
#endif | |
#endif | |
/** ARC CPU Clock Frequency in Hz unit */ | |
#if !defined(ARC_FEATURE_CPU_CLOCK_FREQ) | |
#if defined(core_config_clock_speed) | |
#define ARC_FEATURE_CPU_CLOCK_FREQ (core_config_clock_speed*1000000) | |
#endif | |
#endif | |
/** ARC PC size */ | |
#if !defined(ARC_FEATURE_PC_SIZE) | |
#if defined(core_config_pc_size) | |
#define ARC_FEATURE_PC_SIZE core_config_pc_size | |
#else | |
#define ARC_FEATURE_PC_SIZE 32 | |
#endif | |
#endif | |
/** ARC LPC size */ | |
#if !defined(ARC_FEATURE_LPC_SIZE) | |
#if defined(core_config_lpc_size) | |
#define ARC_FEATURE_LPC_SIZE core_config_lpc_size | |
#else | |
#define ARC_FEATURE_LPC_SIZE 32 | |
#endif | |
#endif | |
/** ARC Addr size */ | |
#if !defined(ARC_FEATURE_ADDR_SIZE) | |
#if defined(core_config_addr_size) | |
#define ARC_FEATURE_ADDR_SIZE core_config_addr_size | |
#else | |
#define ARC_FEATURE_ADDR_SIZE 32 | |
#endif | |
#endif | |
/** ARC Endian/Byte Order */ | |
#define ARC_FEATURE_LITTLE_ENDIAN 1234 | |
#define ARC_FEATURE_BIG_ENDIAN 4321 | |
#if !defined(ARC_FEATURE_BYTE_ORDER) | |
#if defined(core_config_bcr_isa_config_b) | |
#if core_config_bcr_isa_config_b == 0 | |
#define ARC_FEATURE_BYTE_ORDER ARC_FEATURE_LITTLE_ENDIAN | |
#else | |
#define ARC_FEATURE_BYTE_ORDER ARC_FEATURE_BIG_ENDIAN | |
#endif | |
#else | |
#define ARC_FEATURE_BYTE_ORDER ARC_FEATURE_LITTLE_ENDIAN | |
#endif | |
#endif | |
/** Reduced register option, if enabled, ARC_FEATURE_RF16 will be defined */ | |
#if !defined(ARC_FEATURE_RF16) | |
#if defined(core_config_bcr_rf_build_e) && core_config_bcr_rf_build_e == 1 | |
#define ARC_FEATURE_RF16 | |
#endif | |
#endif | |
/** Unaligned access option, if enabled, ARC_FEATURE_UNALIGNED will be defined */ | |
#if !defined(ARC_FEATURE_UNALIGNED) | |
#if defined(core_config_unaligned) && core_config_unaligned == 1 | |
#define ARC_FEATURE_UNALIGNED | |
#endif | |
#endif | |
/** Code density option, if enabled, ARC_FEATURE_CODE_DENSITY will be defined */ | |
#if !defined(ARC_FEATURE_CODE_DENSITY) | |
#if defined(core_config_code_density) && core_config_code_density == 1 | |
#define ARC_FEATURE_CODE_DENSITY | |
#endif | |
#endif | |
/** The number of register file banks */ | |
#if !defined(ARC_FEATURE_RGF_NUM_BANKS) | |
#if defined(core_config_rgf_num_banks) | |
#define ARC_FEATURE_RGF_NUM_BANKS core_config_rgf_num_banks | |
#else | |
#define ARC_FEATURE_RGF_NUM_BANKS 1 | |
#endif | |
#endif | |
/** The number of registers replicated per register bank */ | |
#if !defined(ARC_FEATURE_RGF_BANKED_REGS) | |
#if defined(core_config_rgf_banked_regs) | |
#define ARC_FEATURE_RGF_BANKED_REGS core_config_rgf_banked_regs | |
#endif | |
#endif | |
/** Interrupt unit presence */ | |
#if !defined(ARC_FEATURE_INTERRUPTS_PRESENT) | |
#if defined(core_config_interrupts_present) | |
#define ARC_FEATURE_INTERRUPTS_PRESENT core_config_interrupts_present | |
#endif | |
#endif | |
/** FIRQ_OPTION configuration option, 1 for enabled, 0 for disabled */ | |
#if !defined(ARC_FEATURE_FIRQ) | |
#if defined(core_config_bcr_irq_build_f) | |
#define ARC_FEATURE_FIRQ core_config_bcr_irq_build_f | |
#else | |
#define ARC_FEATURE_FIRQ 0 | |
#endif | |
#endif | |
/** The number of interrupts */ | |
#if !defined(NUM_EXC_INT) | |
#if defined(core_config_interrupts_number) | |
#define NUM_EXC_INT core_config_interrupts_number | |
#endif | |
#endif | |
/** The number of external interrupts */ | |
#if !defined(NUM_EXC_EXT_INT) | |
#if defined(core_config_interrupts_externals) | |
#define NUM_EXC_EXT_INT core_config_interrupts_externals | |
#endif | |
#endif | |
/** The interrupt priority levels */ | |
#if !defined(INT_PRI_MIN) | |
#if defined(core_config_interrupts_priorities) | |
#define INT_PRI_MIN (-core_config_interrupts_priorities) | |
#endif | |
#endif | |
// ARC TIMER_BUILD | |
/** Timer0 present or not */ | |
#if !defined(ARC_FEATURE_TIMER0_PRESENT) | |
#if defined(core_config_timer0) | |
#define ARC_FEATURE_TIMER0_PRESENT core_config_timer0 | |
#define ARC_FEATURE_TIMER0_LEVEL (core_config_timer0_level-core_config_interrupts_priorities) | |
#define ARC_FEATURE_TIMER0_VECTOR core_config_timer0_vector | |
#endif | |
#endif | |
/** Timer1 present or not */ | |
#if !defined(ARC_FEATURE_TIMER1_PRESENT) | |
#if defined(core_config_timer1) | |
#define ARC_FEATURE_TIMER1_PRESENT core_config_timer1 | |
#define ARC_FEATURE_TIMER1_LEVEL (core_config_timer1_level-core_config_interrupts_priorities) | |
#define ARC_FEATURE_TIMER1_VECTOR core_config_timer1_vector | |
#endif | |
#endif | |
/** Secure Timer0 present or not */ | |
#if !defined(ARC_FEATURE_SEC_TIMER0_PRESENT) | |
#if defined(core_config_sec_timer0) | |
#define ARC_FEATURE_SEC_TIMER0_PRESENT core_config_sec_timer0 | |
#define ARC_FEATURE_SEC_TIMER0_LEVEL (core_config_sec_timer0_level-core_config_interrupts_priorities) | |
#define ARC_FEATURE_SEC_TIMER0_VECTOR 20 | |
#endif | |
#endif | |
/** Secure Timer1 present or not */ | |
#if !defined(ARC_FEATURE_SEC_TIMER1_PRESENT) | |
#if defined(core_config_sec_timer1) | |
#define ARC_FEATURE_SEC_TIMER1_PRESENT core_config_sec_timer1 | |
#define ARC_FEATURE_SEC_TIMER1_LEVEL (core_config_sec_timer1_level-core_config_interrupts_priorities) | |
#define ARC_FEATURE_SEC_TIMER1_VECTOR 21 | |
#endif | |
#endif | |
/** 64bit RTC present or not */ | |
#if !defined(ARC_FEATURE_RTC_PRESENT) | |
#if defined(core_config_rtc) | |
#define ARC_FEATURE_RTC_PRESENT core_config_rtc | |
#endif | |
#endif | |
// Memory related definitions | |
/** ICCM Presence, base address and size */ | |
#if !defined(ARC_FEATURE_ICCM_PRESENT) | |
#if defined(core_config_iccm_present) && core_config_iccm_present == 1 | |
#define ARC_FEATURE_ICCM_PRESENT 1 | |
#define ARC_FEATURE_ICCM_BASE core_config_iccm_base | |
#define ARC_FEATURE_ICCM_SIZE core_config_iccm_size | |
#endif | |
#endif | |
/** ICCM0 Presence, base address and size */ | |
#if !defined(ARC_FEATURE_ICCM0_PRESENT) | |
#if defined(core_config_iccm0_present) && core_config_iccm0_present == 1 | |
#define ARC_FEATURE_ICCM0_PRESENT 1 | |
#define ARC_FEATURE_ICCM0_BASE core_config_iccm0_base | |
#define ARC_FEATURE_ICCM0_SIZE core_config_iccm0_size | |
#endif | |
#endif | |
/** ICCM1 Presence, base address and size */ | |
#if !defined(ARC_FEATURE_ICCM1_PRESENT) | |
#if defined(core_config_iccm1_present) && core_config_iccm1_present == 1 | |
#define ARC_FEATURE_ICCM1_PRESENT 1 | |
#define ARC_FEATURE_ICCM1_BASE core_config_iccm1_base | |
#define ARC_FEATURE_ICCM1_SIZE core_config_iccm1_size | |
#endif | |
#endif | |
/** DCCM Presence, base address and size */ | |
#if !defined(ARC_FEATURE_DCCM_PRESENT) | |
#if defined(core_config_dccm_present) && core_config_dccm_present == 1 | |
#define ARC_FEATURE_DCCM_PRESENT 1 | |
#define ARC_FEATURE_DCCM_BASE core_config_dccm_base | |
#define ARC_FEATURE_DCCM_SIZE core_config_dccm_size | |
#ifdef core_config_dccm_interleave | |
#define ARC_FEATURE_DCCM_INTERLEAVE core_config_dccm_interleave | |
#endif | |
#endif | |
#endif | |
/** Peripheral memory region(DMP) base address, if dmp configured, this macro will be defined as base address */ | |
#if !defined(ARC_FEATURE_DMP_PERIPHERAL) | |
#if defined(core_config_cir_dmp_peripheral) | |
#define ARC_FEATURE_DMP_PERIPHERAL core_config_cir_dmp_peripheral | |
#endif | |
#endif | |
/** MPU options */ | |
#if !defined(ARC_FEATURE_MPU_PRESENT) | |
#if defined(core_config_mpu_present) && core_config_mpu_present == 1 | |
#define ARC_FEATURE_MPU_PRESENT 1 | |
#define ARC_FEATURE_MPU_VERSION core_config_bcr_mpu_build_version | |
#define ARC_FEATURE_MPU_REGIONS core_config_mpu_regions | |
#ifdef core_config_bcr_mpu_build_i | |
#define ARC_FEATURE_MPU_BUILD_I core_config_bcr_mpu_build_i | |
#endif | |
#ifdef core_config_bcr_mpu_build_s | |
#define ARC_FEATURE_MPU_BUILD_S core_config_bcr_mpu_build_s | |
#endif | |
#endif | |
#endif | |
/** Secure BCR SEC_BUILD BCR */ | |
#if !defined(ARC_FEATURE_SEC_PRESENT) | |
#if defined(core_config_bcr_sec_build) | |
#define ARC_FEATURE_SEC_PRESENT 1 | |
#define ARC_FEATURE_SEC_VERSION core_config_bcr_sec_build_version | |
#define ARC_FEATURE_SEC_BUILD_DSM core_config_bcr_sec_build_dsm | |
#define ARC_FEATURE_SEC_BUILD_NSM core_config_bcr_sec_build_nsm | |
#define ARC_FEATURE_SEC_BUILD_I1SM core_config_bcr_sec_build_i1sm | |
#define ARC_FEATURE_SEC_BUILD_I0SM core_config_bcr_sec_build_i0sm | |
#define ARC_FEATURE_SEC_BUILD_S core_config_bcr_sec_build_s | |
#define ARC_FEATURE_SEC_BUILD_EI core_config_bcr_sec_build_ei | |
#define ARC_FEATURE_SEC_BUILD_ED core_config_bcr_sec_build_ed | |
#endif | |
#endif | |
#if !defined(ARC_FEATURE_SEC_MODES) | |
#if defined(core_config_sec_modes) | |
#define ARC_FEATURE_SEC_MODES core_config_sec_modes | |
#endif | |
#endif | |
/** Data Cache options */ | |
#if !defined(ARC_FEATURE_DCACHE_PRESENT) | |
#if defined(core_config_dcache_present) && core_config_dcache_present == 1 | |
#define ARC_FEATURE_DCACHE_PRESENT 1 | |
#define ARC_FEATURE_DCACHE_BUILD core_config_bcr_d_cache_build | |
#define ARC_FEATURE_DCACHE_BUILD_VERSION core_config_bcr_d_cache_build_version | |
#define ARC_FEATURE_DCACHE_BUILD_ASSOC core_config_bcr_d_cache_build_assoc | |
#define ARC_FEATURE_DCACHE_BUILD_CAPACITY core_config_bcr_d_cache_build_capacity | |
#define ARC_FEATURE_DCACHE_BUILD_BSIZE core_config_bcr_d_cache_build_bsize | |
#define ARC_FEATURE_DCACHE_BUILD_FL core_config_bcr_d_cache_build_fl | |
#define ARC_FEATURE_DCACHE_BUILD_U core_config_bcr_d_cache_build_u | |
#define ARC_FEATURE_DCACHE_SIZE core_config_dcache_size | |
#define ARC_FEATURE_DCACHE_LINE_SIZE core_config_dcache_line_size | |
#define ARC_FEATURE_DCACHE_WAYS core_config_dcache_ways | |
#define ARC_FEATURE_DCACHE_FEATURE core_config_dcache_feature | |
#endif | |
#endif | |
/** Instruction Cache options */ | |
#if !defined(ARC_FEATURE_ICACHE_PRESENT) | |
#if defined(core_config_icache_present) && core_config_icache_present == 1 | |
#define ARC_FEATURE_ICACHE_PRESENT 1 | |
#define ARC_FEATURE_ICACHE_BUILD core_config_bcr_i_cache_build | |
#define ARC_FEATURE_ICACHE_BUILD_VERSION core_config_bcr_i_cache_build_version | |
#define ARC_FEATURE_ICACHE_BUILD_ASSOC core_config_bcr_i_cache_build_assoc | |
#define ARC_FEATURE_ICACHE_BUILD_CAPACITY core_config_bcr_i_cache_build_capacity | |
#define ARC_FEATURE_ICACHE_BUILD_BSIZE core_config_bcr_i_cache_build_bsize | |
#define ARC_FEATURE_ICACHE_BUILD_FL core_config_bcr_i_cache_build_fl | |
#define ARC_FEATURE_ICACHE_BUILD_D core_config_bcr_i_cache_build_d | |
#define ARC_FEATURE_ICACHE_SIZE core_config_icache_size | |
#define ARC_FEATURE_ICACHE_LINE_SIZE core_config_icache_line_size | |
#define ARC_FEATURE_ICACHE_WAYS core_config_icache_ways | |
#define ARC_FEATURE_ICACHE_FEATURE core_config_icache_feature | |
#endif | |
#endif | |
/** ARC uDMA options */ | |
#if !defined(ARC_FEATURE_DMAC) | |
#if defined(core_config_dmac) | |
#define ARC_FEATURE_DMAC core_config_dmac | |
#define CORE_DMAC_CHANNELS core_config_dmac_channels | |
#define CORE_DMAC_REGISTERS core_config_dmac_registers | |
#if core_config_bcr_dmac_build_int_cfg == 2 && core_config_bcr_dmac_build_int_cfg == 4 | |
#define DMA_MULTI_IRQ 1 | |
#else | |
#define DMA_MULTI_IRQ 0 | |
#endif | |
#define ARC_FEATURE_DMAC_PRESENT core_config_dmac | |
#define ARC_FEATURE_DMAC_VERSION core_config_bcr_dmac_build_version | |
#define ARC_FEATURE_DMAC_CHANNELS core_config_dmac_channels | |
#define ARC_FEATURE_DMAC_REGISTERS core_config_dmac_registers | |
#define ARC_FEATURE_DMAC_INT_CFG core_config_bcr_dmac_build_int_cfg | |
#define ARC_FEATURE_DMAC_FIFO_DEPTH core_config_dmac_fifo_depth | |
#ifdef ARC_FEATURE_SEC_TIMER0_PRESENT | |
#define DMA_IRQ_NUM_START 22 | |
#define ARC_FEATURE_DMAC_VECTOR_START 22 | |
#else | |
#define DMA_IRQ_NUM_START 20 | |
#define ARC_FEATURE_DMAC_VECTOR_START 20 | |
#endif | |
#endif | |
#endif | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
#ifdef ARC_FEATURE_UNALIGNED | |
#define STATUS32_RESET_VALUE (1<<19) | |
#else | |
#define STATUS32_RESET_VALUE (0) | |
#endif | |
#ifdef __cplusplus | |
} | |
#endif | |
#endif /* _ARC_FEATURE_CONFIG_H_ */ | |
/** @} */ |