@@ -1,3 +1,8 @@ | |||
# ifeq logical or | |||
ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15)) | |||
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a | |||
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a | |||
endif | |||
ifeq ($(CORE), ARMV7) | |||
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a | |||
@@ -30,16 +30,27 @@ | |||
#define CPU_UNKNOWN 0 | |||
#define CPU_ARMV6 1 | |||
#define CPU_ARMV7 2 | |||
#define CPU_CORTEXA15 3 | |||
#define CPU_CORTEXA9 3 | |||
#define CPU_CORTEXA15 4 | |||
static char *cpuname[] = { | |||
"UNKOWN", | |||
"ARMV6", | |||
"ARMV7", | |||
"CORTEXA9", | |||
"CORTEXA15" | |||
}; | |||
static char *cpuname_lower[] = { | |||
"unknown", | |||
"armv6", | |||
"armv7", | |||
"cortexa9", | |||
"cortexa15" | |||
}; | |||
int get_feature(char *search) | |||
{ | |||
@@ -85,6 +96,29 @@ int detect(void) | |||
char buffer[512], *p; | |||
p = (char *) NULL ; | |||
infile = fopen("/proc/cpuinfo", "r"); | |||
while (fgets(buffer, sizeof(buffer), infile)) | |||
{ | |||
if (!strncmp("CPU part", buffer, 8)) | |||
{ | |||
p = strchr(buffer, ':') + 2; | |||
break; | |||
} | |||
} | |||
fclose(infile); | |||
if(p != NULL) { | |||
if (strstr(p, "0xc09")) { | |||
return CPU_CORTEXA9; | |||
} | |||
if (strstr(p, "0xc15")) { | |||
return CPU_CORTEXA15; | |||
} | |||
} | |||
p = (char *) NULL ; | |||
infile = fopen("/proc/cpuinfo", "r"); | |||
while (fgets(buffer, sizeof(buffer), infile)) | |||
@@ -142,21 +176,7 @@ void get_architecture(void) | |||
void get_subarchitecture(void) | |||
{ | |||
int d = detect(); | |||
switch (d) | |||
{ | |||
case CPU_ARMV7: | |||
printf("ARMV7"); | |||
break; | |||
case CPU_ARMV6: | |||
printf("ARMV6"); | |||
break; | |||
default: | |||
printf("UNKNOWN"); | |||
break; | |||
} | |||
printf("%s", cpuname[d]); | |||
} | |||
void get_subdirname(void) | |||
@@ -170,6 +190,36 @@ void get_cpuconfig(void) | |||
int d = detect(); | |||
switch (d) | |||
{ | |||
case CPU_CORTEXA9: | |||
printf("#define CORTEXA9\n"); | |||
printf("#define HAVE_VFP\n"); | |||
printf("#define HAVE_VFPV3\n"); | |||
if ( get_feature("neon")) printf("#define HAVE_NEON\n"); | |||
if ( get_feature("vfpv4")) printf("#define HAVE_VFPV4\n"); | |||
printf("#define L1_DATA_SIZE 32768\n"); | |||
printf("#define L1_DATA_LINESIZE 32\n"); | |||
printf("#define L2_SIZE 1048576\n"); | |||
printf("#define L2_LINESIZE 32\n"); | |||
printf("#define DTB_DEFAULT_ENTRIES 128\n"); | |||
printf("#define DTB_SIZE 4096\n"); | |||
printf("#define L2_ASSOCIATIVE 4\n"); | |||
break; | |||
case CPU_CORTEXA15: | |||
printf("#define CORTEXA15\n"); | |||
printf("#define HAVE_VFP\n"); | |||
printf("#define HAVE_VFPV3\n"); | |||
if ( get_feature("neon")) printf("#define HAVE_NEON\n"); | |||
if ( get_feature("vfpv4")) printf("#define HAVE_VFPV4\n"); | |||
printf("#define L1_DATA_SIZE 32768\n"); | |||
printf("#define L1_DATA_LINESIZE 32\n"); | |||
printf("#define L2_SIZE 1048576\n"); | |||
printf("#define L2_LINESIZE 32\n"); | |||
printf("#define DTB_DEFAULT_ENTRIES 128\n"); | |||
printf("#define DTB_SIZE 4096\n"); | |||
printf("#define L2_ASSOCIATIVE 4\n"); | |||
break; | |||
case CPU_ARMV7: | |||
printf("#define ARMV7\n"); | |||
@@ -206,18 +256,7 @@ void get_libname(void) | |||
{ | |||
int d = detect(); | |||
switch (d) | |||
{ | |||
case CPU_ARMV7: | |||
printf("armv7\n"); | |||
break; | |||
case CPU_ARMV6: | |||
printf("armv6\n"); | |||
break; | |||
} | |||
printf("%s", cpuname_lower[d]); | |||
} | |||
@@ -727,6 +727,36 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
#else | |||
#endif | |||
#ifdef FORCE_CORTEXA9 | |||
#define FORCE | |||
#define ARCHITECTURE "ARM" | |||
#define SUBARCHITECTURE "CORTEXA9" | |||
#define SUBDIRNAME "arm" | |||
#define ARCHCONFIG "-DCORTEXA9 " \ | |||
"-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=32 " \ | |||
"-DL2_SIZE=1048576 -DL2_LINESIZE=32 " \ | |||
"-DDTB_DEFAULT_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=4 " \ | |||
"-DHAVE_VFPV3 -DHAVE_VFP -DHAVE_NEON" | |||
#define LIBNAME "cortexa9" | |||
#define CORENAME "CORTEXA9" | |||
#else | |||
#endif | |||
#ifdef FORCE_CORTEXA15 | |||
#define FORCE | |||
#define ARCHITECTURE "ARM" | |||
#define SUBARCHITECTURE "CORTEXA15" | |||
#define SUBDIRNAME "arm" | |||
#define ARCHCONFIG "-DCORTEXA15 " \ | |||
"-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=32 " \ | |||
"-DL2_SIZE=1048576 -DL2_LINESIZE=32 " \ | |||
"-DDTB_DEFAULT_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=4 " \ | |||
"-DHAVE_VFPV3 -DHAVE_VFP -DHAVE_NEON" | |||
#define LIBNAME "cortexa9" | |||
#define CORENAME "CORTEXA9" | |||
#else | |||
#endif | |||
#ifdef FORCE_ARMV6 | |||
#define FORCE | |||
#define ARCHITECTURE "ARM" | |||
@@ -0,0 +1 @@ | |||
include $(KERNELDIR)/KERNEL.ARMV7 |
@@ -0,0 +1 @@ | |||
include $(KERNELDIR)/KERNEL.ARMV7 |
@@ -2206,6 +2206,88 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
#ifdef CORTEXA9 | |||
#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 4 | |||
#define DGEMM_DEFAULT_UNROLL_N 4 | |||
#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 | |||
#ifdef CORTEXA15 | |||
#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 4 | |||
#define DGEMM_DEFAULT_UNROLL_N 4 | |||
#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 | |||
#ifdef GENERIC | |||