ARM64: Add Cavium THUNDERX Target
This commit is contained in:
parent
0b8e876d89
commit
fb200c7245
|
@ -14,3 +14,7 @@ CCOMMON_OPT += -mtune=vulcan -mcpu=vulcan
|
||||||
FCOMMON_OPT += -mtune=vulcan -mcpu=vulcan
|
FCOMMON_OPT += -mtune=vulcan -mcpu=vulcan
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CORE), THUNDERX)
|
||||||
|
CCOMMON_OPT += -mtune=thunderx -mcpu=thunderx
|
||||||
|
FCOMMON_OPT += -mtune=thunderx -mcpu=thunderx
|
||||||
|
endif
|
||||||
|
|
|
@ -81,4 +81,5 @@ ARMV5
|
||||||
ARMV8
|
ARMV8
|
||||||
CORTEXA57
|
CORTEXA57
|
||||||
VULCAN
|
VULCAN
|
||||||
|
THUNDERX
|
||||||
|
|
||||||
|
|
|
@ -31,19 +31,22 @@
|
||||||
#define CPU_ARMV8 1
|
#define CPU_ARMV8 1
|
||||||
#define CPU_CORTEXA57 2
|
#define CPU_CORTEXA57 2
|
||||||
#define CPU_VULCAN 3
|
#define CPU_VULCAN 3
|
||||||
|
#define CPU_THUNDERX 4
|
||||||
|
|
||||||
static char *cpuname[] = {
|
static char *cpuname[] = {
|
||||||
"UNKNOWN",
|
"UNKNOWN",
|
||||||
"ARMV8" ,
|
"ARMV8" ,
|
||||||
"CORTEXA57"
|
"CORTEXA57",
|
||||||
"VULCAN"
|
"VULCAN",
|
||||||
|
"THUNDERX"
|
||||||
};
|
};
|
||||||
|
|
||||||
static char *cpuname_lower[] = {
|
static char *cpuname_lower[] = {
|
||||||
"unknown",
|
"unknown",
|
||||||
"armv8" ,
|
"armv8" ,
|
||||||
"cortexa57"
|
"cortexa57",
|
||||||
"vulcan"
|
"vulcan",
|
||||||
|
"thunderx"
|
||||||
};
|
};
|
||||||
|
|
||||||
int get_feature(char *search)
|
int get_feature(char *search)
|
||||||
|
@ -89,9 +92,9 @@ int detect(void)
|
||||||
|
|
||||||
FILE *infile;
|
FILE *infile;
|
||||||
char buffer[512], *p, *cpu_part, *cpu_implementer;
|
char buffer[512], *p, *cpu_part, *cpu_implementer;
|
||||||
p = (char *) NULL ;
|
p = (char *) NULL ;
|
||||||
|
|
||||||
infile = fopen("/proc/cpuinfo", "r");
|
infile = fopen("/proc/cpuinfo", "r");
|
||||||
while (fgets(buffer, sizeof(buffer), infile)) {
|
while (fgets(buffer, sizeof(buffer), infile)) {
|
||||||
|
|
||||||
if (!strncmp("CPU part", buffer, 8)) {
|
if (!strncmp("CPU part", buffer, 8)) {
|
||||||
|
@ -109,6 +112,8 @@ int detect(void)
|
||||||
return CPU_CORTEXA57;
|
return CPU_CORTEXA57;
|
||||||
else if (strstr(cpu_part, "0x516") && strstr(cpu_implementer, "0x42"))
|
else if (strstr(cpu_part, "0x516") && strstr(cpu_implementer, "0x42"))
|
||||||
return CPU_VULCAN;
|
return CPU_VULCAN;
|
||||||
|
else if (strstr(cpu_part, "0x0a1") && strstr(cpu_implementer, "0x43"))
|
||||||
|
return CPU_THUNDERX;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = (char *) NULL ;
|
p = (char *) NULL ;
|
||||||
|
@ -221,6 +226,18 @@ void get_cpuconfig(void)
|
||||||
printf("#define DTB_DEFAULT_ENTRIES 64\n");
|
printf("#define DTB_DEFAULT_ENTRIES 64\n");
|
||||||
printf("#define DTB_SIZE 4096\n");
|
printf("#define DTB_SIZE 4096\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CPU_THUNDERX:
|
||||||
|
printf("#define ARMV8\n");
|
||||||
|
printf("#define THUNDERX\n");
|
||||||
|
printf("#define L1_DATA_SIZE 32768\n");
|
||||||
|
printf("#define L1_DATA_LINESIZE 128\n");
|
||||||
|
printf("#define L2_SIZE 16777216\n");
|
||||||
|
printf("#define L2_LINESIZE 128\n");
|
||||||
|
printf("#define DTB_DEFAULT_ENTRIES 64\n");
|
||||||
|
printf("#define DTB_SIZE 4096\n");
|
||||||
|
printf("#define L2_ASSOCIATIVE 16\n");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
18
getarch.c
18
getarch.c
|
@ -884,7 +884,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#ifdef FORCE_CORTEXA57
|
#ifdef FORCE_CORTEXA57
|
||||||
#define FORCE
|
#define FORCE
|
||||||
#define ARCHITECTURE "ARM64"
|
#define ARCHITECTURE "ARM64"
|
||||||
#define SUBARCHITECTURE "ARMV8"
|
#define SUBARCHITECTURE "CORTEXA57"
|
||||||
#define SUBDIRNAME "arm64"
|
#define SUBDIRNAME "arm64"
|
||||||
#define ARCHCONFIG "-DCORTEXA57 " \
|
#define ARCHCONFIG "-DCORTEXA57 " \
|
||||||
"-DL1_CODE_SIZE=49152 -DL1_CODE_LINESIZE=64 -DL1_CODE_ASSOCIATIVE=3 " \
|
"-DL1_CODE_SIZE=49152 -DL1_CODE_LINESIZE=64 -DL1_CODE_ASSOCIATIVE=3 " \
|
||||||
|
@ -900,7 +900,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#ifdef FORCE_VULCAN
|
#ifdef FORCE_VULCAN
|
||||||
#define FORCE
|
#define FORCE
|
||||||
#define ARCHITECTURE "ARM64"
|
#define ARCHITECTURE "ARM64"
|
||||||
#define SUBARCHITECTURE "ARMV8"
|
#define SUBARCHITECTURE "VULCAN"
|
||||||
#define SUBDIRNAME "arm64"
|
#define SUBDIRNAME "arm64"
|
||||||
#define ARCHCONFIG "-DVULCAN " \
|
#define ARCHCONFIG "-DVULCAN " \
|
||||||
"-DL1_CODE_SIZE=32768 -DL1_CODE_LINESIZE=64 -DL1_CODE_ASSOCIATIVE=8 " \
|
"-DL1_CODE_SIZE=32768 -DL1_CODE_LINESIZE=64 -DL1_CODE_ASSOCIATIVE=8 " \
|
||||||
|
@ -914,6 +914,20 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef FORCE_THUNDERX
|
||||||
|
#define FORCE
|
||||||
|
#define ARCHITECTURE "ARM64"
|
||||||
|
#define SUBARCHITECTURE "THUNDERX"
|
||||||
|
#define SUBDIRNAME "arm64"
|
||||||
|
#define ARCHCONFIG "-DTHUNDERX " \
|
||||||
|
"-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=128 " \
|
||||||
|
"-DL2_SIZE=16777216 -DL2_LINESIZE=128 -DL2_ASSOCIATIVE=16 " \
|
||||||
|
"-DDTB_DEFAULT_ENTRIES=64 -DDTB_SIZE=4096 "
|
||||||
|
#define LIBNAME "thunderx"
|
||||||
|
#define CORENAME "THUNDERX"
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef FORCE
|
#ifndef FORCE
|
||||||
|
|
||||||
#if defined(__powerpc__) || defined(__powerpc) || defined(powerpc) || \
|
#if defined(__powerpc__) || defined(__powerpc) || defined(powerpc) || \
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
include $(KERNELDIR)/KERNEL.ARMV8
|
38
param.h
38
param.h
|
@ -2423,6 +2423,44 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#define SYMV_P 16
|
#define SYMV_P 16
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(THUNDERX)
|
||||||
|
#define SNUMOPT 2
|
||||||
|
#define DNUMOPT 2
|
||||||
|
|
||||||
|
#define GEMM_DEFAULT_OFFSET_A 0
|
||||||
|
#define GEMM_DEFAULT_OFFSET_B 0
|
||||||
|
#define GEMM_DEFAULT_ALIGN 0x03fffUL
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_UNROLL_M 4
|
||||||
|
#define SGEMM_DEFAULT_UNROLL_N 4
|
||||||
|
|
||||||
|
#define DGEMM_DEFAULT_UNROLL_M 2
|
||||||
|
#define DGEMM_DEFAULT_UNROLL_N 2
|
||||||
|
|
||||||
|
#define CGEMM_DEFAULT_UNROLL_M 2
|
||||||
|
#define CGEMM_DEFAULT_UNROLL_N 2
|
||||||
|
|
||||||
|
#define ZGEMM_DEFAULT_UNROLL_M 2
|
||||||
|
#define ZGEMM_DEFAULT_UNROLL_N 2
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_P 128
|
||||||
|
#define DGEMM_DEFAULT_P 128
|
||||||
|
#define CGEMM_DEFAULT_P 96
|
||||||
|
#define ZGEMM_DEFAULT_P 64
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_Q 240
|
||||||
|
#define DGEMM_DEFAULT_Q 120
|
||||||
|
#define CGEMM_DEFAULT_Q 120
|
||||||
|
#define ZGEMM_DEFAULT_Q 120
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_R 12288
|
||||||
|
#define DGEMM_DEFAULT_R 8192
|
||||||
|
#define CGEMM_DEFAULT_R 4096
|
||||||
|
#define ZGEMM_DEFAULT_R 4096
|
||||||
|
|
||||||
|
|
||||||
|
#define SYMV_P 16
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(ARMV5)
|
#if defined(ARMV5)
|
||||||
#define SNUMOPT 2
|
#define SNUMOPT 2
|
||||||
|
|
Loading…
Reference in New Issue