xref: /dpdk/drivers/common/cnxk/roc_platform.c (revision adc561fc5352bd1f1c8e736a33bb9b03bbb95b3f)
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