Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright(C) 2021 Marvell. 3 : : */ 4 : : 5 : : #ifndef _ROC_MODEL_H_ 6 : : #define _ROC_MODEL_H_ 7 : : 8 : : #include <stdbool.h> 9 : : 10 : : #include "roc_bits.h" 11 : : #include "roc_constants.h" 12 : : 13 : : extern struct roc_model *roc_model; 14 : : 15 : : struct roc_model { 16 : : /* CN9k Models*/ 17 : : #define ROC_MODEL_CN96xx_A0 BIT_ULL(0) 18 : : #define ROC_MODEL_CN96xx_B0 BIT_ULL(1) 19 : : #define ROC_MODEL_CN96xx_C0 BIT_ULL(2) 20 : : #define ROC_MODEL_CNF95xx_A0 BIT_ULL(4) 21 : : #define ROC_MODEL_CNF95xx_B0 BIT_ULL(6) 22 : : #define ROC_MODEL_CNF95xxMM_A0 BIT_ULL(8) 23 : : #define ROC_MODEL_CNF95xxN_A0 BIT_ULL(12) 24 : : #define ROC_MODEL_CNF95xxO_A0 BIT_ULL(13) 25 : : #define ROC_MODEL_CNF95xxN_A1 BIT_ULL(14) 26 : : #define ROC_MODEL_CNF95xxN_B0 BIT_ULL(15) 27 : : #define ROC_MODEL_CN98xx_A0 BIT_ULL(16) 28 : : #define ROC_MODEL_CN98xx_A1 BIT_ULL(17) 29 : : /* CN10k Models*/ 30 : : #define ROC_MODEL_CN106xx_A0 BIT_ULL(20) 31 : : #define ROC_MODEL_CNF105xx_A0 BIT_ULL(21) 32 : : #define ROC_MODEL_CNF105xxN_A0 BIT_ULL(22) 33 : : #define ROC_MODEL_CN103xx_A0 BIT_ULL(23) 34 : : #define ROC_MODEL_CN106xx_A1 BIT_ULL(24) 35 : : #define ROC_MODEL_CNF105xx_A1 BIT_ULL(25) 36 : : #define ROC_MODEL_CN106xx_B0 BIT_ULL(26) 37 : : #define ROC_MODEL_CNF105xxN_B0 BIT_ULL(27) 38 : : /* CN20k Models*/ 39 : : #define ROC_MODEL_CN206xx_A0 BIT_ULL(40) 40 : : 41 : : /* Following flags describe platform code is running on */ 42 : : #define ROC_ENV_HW BIT_ULL(61) 43 : : #define ROC_ENV_EMUL BIT_ULL(62) 44 : : #define ROC_ENV_ASIM BIT_ULL(63) 45 : : 46 : : uint64_t flag; 47 : : #define ROC_MODEL_STR_LEN_MAX 128 48 : : char name[ROC_MODEL_STR_LEN_MAX]; 49 : : char env[ROC_MODEL_STR_LEN_MAX]; 50 : : } __plt_cache_aligned; 51 : : 52 : : /* CN9K models */ 53 : : #define ROC_MODEL_CN96xx_Ax (ROC_MODEL_CN96xx_A0 | ROC_MODEL_CN96xx_B0) 54 : : #define ROC_MODEL_CN98xx_Ax (ROC_MODEL_CN98xx_A0 | ROC_MODEL_CN98xx_A1) 55 : : #define ROC_MODEL_CN9K \ 56 : : (ROC_MODEL_CN96xx_Ax | ROC_MODEL_CN96xx_C0 | ROC_MODEL_CNF95xx_A0 | \ 57 : : ROC_MODEL_CNF95xx_B0 | ROC_MODEL_CNF95xxMM_A0 | \ 58 : : ROC_MODEL_CNF95xxO_A0 | ROC_MODEL_CNF95xxN_A0 | ROC_MODEL_CN98xx_Ax | \ 59 : : ROC_MODEL_CNF95xxN_A1 | ROC_MODEL_CNF95xxN_B0) 60 : : #define ROC_MODEL_CNF9K \ 61 : : (ROC_MODEL_CNF95xx_A0 | ROC_MODEL_CNF95xx_B0 | \ 62 : : ROC_MODEL_CNF95xxMM_A0 | ROC_MODEL_CNF95xxO_A0 | \ 63 : : ROC_MODEL_CNF95xxN_A0 | ROC_MODEL_CNF95xxN_A1 | \ 64 : : ROC_MODEL_CNF95xxN_B0) 65 : : 66 : : /* CN10K models */ 67 : : #define ROC_MODEL_CN106xx (ROC_MODEL_CN106xx_A0 | ROC_MODEL_CN106xx_A1 | ROC_MODEL_CN106xx_B0) 68 : : #define ROC_MODEL_CNF105xx (ROC_MODEL_CNF105xx_A0 | ROC_MODEL_CNF105xx_A1) 69 : : #define ROC_MODEL_CNF105xxN (ROC_MODEL_CNF105xxN_A0 | ROC_MODEL_CNF105xxN_B0) 70 : : #define ROC_MODEL_CN103xx (ROC_MODEL_CN103xx_A0) 71 : : #define ROC_MODEL_CN10K \ 72 : : (ROC_MODEL_CN106xx | ROC_MODEL_CNF105xx | ROC_MODEL_CNF105xxN | \ 73 : : ROC_MODEL_CN103xx) 74 : : #define ROC_MODEL_CNF10K (ROC_MODEL_CNF105xx | ROC_MODEL_CNF105xxN) 75 : : 76 : : /* CN20K models */ 77 : : #define ROC_MODEL_CN206xx (ROC_MODEL_CN206xx_A0) 78 : : #define ROC_MODEL_CN20K (ROC_MODEL_CN206xx) 79 : : 80 : : /* Runtime variants */ 81 : : static inline uint64_t 82 : : roc_model_runtime_is_cn9k(void) 83 : : { 84 [ # # # # : 0 : return (roc_model->flag & (ROC_MODEL_CN9K)); # # # # # # # # # # # # # # # # # # # # ] 85 : : } 86 : : 87 : : static inline uint64_t 88 : : roc_model_runtime_is_cn10k(void) 89 : : { 90 [ # # # # : 0 : return (roc_model->flag & (ROC_MODEL_CN10K)); # # # # # # # # # # # # # # # # # # ] 91 : : } 92 : : 93 : : static inline uint64_t 94 : : roc_model_runtime_is_cn20k(void) 95 : : { 96 [ # # # # : 0 : return (roc_model->flag & (ROC_MODEL_CN20K)); # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ] 97 : : } 98 : : 99 : : /* Compile time variants */ 100 : : #ifdef ROC_PLATFORM_CN9K 101 : : #define roc_model_constant_is_cn9k() 1 102 : : #define roc_model_constant_is_cn10k() 0 103 : : #define roc_model_constant_is_cn20k() 0 104 : : #endif 105 : : #ifdef ROC_PLATFORM_CN10K 106 : : #define roc_model_constant_is_cn9k() 0 107 : : #define roc_model_constant_is_cn10k() 1 108 : : #define roc_model_constant_is_cn20k() 0 109 : : #endif 110 : : #ifdef ROC_PLATFORM_CN20K 111 : : #define roc_model_constant_is_cn9k() 0 112 : : #define roc_model_constant_is_cn10k() 0 113 : : #define roc_model_constant_is_cn20k() 1 114 : : #endif 115 : : #if !defined(ROC_PLATFORM_CN9K) && !defined(ROC_PLATFORM_CN10K) && !defined(ROC_PLATFORM_CN20K) 116 : : #define roc_model_constant_is_cn9k() 0 117 : : #define roc_model_constant_is_cn10k() 0 118 : : #define roc_model_constant_is_cn20k() 0 119 : : #endif 120 : : 121 : : /* 122 : : * Compile time variants to enable optimized version check when the library 123 : : * configured for specific platform version else to fallback to runtime. 124 : : */ 125 : : static inline uint64_t 126 : : roc_model_is_cn9k(void) 127 : : { 128 : : #ifdef ROC_PLATFORM_CN9K 129 : : return 1; 130 : : #endif 131 : : #if defined(ROC_PLATFORM_CN10K) || defined(ROC_PLATFORM_CN20K) 132 : : return 0; 133 : : #endif 134 : : return roc_model_runtime_is_cn9k(); 135 : : } 136 : : 137 : : static inline uint64_t 138 : : roc_model_is_cn10k(void) 139 : : { 140 : : #ifdef ROC_PLATFORM_CN10K 141 : : return 1; 142 : : #endif 143 : : #if defined(ROC_PLATFORM_CN9K) || defined(ROC_PLATFORM_CN20K) 144 : : return 0; 145 : : #endif 146 : : return roc_model_runtime_is_cn10k(); 147 : : } 148 : : 149 : : static inline uint64_t 150 : : roc_model_is_cn20k(void) 151 : : { 152 : : #ifdef ROC_PLATFORM_CN20K 153 : : return 1; 154 : : #endif 155 : : #if defined(ROC_PLATFORM_CN9K) || defined(ROC_PLATFORM_CN10K) 156 : : return 0; 157 : : #endif 158 : : return roc_model_runtime_is_cn20k(); 159 : : } 160 : : 161 : : static inline uint16_t 162 : : roc_model_optimal_align_sz(void) 163 : : { 164 [ # # # # ]: 0 : if (roc_model_is_cn9k()) 165 : : return ROC_ALIGN; 166 [ # # # # ]: 0 : if (roc_model_is_cn10k()) 167 : : return ROC_ALIGN; 168 [ # # # # ]: 0 : if (roc_model_is_cn20k()) 169 : 0 : return ROC_ALIGN << 1; 170 : : return 128; 171 : : } 172 : : 173 : : static inline uint64_t 174 : : roc_model_is_cn98xx(void) 175 : : { 176 [ # # # # ]: 0 : return (roc_model->flag & ROC_MODEL_CN98xx_Ax); 177 : : } 178 : : 179 : : static inline uint64_t 180 : : roc_model_is_cn98xx_a0(void) 181 : : { 182 : : return (roc_model->flag & ROC_MODEL_CN98xx_A0); 183 : : } 184 : : 185 : : static inline uint64_t 186 : : roc_model_is_cn98xx_a1(void) 187 : : { 188 : : return (roc_model->flag & ROC_MODEL_CN98xx_A1); 189 : : } 190 : : 191 : : static inline uint64_t 192 : : roc_model_is_cn96_a0(void) 193 : : { 194 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CN96xx_A0; # # ] 195 : : } 196 : : 197 : : static inline uint64_t 198 : : roc_model_is_cn96_ax(void) 199 : : { 200 [ # # # # ]: 0 : return (roc_model->flag & ROC_MODEL_CN96xx_Ax); 201 : : } 202 : : 203 : : static inline uint64_t 204 : : roc_model_is_cn96_b0(void) 205 : : { 206 [ # # ]: 0 : return (roc_model->flag & ROC_MODEL_CN96xx_B0); 207 : : } 208 : : 209 : : static inline uint64_t 210 : : roc_model_is_cn96_cx(void) 211 : : { 212 [ # # ]: 0 : return (roc_model->flag & ROC_MODEL_CN96xx_C0); 213 : : } 214 : : 215 : : static inline uint64_t 216 : : roc_model_is_cn95_a0(void) 217 : : { 218 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CNF95xx_A0; # # # # ] 219 : : } 220 : : 221 : : static inline uint64_t 222 : : roc_model_is_cnf95xxn_a0(void) 223 : : { 224 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CNF95xxN_A0; # # ] 225 : : } 226 : : 227 : : static inline uint64_t 228 : : roc_model_is_cnf95xxn_a1(void) 229 : : { 230 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CNF95xxN_A1; # # ] 231 : : } 232 : : 233 : : static inline uint64_t 234 : : roc_model_is_cnf95xxn_b0(void) 235 : : { 236 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CNF95xxN_B0; # # ] 237 : : } 238 : : 239 : : static inline uint64_t 240 : : roc_model_is_cnf95xxo_a0(void) 241 : : { 242 [ # # ]: 0 : return roc_model->flag & ROC_MODEL_CNF95xxO_A0; 243 : : } 244 : : 245 : : static inline uint16_t 246 : : roc_model_is_cn95xxn_a0(void) 247 : : { 248 : : return roc_model->flag & ROC_MODEL_CNF95xxN_A0; 249 : : } 250 : : 251 : : static inline uint64_t 252 : : roc_model_is_cn10ka(void) 253 : : { 254 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CN106xx; # # ] 255 : : } 256 : : 257 : : static inline uint64_t 258 : : roc_model_is_cnf10ka(void) 259 : : { 260 : : return roc_model->flag & ROC_MODEL_CNF105xx; 261 : : } 262 : : 263 : : static inline uint64_t 264 : : roc_model_is_cnf10kb(void) 265 : : { 266 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CNF105xxN; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ] 267 : : } 268 : : 269 : : static inline uint64_t 270 : : roc_model_is_cn10kb_a0(void) 271 : : { 272 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CN103xx_A0; # # # # ] 273 : : } 274 : : 275 : : static inline uint64_t 276 : : roc_model_is_cn10ka_a0(void) 277 : : { 278 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CN106xx_A0; # # # # # # ] 279 : : } 280 : : 281 : : static inline uint64_t 282 : : roc_model_is_cn10ka_a1(void) 283 : : { 284 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CN106xx_A1; # # # # # # ] 285 : : } 286 : : 287 : : static inline uint64_t 288 : : roc_model_is_cn10ka_b0(void) 289 : : { 290 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CN106xx_B0; # # # # # # # # ] 291 : : } 292 : : 293 : : static inline uint64_t 294 : : roc_model_is_cnf10ka_a0(void) 295 : : { 296 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CNF105xx_A0; # # ] 297 : : } 298 : : 299 : : static inline uint64_t 300 : : roc_model_is_cnf10ka_a1(void) 301 : : { 302 : : return roc_model->flag & ROC_MODEL_CNF105xx_A1; 303 : : } 304 : : 305 : : static inline uint64_t 306 : : roc_model_is_cnf10kb_a0(void) 307 : : { 308 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CNF105xxN_A0; # # ] 309 : : } 310 : : 311 : : static inline uint64_t 312 : : roc_model_is_cnf10kb_b0(void) 313 : : { 314 : : return roc_model->flag & ROC_MODEL_CNF105xxN_B0; 315 : : } 316 : : 317 : : static inline uint64_t 318 : : roc_model_is_cn10kb(void) 319 : : { 320 [ # # # # : 0 : return roc_model->flag & ROC_MODEL_CN103xx; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ] 321 : : } 322 : : 323 : : static inline bool 324 : : roc_env_is_hw(void) 325 : : { 326 [ # # # # ]: 0 : return roc_model->flag & ROC_ENV_HW; 327 : : } 328 : : 329 : : static inline bool 330 : : roc_env_is_emulator(void) 331 : : { 332 [ # # # # ]: 0 : return roc_model->flag & ROC_ENV_EMUL; 333 : : } 334 : : 335 : : static inline bool 336 : : roc_env_is_asim(void) 337 : : { 338 [ # # ]: 0 : return roc_model->flag & ROC_ENV_ASIM; 339 : : } 340 : : 341 : : static inline const char * 342 : : roc_env_get(void) 343 : : { 344 : : return roc_model->env; 345 : : } 346 : : 347 : : int roc_model_init(struct roc_model *model); 348 : : 349 : : #endif