/* * Copyright (C) 2018 ETH Zurich and University of Bologna * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __ARCHI_EU_EU_V3_H__ #define __ARCHI_EU_EU_V3_H__ /* * Register memory map */ // Global offsets #define EU_CORES_AREA_OFFSET 0x0000 #define EU_CORES_AREA_SIZE 0x0400 #define EU_CORE_AREA_SIZE_LOG2 6 #define EU_CORE_AREA_SIZE (1<>EU_CORE_AREA_SIZE_LOG2) #define EU_ROM_AREA_OFFSET_GET(coreId) (EU_CORE_AREA_OFFSET_GET(coreId) + EU_ROM_AREA_OFFSET) #define EU_BARRIER_AREA_OFFSET_GET(barrier) ((barrier)*EU_BARRIER_SIZE) #define EU_BARRIER_AREA_BARRIERID_GET(offset) (((offset) & (EU_BARRIER_AREA_SIZE - 1)) >> EU_BARRIER_SIZE_LOG2) #define EU_MUTEX_AREA_OFFSET_GET(mutex) ((mutex)*EU_MUTEX_AREA_SIZE) #define EU_MUTEX_AREA_MUTEXID_GET(offset) (((offset) & (EU_MUTEX_AREA_SIZE - 1)) >> 2) #define EU_DISPATCH_AREA_OFFSET_GET(dispatch) ((dispatch)*EU_DISPATCH_AREA_SIZE) #define EU_DISPATCH_AREA_DISPATCHID_GET(dispatch) (((offset) & (EU_DISPATCH_AREA_SIZE - 1)) >> 3) // Core area #define EU_CORE_TRIGG_SW_EVENT_OFFSET(event) (EU_CORE_TRIGG_SW_EVENT + ((event)*0x4)) #define EU_CORE_TRIGG_SW_EVENT_WAIT_OFFSET(event) (EU_CORE_TRIGG_SW_EVENT_WAIT + ((event)*0x4)) #define EU_CORE_TRIGG_SW_EVENT_WAIT_CLEAR_OFFSET(event) (EU_CORE_TRIGG_SW_EVENT_WAIT_CLEAR + ((event)*0x4)) // ROM area #define EU_ROM_EVENT_SOURCE_OFFSET(event) (EU_ROM_EVENT_SOURCE + ((event)*0x4)) // TODO should be moved to chip part ? #define PULP_NB_GP_EVENTS 8 #define PULP_FIRST_GP_EVENT 0 #define PULP_TIMER0_EVENT 10 #define PULP_TIMER1_EVENT 11 // TODO the real value is not yet specified #define EVENT_HWCE 15 #define PULP_HW_BAR_EVENT 16 #define PULP_MUTEX_EVENT 17 #define PULP_DISPATCH_EVENT 18 #define PULP_LOOP_EVENT 19 #if PULP_CHIP_FAMILY == CHIP_GAP #define PULP_FC_SOC_EVENTS_EVENT 27 #else #define PULP_FC_SOC_EVENTS_EVENT 26 #endif #define PULP_SOC_EVENTS_EVENT 27 #define PULP_SOC_TRIGGER_EVENT 28 #define PULP_SOC_LOCK_EVENT 29 #define PULP_SOC_HW_BAR_EVENT 30 // SOC areas #define EU_SOC_BARRIER_AREA_OFFSET_GET(barrier) ((barrier)*EU_SOC_BARRIER_SIZE) #define EU_SOC_BARRIER_AREA_BARRIERID_GET(offset) (((offset) & (EU_SOC_BARRIER_AREA_SIZE - 1)) >> EU_SOC_BARRIER_SIZE_LOG2) #define EU_SOC_LOCK_AREA_OFFSET_GET(lock) ((lock)*EU_SOC_LOCK_SIZE) #define EU_SOC_LOCK_AREA_LOCKID_GET(offset) (((offset) & (EU_SOC_LOCK_AREA_SIZE - 1)) >> EU_SOC_LOCK_SIZE_LOG2) #endif