diff options
-rw-r--r-- | src/cmake/cpu.cmake | 4 | ||||
-rw-r--r-- | src/vppinfra/cpu.h | 20 |
2 files changed, 20 insertions, 4 deletions
diff --git a/src/cmake/cpu.cmake b/src/cmake/cpu.cmake index 0e47f3325cf..c7ad1a4a0bc 100644 --- a/src/cmake/cpu.cmake +++ b/src/cmake/cpu.cmake @@ -99,6 +99,10 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)") if(compiler_flag_march_core_qdf24xx) list(APPEND MARCH_VARIANTS "qdf24xx\;-march=armv8-a+crc+crypto -DCLIB_N_PREFETCHES=8") endif() + check_c_compiler_flag("-march=armv8.2-a+crc+crypto+lse" compiler_flag_march_core_octeontx2) + if(compiler_flag_march_core_octeontx2) + list(APPEND MARCH_VARIANTS "octeontx2\;-march=armv8.2-a+crc+crypto+lse -DCLIB_N_PREFETCHES=8") + endif() check_c_compiler_flag("-march=armv8.1-a+crc+crypto -mtune=thunderx2t99" compiler_flag_march_thunderx2t99) if(compiler_flag_march_thunderx2t99) if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.3)) diff --git a/src/vppinfra/cpu.h b/src/vppinfra/cpu.h index dc73c90ca34..750b3934df9 100644 --- a/src/vppinfra/cpu.h +++ b/src/vppinfra/cpu.h @@ -327,8 +327,10 @@ clib_cpu_part () return part; } -#define AARCH64_CPU_IMPLEMENTER_THUNERDERX2 0x43 -#define AARCH64_CPU_PART_THUNERDERX2 0x0af +#define AARCH64_CPU_IMPLEMENTER_CAVIUM 0x43 +#define AARCH64_CPU_PART_THUNDERX2 0x0af +#define AARCH64_CPU_PART_OCTEONTX2T96 0x0b2 +#define AARCH64_CPU_PART_OCTEONTX2T98 0x0b1 #define AARCH64_CPU_IMPLEMENTER_QDF24XX 0x51 #define AARCH64_CPU_PART_QDF24XX 0xc00 #define AARCH64_CPU_IMPLEMENTER_CORTEXA72 0x41 @@ -337,10 +339,20 @@ clib_cpu_part () #define AARCH64_CPU_PART_NEOVERSEN1 0xd0c static inline int +clib_cpu_march_priority_octeontx2 () +{ + if ((AARCH64_CPU_IMPLEMENTER_CAVIUM == clib_cpu_implementer ()) && + ((AARCH64_CPU_PART_OCTEONTX2T96 == clib_cpu_part ()) + || AARCH64_CPU_PART_OCTEONTX2T98 == clib_cpu_part ())) + return 20; + return -1; +} + +static inline int clib_cpu_march_priority_thunderx2t99 () { - if ((AARCH64_CPU_IMPLEMENTER_THUNERDERX2 == clib_cpu_implementer ()) && - (AARCH64_CPU_PART_THUNERDERX2 == clib_cpu_part ())) + if ((AARCH64_CPU_IMPLEMENTER_CAVIUM == clib_cpu_implementer ()) && + (AARCH64_CPU_PART_THUNDERX2 == clib_cpu_part ())) return 20; return -1; } |