From patchwork Wed Apr 23 09:53:54 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taras Kondratiuk X-Patchwork-Id: 28860 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ig0-f199.google.com (mail-ig0-f199.google.com [209.85.213.199]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id F3F8A20534 for ; Wed, 23 Apr 2014 09:54:43 +0000 (UTC) Received: by mail-ig0-f199.google.com with SMTP id c1sf2681128igq.6 for ; Wed, 23 Apr 2014 02:54:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:subject:precedence:list-id:list-unsubscribe:list-archive :list-post:list-help:list-subscribe:mime-version:errors-to:sender :x-original-sender:x-original-authentication-results:mailing-list :content-type:content-transfer-encoding; bh=XtPcfPqrfz5X+bwc5m+r04DYdhLrXKHSM9KsOd6SijU=; b=l7dEqikSLIiHShxM4BPW0NX7Jf7GgnitZ0M+6VF4c5C+Qbz1V0p6cvadsRwLm9hP2E hvZ0uASMTQjoSXMMxeLqvO1kFxnYTv0hEvl38rDaXCSOTHxz6DZ60Ovz6eEMMqns+g8Q bQAN4cxnR62mSrfXoGrtTcdPL54HMO3O2jL6SaGykvnF+VJ3r3woaDl/rIgIFDdUS9Xc Iz5Uw2qCPqnmevX+iz4z1l+ClGaDBwFVPcQyAPLaJmZ/Kyk2EaVDydlSJntd7UNuXOZB PdVCIS99dUh/LH1zeETHu+k6XvscsCmj0/iZNmzRA5pmIOr6EXu/JaPLuq1VtG5yZFeE TSQw== X-Gm-Message-State: ALoCoQmSSlLQ1dMdHhAkEF31TZkBL1qaN7Ilrb1AvDV2it6CGdPmqqrKVPS0XxJjv2Pg0/eygeyZ X-Received: by 10.42.235.206 with SMTP id kh14mr19512985icb.30.1398246883326; Wed, 23 Apr 2014 02:54:43 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.42.20 with SMTP id b20ls493299qga.5.gmail; Wed, 23 Apr 2014 02:54:43 -0700 (PDT) X-Received: by 10.220.4.132 with SMTP id 4mr42076938vcr.9.1398246883155; Wed, 23 Apr 2014 02:54:43 -0700 (PDT) Received: from mail-ve0-f174.google.com (mail-ve0-f174.google.com [209.85.128.174]) by mx.google.com with ESMTPS id w15si76838vcz.73.2014.04.23.02.54.43 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 23 Apr 2014 02:54:43 -0700 (PDT) Received-SPF: none (google.com: patch+caf_=patchwork-forward=linaro.org@linaro.org does not designate permitted sender hosts) client-ip=209.85.128.174; Received: by mail-ve0-f174.google.com with SMTP id oz11so821569veb.5 for ; Wed, 23 Apr 2014 02:54:43 -0700 (PDT) X-Received: by 10.220.190.197 with SMTP id dj5mr40342100vcb.19.1398246883055; Wed, 23 Apr 2014 02:54:43 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.220.221.72 with SMTP id ib8csp90705vcb; Wed, 23 Apr 2014 02:54:42 -0700 (PDT) X-Received: by 10.224.22.195 with SMTP id o3mr55212414qab.51.1398246882186; Wed, 23 Apr 2014 02:54:42 -0700 (PDT) Received: from ip-10-141-164-156.ec2.internal (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTPS id l59si190791qga.108.2014.04.23.02.54.41 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 23 Apr 2014 02:54:42 -0700 (PDT) Received-SPF: none (google.com: lng-odp-bounces@lists.linaro.org does not designate permitted sender hosts) client-ip=54.225.227.206; Received: from localhost ([127.0.0.1] helo=ip-10-141-164-156.ec2.internal) by ip-10-141-164-156.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1Wctsi-00059x-MU; Wed, 23 Apr 2014 09:54:20 +0000 Received: from mail-ee0-f51.google.com ([74.125.83.51]) by ip-10-141-164-156.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1WctsP-00057v-4V for lng-odp@lists.linaro.org; Wed, 23 Apr 2014 09:54:01 +0000 Received: by mail-ee0-f51.google.com with SMTP id c13so559369eek.24 for ; Wed, 23 Apr 2014 02:54:16 -0700 (PDT) X-Received: by 10.14.22.69 with SMTP id s45mr61630325ees.56.1398246855956; Wed, 23 Apr 2014 02:54:15 -0700 (PDT) Received: from uglx0153363.synapse.com ([195.238.92.128]) by mx.google.com with ESMTPSA id o4sm4757906eef.20.2014.04.23.02.54.13 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 23 Apr 2014 02:54:14 -0700 (PDT) From: Taras Kondratiuk To: lng-odp@lists.linaro.org Date: Wed, 23 Apr 2014 12:53:54 +0300 Message-Id: <1398246839-15554-5-git-send-email-taras.kondratiuk@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1398246839-15554-1-git-send-email-taras.kondratiuk@linaro.org> References: <1398246839-15554-1-git-send-email-taras.kondratiuk@linaro.org> Subject: [lng-odp] [PATCH v3 4/9] Keystone2: Initialize hardware X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Errors-To: lng-odp-bounces@lists.linaro.org Sender: lng-odp-bounces@lists.linaro.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: taras.kondratiuk@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: patch+caf_=patchwork-forward=linaro.org@linaro.org does not designate permitted sender hosts) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 Initialize hardware and helper libraries environment on ODP init. Assume OpenEM helper libraries and their headers can be found in standard locations. Signed-off-by: Taras Kondratiuk --- platform/linux-keystone2/Makefile | 19 ++- .../include/configs/odp_config_platform.h | 57 ++++++++ .../include/configs/odp_config_platform_c6638.h | 95 ++++++++++++ platform/linux-keystone2/source/odp_init.c | 151 ++++++++++++++++++++ 4 files changed, 320 insertions(+), 2 deletions(-) create mode 100644 platform/linux-keystone2/include/configs/odp_config_platform.h create mode 100644 platform/linux-keystone2/include/configs/odp_config_platform_c6638.h create mode 100644 platform/linux-keystone2/source/odp_init.c diff --git a/platform/linux-keystone2/Makefile b/platform/linux-keystone2/Makefile index ba8cdc6..049809b 100644 --- a/platform/linux-keystone2/Makefile +++ b/platform/linux-keystone2/Makefile @@ -13,6 +13,16 @@ DOC_DIR = ./doc LINUX_GENERIC_DIR = ../linux-generic +MY_PLATFORM = DEVICE_K2K + +PLAT_CFLAGS = -D$(MY_PLATFORM) +PLAT_CFLAGS += -D_GNU_SOURCE -DEM_32_BIT -DTI_EM_CENTRAL_SCHED +PLAT_CFLAGS += -DTI_EM_TRACE_LEVEL=3 -DEM_CHECK_LEVEL=1 +PLAT_CFLAGS += -DTI_EM_LINUX -DTI_EM_GCC -DTI_EM_ARM_A15 -DTI_EM_C6638 +PLAT_CFLAGS += -D_LITTLE_ENDIAN -DTI_EM_USE_MSM -DTI_EM_XGE_LOOPBACK +PLAT_CFLAGS += -DTI_ODP + +EXTRA_CFLAGS += $(PLAT_CFLAGS) EXTRA_CFLAGS += -I$(ODP_ROOT)/include EXTRA_CFLAGS += -I./include EXTRA_CFLAGS += -I./include/api @@ -70,8 +80,13 @@ $(OBJ_DIR)/%.o: %.c # # Lib rule # -$(STATIC_LIB): $(OBJS) - $(AR) -cr $@ $(OBJS) +$(OBJ_DIR)/libodp.o: $(OBJS) + $(ECHO) " LD $@" + $(LD) -r -o $@ $(OBJS) $(LDFLAGS) -lopenem_rh -lopenem_osal + +$(STATIC_LIB): $(OBJ_DIR)/libodp.o + $(ECHO) " AR $@" + $(AR) -cr $@ $(OBJ_DIR)/libodp.o clean: $(RMDIR) $(OBJ_DIR) diff --git a/platform/linux-keystone2/include/configs/odp_config_platform.h b/platform/linux-keystone2/include/configs/odp_config_platform.h new file mode 100644 index 0000000..bcad278 --- /dev/null +++ b/platform/linux-keystone2/include/configs/odp_config_platform.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2012, Texas Instruments Incorporated - http://www.ti.com/ + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Texas Instruments Incorporated 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 OWNER 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. + */ + + +#ifndef ODP_CONFIG_PLATFORM_H_ +#define ODP_CONFIG_PLATFORM_H_ + +/* #include */ +#if defined(TI_EM_C6678) +#include +#elif defined(TI_EM_C6614) +#include +#elif defined(TI_EM_C6638) +#include +#else +#error "platform not defined or unsupported!" +#endif + +#define TI_ODP_PUBLIC_DESC_SIZE (64u) +#define TI_ODP_PUBLIC_DESC_NUM (4096u) +#define TI_ODP_REGION_NUM (2) /* local regions are not used on Linux */ + +#define MY_EM_DEVICE_ID (0) +#define MY_EM_PROCESS_ID (0) + +/* + * Queue, pool and event definitions + */ +#define MY_EM_PROC_QUEUE_NUM (32) +#define MY_EM_PROC_QUEUE_TYPE (EM_QUEUE_TYPE_PARALLEL) +#define MY_EM_PROC_EVENT_TYPE (TI_EM_EVENT_TYPE_PRELOAD_OFF) + +#endif /* ODP_CONFIG_PLATFORM_H_ */ diff --git a/platform/linux-keystone2/include/configs/odp_config_platform_c6638.h b/platform/linux-keystone2/include/configs/odp_config_platform_c6638.h new file mode 100644 index 0000000..1b05ebf --- /dev/null +++ b/platform/linux-keystone2/include/configs/odp_config_platform_c6638.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2012, Texas Instruments Incorporated - http://www.ti.com/ + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Texas Instruments Incorporated 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 OWNER 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. + */ + + +/* + * This is the typical configuration for TCI6638 (KeyStone 2, Linux ARM A15) + * + * Descriptors and PDSP communications memory must reside in contiguous and coherent DDR + * (using CMA). + * + * On KeyStone2 QMSS regions do not need to be ordered. + */ +#ifndef ODP_CONFIG_PLATFORM_C6638_H_ +#define ODP_CONFIG_PLATFORM_C6638_H_ + +/* Cores are here "EM cores" that are not necessarily tied to real "CPU cores" */ +#define MY_EM_CORE_NUM (4) /* number of cores used by OpenEM */ +#define MY_EM_INIT_CORE_IDX (0) /* core on which the init will be started */ + +/* Index of the QMSS PDSP that will be used by OpenEM, Linux use QMSS PDSP0 for accumulator */ +#define MY_EM_SCHED_PDSP_IDX (2) + +/* Define if we are polling or waiting on event interrupts when dispatching events */ +#define MY_EM_DISPATCH_MODE (TI_EM_RH_POLL_MODE) + +/* + * Coherent contiguous memory used for PDSP <-> CPU communication + * We use one page per slot and CORE_NUM + 2 slots + */ +#ifdef TI_EM_USE_MSM +#define MY_EM_PDSP_COMM_MEM_BASE (0x0c000000) /* MSM */ +#else +#define MY_EM_PDSP_COMM_MEM_BASE (0x0) /* use DDR from CMA (contiguous & coherent)*/ +#endif +#define MY_EM_PDSP_COMM_MEM_VBASE (0x0) /* dynamic mapping */ +#define MY_EM_PDSP_COMM_MEM_SIZE (0x00010000) /* allowing 16 slots */ +#define MY_EM_PDSP_COMM_MEM_OFFSET (0x0) /* no offset */ + +/* + * Base physical address for event descriptors. + * In the future in will be managed by Linux or platform resource manager. + */ +#ifdef TI_EM_USE_MSM +#define TI_ODP_PUBLIC_DESC_BASE (0x0c100000) /* MSM */ +#define TI_ODP_PUBLIC_DESC_VBASE (0x0) /* dynamic mapping */ +#define TI_ODP_PUBLIC_DESC_OFFSET (0x0) /* no offset, QMSS/PDSP mapping equal to CPU mapping */ +#else /* TI_EM_USE_MSM */ +#define TI_ODP_PUBLIC_DESC_BASE (0x0) /* use DDR from CMA (contiguous & coherent)*/ +#define TI_ODP_PUBLIC_DESC_VBASE (0x0) /* dynamic mapping */ +#define TI_ODP_PUBLIC_DESC_OFFSET (0x0) /* no offset, QMSS/PDSP mapping equal to CPU mapping */ +#endif /* TI_EM_USE_MSM */ + +#define TI_ODP_PUBLIC_REGION_IDX (1) /* Linux uses 12 & 13 on ARM, set in DTS */ +#define TI_ODP_PRIVATE_REGION_IDX (2) +#define TI_ODP_PUBLIC_START_DESC_IDX (0) /* start index for desc (Linux starts at 0x4000, set in DTS) */ +#define TI_ODP_PRIVATE_START_DESC_IDX (-1) /* Automatically computed */ + +#define TI_ODP_PRIVATE_DESC_BASE (TI_EM_PDSPSH_DRAM) /* use PDSP data RAM */ +#define TI_ODP_PRIVATE_DESC_OFFSET (TI_EM_PDSP_DRAM_OFFSET) /* offset between CPU and QMSS/PDSP mapping */ +#define TI_ODP_PRIVATE_DESC_VBASE (0x0) /* dynamic mapping */ + +/* + * For the time being, free queues that can be used from user application are + * harcoded here. In the future it will be provided by platform resource manager. + */ +#define TI_ODP_PUBLIC_QUEUE_BASE_IDX (QMSS_GENERAL_PURPOSE_USER_QUEUE_BASE) +#define TI_ODP_FREE_QUEUE_BASE_IDX (TI_ODP_PUBLIC_QUEUE_BASE_IDX + ODP_CONFIG_QUEUES) +#define MY_EM_PRIVATE_FREE_QUEUE_IDX (TI_ODP_FREE_QUEUE_BASE_IDX + ODP_CONFIG_BUFFER_POOLS) +#define MY_EM_SCHED_QUEUE_IDX (MY_EM_PRIVATE_FREE_QUEUE_IDX + 2) + +#endif /* ODP_CONFIG_PLATFORM_C6638_H_ */ diff --git a/platform/linux-keystone2/source/odp_init.c b/platform/linux-keystone2/source/odp_init.c new file mode 100644 index 0000000..b466e67 --- /dev/null +++ b/platform/linux-keystone2/source/odp_init.c @@ -0,0 +1,151 @@ +/* Copyright (c) 2013, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Make region_configs[] global, because hw_config is saved in + * ti_em_rh_init_global() and it references region_configs[]. + */ +static ti_em_osal_hw_region_config_t region_configs[TI_ODP_REGION_NUM]; + +static int ti_init_hw_config(void) +{ + ti_em_rh_hw_config_t hw_config; + ti_em_osal_hw_region_config_t *reg_config; + memset(&hw_config, 0, sizeof(ti_em_rh_hw_config_t)); + + /* Set ODP initialization parameters */ + hw_config.private_free_queue_idx = MY_EM_PRIVATE_FREE_QUEUE_IDX; + hw_config.hw_queue_base_idx = MY_EM_SCHED_QUEUE_IDX; + hw_config.dma_idx = -1; /* not used */ + hw_config.dma_queue_base_idx = 0; /* not used */ + hw_config.device_id = MY_EM_DEVICE_ID; + hw_config.process_id = MY_EM_PROCESS_ID; + hw_config.chain_config_ptr = NULL; + hw_config.dispatch_mode = MY_EM_DISPATCH_MODE; + + /* The location of the PDSP communication memory (physical address) */ + hw_config.pdsp_comm_mem_config.paddr = MY_EM_PDSP_COMM_MEM_BASE; + hw_config.pdsp_comm_mem_config.vaddr = MY_EM_PDSP_COMM_MEM_VBASE; + hw_config.pdsp_comm_mem_config.size = MY_EM_PDSP_COMM_MEM_SIZE; + hw_config.pdsp_comm_mem_config.offset = MY_EM_PDSP_COMM_MEM_OFFSET; + + TI_EM_OSAL_TRACE(2, "physical address of the PDSP communication memory is 0x%x\n", + hw_config.pdsp_comm_mem_config.paddr); + + /* Define descriptor regions */ + reg_config = ®ion_configs[TI_EM_RH_PUBLIC]; + reg_config->region_idx = TI_ODP_PUBLIC_REGION_IDX; + reg_config->desc_size = TI_ODP_PUBLIC_DESC_SIZE; + reg_config->desc_num = TI_ODP_PUBLIC_DESC_NUM; + reg_config->desc_base = TI_ODP_PUBLIC_DESC_BASE; + reg_config->desc_vbase = TI_ODP_PUBLIC_DESC_VBASE; + reg_config->desc_offset = TI_ODP_PUBLIC_DESC_OFFSET; + reg_config->desc_flag = TI_EM_RH_UNMANAGED_DESCRIPTOR; + reg_config->start_idx = TI_ODP_PUBLIC_START_DESC_IDX; + + reg_config = ®ion_configs[TI_EM_RH_PRIVATE]; + reg_config->region_idx = TI_ODP_PRIVATE_REGION_IDX; + reg_config->desc_size = TI_EM_PRIVATE_EVENT_DSC_SIZE; + reg_config->desc_num = TI_EM_RH_PRIVATE_EVENT_NUM; + reg_config->desc_base = TI_ODP_PRIVATE_DESC_BASE; + reg_config->desc_vbase = TI_ODP_PRIVATE_DESC_VBASE; + reg_config->desc_offset = TI_ODP_PRIVATE_DESC_OFFSET; + reg_config->desc_flag = TI_EM_RH_UNMANAGED_DESCRIPTOR; + reg_config->start_idx = TI_ODP_PRIVATE_START_DESC_IDX; + + hw_config.region_num = TI_ODP_REGION_NUM; + hw_config.region_configs = ®ion_configs[0]; + + /* Define PDSP configuration */ + hw_config.pdsp_num = 0; + /* do not use router (no chaining) */ + hw_config.pdsp_router.pdsp_id = -1; + + TI_EM_OSAL_TRACE(1, "calling EM global initialization\n"); + + /* call OpenEM global initialization */ + if (ti_em_rh_init_global(0, + NULL, + MY_EM_CORE_NUM, + &hw_config) != EM_OK) { + TI_EM_OSAL_ERROR("EM global initialization failed!\n"); + return -1; + } + + return 0; +} + + +int odp_init_global(void) +{ + odp_thread_init_global(); + + odp_system_info_init(); + + ti_em_osal_core_init_global(); + ti_init_hw_config(); + + if (odp_shm_init_global()) { + ODP_ERR("ODP shm init failed.\n"); + return -1; + } + + if (odp_buffer_pool_init_global()) { + ODP_ERR("ODP buffer pool init failed.\n"); + return -1; + } + + if (odp_queue_init_global()) { + ODP_ERR("ODP queue init failed.\n"); + return -1; + } + + if (odp_schedule_init_global()) { + ODP_ERR("ODP schedule init failed.\n"); + return -1; + } + + if (odp_pktio_init_global()) { + ODP_ERR("ODP packet io init failed.\n"); + return -1; + } + + if (odp_timer_init_global()) { + ODP_ERR("ODP timer init failed.\n"); + return -1; + } + + return 0; +} + + +int odp_init_local(int thr_id) +{ + odp_thread_init_local(thr_id); + + ti_em_rh_init_local(); + + if (odp_pktio_init_local()) { + ODP_ERR("ODP packet io local init failed.\n"); + return -1; + } + + if (odp_schedule_init_local()) { + ODP_ERR("ODP schedule local init failed.\n"); + return -1; + } + + return 0; +}