1fa8f86a1SJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 2fa8f86a1SJerin Jacob * Copyright(C) 2021 Marvell. 3fa8f86a1SJerin Jacob */ 4fa8f86a1SJerin Jacob 501bc01e1SJerin Jacob #include <rte_log.h> 601bc01e1SJerin Jacob 7fa8f86a1SJerin Jacob #include "roc_api.h" 8014a9e22SJerin Jacob 9c92d8a70SAshwin Sekhar T K #define PLT_INIT_CB_MAX 8 10c92d8a70SAshwin Sekhar T K 11c92d8a70SAshwin Sekhar T K static int plt_init_cb_num; 12c92d8a70SAshwin Sekhar T K static roc_plt_init_cb_t plt_init_cbs[PLT_INIT_CB_MAX]; 13c92d8a70SAshwin Sekhar T K 14c92d8a70SAshwin Sekhar T K int 15c92d8a70SAshwin Sekhar T K roc_plt_init_cb_register(roc_plt_init_cb_t cb) 16c92d8a70SAshwin Sekhar T K { 17c92d8a70SAshwin Sekhar T K if (plt_init_cb_num >= PLT_INIT_CB_MAX) 18c92d8a70SAshwin Sekhar T K return -ERANGE; 19c92d8a70SAshwin Sekhar T K 20c92d8a70SAshwin Sekhar T K plt_init_cbs[plt_init_cb_num++] = cb; 21c92d8a70SAshwin Sekhar T K return 0; 22c92d8a70SAshwin Sekhar T K } 23c92d8a70SAshwin Sekhar T K 2436808adbSRahul Bhansali uint16_t 2536808adbSRahul Bhansali roc_plt_control_lmt_id_get(void) 2636808adbSRahul Bhansali { 2736808adbSRahul Bhansali uint32_t lcore_id = plt_lcore_id(); 2836808adbSRahul Bhansali if (lcore_id != LCORE_ID_ANY) 2936808adbSRahul Bhansali return lcore_id << ROC_LMT_LINES_PER_CORE_LOG2; 3036808adbSRahul Bhansali else 3136808adbSRahul Bhansali /* Return Last LMT ID to be use in control path functionality */ 3236808adbSRahul Bhansali return ROC_NUM_LMT_LINES - 1; 3336808adbSRahul Bhansali } 3436808adbSRahul Bhansali 3536808adbSRahul Bhansali uint16_t 3636808adbSRahul Bhansali roc_plt_lmt_validate(void) 3736808adbSRahul Bhansali { 3836808adbSRahul Bhansali if (!roc_model_is_cn9k()) { 3936808adbSRahul Bhansali /* Last LMT line is reserved for control specific operation and can be 4036808adbSRahul Bhansali * use from any EAL or non EAL cores. 4136808adbSRahul Bhansali */ 4236808adbSRahul Bhansali if ((RTE_MAX_LCORE << ROC_LMT_LINES_PER_CORE_LOG2) > 4336808adbSRahul Bhansali (ROC_NUM_LMT_LINES - 1)) 4436808adbSRahul Bhansali return 0; 4536808adbSRahul Bhansali } 4636808adbSRahul Bhansali return 1; 4736808adbSRahul Bhansali } 4836808adbSRahul Bhansali 49014a9e22SJerin Jacob int 50014a9e22SJerin Jacob roc_plt_init(void) 51014a9e22SJerin Jacob { 52014a9e22SJerin Jacob const struct rte_memzone *mz; 53c92d8a70SAshwin Sekhar T K int i, rc; 54014a9e22SJerin Jacob 55014a9e22SJerin Jacob mz = rte_memzone_lookup(PLT_MODEL_MZ_NAME); 56014a9e22SJerin Jacob if (rte_eal_process_type() == RTE_PROC_PRIMARY) { 57014a9e22SJerin Jacob if (mz == NULL) { 58014a9e22SJerin Jacob mz = rte_memzone_reserve(PLT_MODEL_MZ_NAME, 59014a9e22SJerin Jacob sizeof(struct roc_model), 60014a9e22SJerin Jacob SOCKET_ID_ANY, 0); 61014a9e22SJerin Jacob if (mz == NULL) { 62014a9e22SJerin Jacob plt_err("Failed to reserve mem for roc_model"); 63014a9e22SJerin Jacob return -ENOMEM; 64014a9e22SJerin Jacob } 655f27618bSHanumanth Pothula if (roc_model_init(mz->addr)) { 665f27618bSHanumanth Pothula plt_err("Failed to init roc_model"); 675f27618bSHanumanth Pothula rte_memzone_free(mz); 685f27618bSHanumanth Pothula return -EINVAL; 695f27618bSHanumanth Pothula } 70014a9e22SJerin Jacob } 71014a9e22SJerin Jacob } else { 72014a9e22SJerin Jacob if (mz == NULL) { 73014a9e22SJerin Jacob plt_err("Failed to lookup mem for roc_model"); 74014a9e22SJerin Jacob return -ENOMEM; 75014a9e22SJerin Jacob } 76014a9e22SJerin Jacob roc_model = mz->addr; 77014a9e22SJerin Jacob } 78014a9e22SJerin Jacob 79c92d8a70SAshwin Sekhar T K for (i = 0; i < plt_init_cb_num; i++) { 80c92d8a70SAshwin Sekhar T K rc = (*plt_init_cbs[i])(); 81c92d8a70SAshwin Sekhar T K if (rc) 82c92d8a70SAshwin Sekhar T K return rc; 83c92d8a70SAshwin Sekhar T K } 84c92d8a70SAshwin Sekhar T K 85014a9e22SJerin Jacob return 0; 86014a9e22SJerin Jacob } 8701bc01e1SJerin Jacob 88*adc561fcSRakesh Kudurumalla RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_base, base, INFO); 89455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_mbox, mbox, NOTICE); 90455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_cpt, crypto, NOTICE); 91455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_ml, ml, NOTICE); 92455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_npa, mempool, NOTICE); 93455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_nix, nix, NOTICE); 94455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_npc, flow, NOTICE); 95455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_sso, event, NOTICE); 96455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_tim, timer, NOTICE); 97455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_tm, tm, NOTICE); 98455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_dpi, dpi, NOTICE); 99455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_rep, rep, NOTICE); 100455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_esw, esw, NOTICE); 101455a771fSAnoob Joseph RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_ree, ree, NOTICE); 102