From 9a47daa5327db543ab1b641d6b62e5e20177def8 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Tue, 17 Apr 2018 22:11:59 +0200 Subject: [PATCH 1/6] Fix mips32 identification and add MIPS 1004K (MT7621 SoC) --- Makefile.prebuild | 4 ++++ Makefile.system | 34 +++++++++++++++++++++++---------- cpuid_mips.c | 48 ++++++++++++++++++++++++----------------------- 3 files changed, 53 insertions(+), 33 deletions(-) diff --git a/Makefile.prebuild b/Makefile.prebuild index daa556f65..a366004a1 100644 --- a/Makefile.prebuild +++ b/Makefile.prebuild @@ -17,6 +17,10 @@ ifdef CPUIDEMU EXFLAGS = -DCPUIDEMU -DVENDOR=99 endif +ifeq ($(TARGET), 1004K) +TARGET_FLAGS = -mips32r2 +endif + ifeq ($(TARGET), P5600) TARGET_FLAGS = -mips32r5 endif diff --git a/Makefile.system b/Makefile.system index 9720b317f..fdc408781 100644 --- a/Makefile.system +++ b/Makefile.system @@ -17,15 +17,24 @@ NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib # http://stackoverflow.com/questions/4029274/mingw-and-make-variables # - Default value is 'cc' which is not always a valid command (e.g. MinGW). ifeq ($(origin CC),default) + +# Check if $(CC) refers to a valid command and set the value to gcc if not +ifneq ($(findstring cmd.exe,$(SHELL)),) +ifeq ($(shell where $(CC) 2>NUL),) CC = gcc -# Change the default compile to clang on Mac OSX. -# http://stackoverflow.com/questions/714100/os-detecting-makefile -UNAME_S := $(shell uname -s) -ifeq ($(UNAME_S),Darwin) - CC = clang -# EXTRALIB += -Wl,-no_compact_unwind -endif endif +else # POSIX-ish +ifeq ($(shell command -v $(CC) 2>/dev/null),) +ifeq ($(shell uname -s),Darwin) +CC = clang +# EXTRALIB += -Wl,-no_compact_unwind +else +CC = gcc +endif # Darwin +endif # CC exists +endif # Shell is sane + +endif # CC is set to default # Default Fortran compiler (FC) is selected by f_check. @@ -230,7 +239,7 @@ endif MD5SUM = md5 -r endif -ifeq ($(OSNAME), FreeBSD) +ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly)) MD5SUM = md5 -r endif @@ -555,9 +564,14 @@ CCOMMON_OPT += -march=mips64 FCOMMON_OPT += -march=mips64 endif +ifeq ($(CORE), 1004K) +CCOMMON_OPT += -mips32r2 $(MSA_FLAGS) +FCOMMON_OPT += -mips32r2 $(MSA_FLAGS) +endif + ifeq ($(CORE), P5600) -CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS) -FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS) +CCOMMON_OPT += -mips32r5 $(MSA_FLAGS) +FCOMMON_OPT += -mips32r5 $(MSA_FLAGS) endif ifeq ($(CORE), I6400) diff --git a/cpuid_mips.c b/cpuid_mips.c index 15c58959e..760ddee51 100644 --- a/cpuid_mips.c +++ b/cpuid_mips.c @@ -72,10 +72,16 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define CPU_UNKNOWN 0 #define CPU_P5600 1 +#define CPU_LOONGSON3A 2 +#define CPU_LOONGSON3B 3 +#define CPU_1004K 4 static char *cpuname[] = { "UNKOWN", - "P5600" + "P5600", + "LOONGSON3A", + "LOONGSON3B", + "1004K" }; int detect(void){ @@ -90,7 +96,7 @@ int detect(void){ if (!strncmp("cpu", buffer, 3)){ p = strchr(buffer, ':') + 2; #if 0 - fprintf(stderr, "%s\n", p); + fprintf(stderr, "%s \n", p); #endif break; } @@ -115,27 +121,13 @@ int detect(void){ fclose(infile); if (strstr(p, "loongson3a")) return CPU_LOONGSON3A; - }else{ + }else if (strstr(p, "5600")) { + return CPU_P5600; + } else if (strstr(p, "1004K")) { + return CPU_1004K; + } else return CPU_UNKNOWN; } - } - //Check model name for Loongson3 - infile = fopen("/proc/cpuinfo", "r"); - p = (char *)NULL; - while (fgets(buffer, sizeof(buffer), infile)){ - if (!strncmp("model name", buffer, 10)){ - p = strchr(buffer, ':') + 2; - break; - } - } - fclose(infile); - if(p != NULL){ - if (strstr(p, "Loongson-3A")){ - return CPU_LOONGSON3A; - }else if(strstr(p, "Loongson-3B")){ - return CPU_LOONGSON3B; - } - } #endif return CPU_UNKNOWN; } @@ -149,7 +141,7 @@ void get_architecture(void){ } void get_subarchitecture(void){ - if(detect()==CPU_P5600){ + if(detect()==CPU_P5600|| detect()==CPU_1004K){ printf("P5600"); }else{ printf("UNKNOWN"); @@ -161,7 +153,7 @@ void get_subdirname(void){ } void get_cpuconfig(void){ - if(detect()==CPU_P5600){ + if(detect()==CPU_P5600 || detect()==CPU_1004K){ printf("#define P5600\n"); printf("#define L1_DATA_SIZE 65536\n"); printf("#define L1_DATA_LINESIZE 32\n"); @@ -170,6 +162,14 @@ void get_cpuconfig(void){ printf("#define DTB_DEFAULT_ENTRIES 64\n"); printf("#define DTB_SIZE 4096\n"); printf("#define L2_ASSOCIATIVE 8\n"); + } else if (detect()==CPU_1004K) { + printf("#define 1004K\n"); + printf("#define L1_DATA_SIZE 32768\n"); + printf("#define L1_DATA_LINESIZE 32\n"); + printf("#define L2_SIZE 26144\n"); + printf("#define DTB_DEFAULT_ENTRIES 8\n"); + printf("#define DTB_SIZE 4096\n"); + printf("#define L2_ASSOCIATIVE 4\n"); }else{ printf("#define UNKNOWN\n"); } @@ -178,6 +178,8 @@ void get_cpuconfig(void){ void get_libname(void){ if(detect()==CPU_P5600) { printf("p5600\n"); + } else if (detect()==CPU_1004K) { + printf("1004K\n"); }else{ printf("mips\n"); } From 9520bba7fa5d8a5729e68edb614c34b6cf744d2f Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Tue, 17 Apr 2018 22:14:11 +0200 Subject: [PATCH 2/6] Add KERNEL file for 1004K copied from P5600 --- kernel/mips/KERNEL.1004K | 1 + 1 file changed, 1 insertion(+) create mode 100644 kernel/mips/KERNEL.1004K diff --git a/kernel/mips/KERNEL.1004K b/kernel/mips/KERNEL.1004K new file mode 100644 index 000000000..67135356e --- /dev/null +++ b/kernel/mips/KERNEL.1004K @@ -0,0 +1 @@ +include $(KERNELDIR)/KERNEL.P5600 From a93066e348b7fad1718ae703375f616bec713f03 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Wed, 18 Apr 2018 23:06:14 +0200 Subject: [PATCH 3/6] Correct choice of c/z asum kernel on mips32 --- kernel/mips/KERNEL.P5600 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/mips/KERNEL.P5600 b/kernel/mips/KERNEL.P5600 index 9a16704d5..1ab193069 100644 --- a/kernel/mips/KERNEL.P5600 +++ b/kernel/mips/KERNEL.P5600 @@ -38,8 +38,8 @@ ZASUMKERNEL = ../mips/zasum_msa.c else SASUMKERNEL = ../mips/asum.c DASUMKERNEL = ../mips/asum.c -CASUMKERNEL = ../mips/asum.c -ZASUMKERNEL = ../mips/asum.c +CASUMKERNEL = ../mips/zasum.c +ZASUMKERNEL = ../mips/zasum.c endif ifdef HAVE_MSA @@ -253,4 +253,4 @@ ZTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c ZTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c ZTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c ZTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c -endif \ No newline at end of file +endif From 307592d8aaa8e9c527e33f4525f1f948e625615e Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Thu, 19 Apr 2018 00:00:32 +0200 Subject: [PATCH 4/6] Specify trmm kernels as the generic gemm kernel is unsuitable for trmm --- kernel/mips/KERNEL.P5600 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kernel/mips/KERNEL.P5600 b/kernel/mips/KERNEL.P5600 index 1ab193069..1cb5d808a 100644 --- a/kernel/mips/KERNEL.P5600 +++ b/kernel/mips/KERNEL.P5600 @@ -254,3 +254,8 @@ ZTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c ZTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c ZTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c endif + +STRMMKERNEL = ../generic/trmmkernel_4x4.c +DTRMMKERNEL = ../generic/trmmkernel_2x2.c +CTRMMKERNEL = ../generic/ztrmmkernel_2x2.c +ZTRMMKERNEL = ../generic/ztrmmkernel_2x2.c From 85944c41344d283938d06617bfd8aadbf9c5b3be Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Tue, 24 Apr 2018 23:09:12 +0200 Subject: [PATCH 5/6] restore P5600 options --- Makefile.system | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.system b/Makefile.system index fdc408781..d192c62f7 100644 --- a/Makefile.system +++ b/Makefile.system @@ -570,8 +570,8 @@ FCOMMON_OPT += -mips32r2 $(MSA_FLAGS) endif ifeq ($(CORE), P5600) -CCOMMON_OPT += -mips32r5 $(MSA_FLAGS) -FCOMMON_OPT += -mips32r5 $(MSA_FLAGS) +CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS) +FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS) endif ifeq ($(CORE), I6400) From d122242a1cf6148a14b9c99ac94681761b5f922c Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Wed, 25 Apr 2018 22:43:33 +0200 Subject: [PATCH 6/6] Revert "specify TRMMKERNELS" --- kernel/mips/KERNEL.P5600 | 4 ---- 1 file changed, 4 deletions(-) diff --git a/kernel/mips/KERNEL.P5600 b/kernel/mips/KERNEL.P5600 index 1cb5d808a..df9f2e3a2 100644 --- a/kernel/mips/KERNEL.P5600 +++ b/kernel/mips/KERNEL.P5600 @@ -255,7 +255,3 @@ ZTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c ZTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c endif -STRMMKERNEL = ../generic/trmmkernel_4x4.c -DTRMMKERNEL = ../generic/trmmkernel_2x2.c -CTRMMKERNEL = ../generic/ztrmmkernel_2x2.c -ZTRMMKERNEL = ../generic/ztrmmkernel_2x2.c