398 lines
13 KiB
C
398 lines
13 KiB
C
/* ------------------------------------------
|
|
* 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_ */
|
|
|
|
/** @} */
|