diff --git a/Makefile.arm64 b/Makefile.arm64 index 1091edfe5..62a877fff 100644 --- a/Makefile.arm64 +++ b/Makefile.arm64 @@ -66,6 +66,11 @@ FCOMMON_OPT += -march=armv8.1-a -mtune=thunderx2t99 endif endif +ifeq ($(CORE), VORTEX) +CCOMMON_OPT += -march=armv8.3-a +FCOMMON_OPT += -march=armv8.3-a +endif + ifeq ($(GCCVERSIONGTEQ9), 1) ifeq ($(CORE), TSV110) CCOMMON_OPT += -march=armv8.2-a -mtune=tsv110 diff --git a/TargetList.txt b/TargetList.txt index 5934f3012..66eca4506 100644 --- a/TargetList.txt +++ b/TargetList.txt @@ -98,6 +98,7 @@ THUNDERX THUNDERX2T99 TSV110 THUNDERX3T110 +VORTEX 9.System Z: ZARCH_GENERIC diff --git a/cpuid_arm64.c b/cpuid_arm64.c index 1fd43148a..a0d3e15b9 100644 --- a/cpuid_arm64.c +++ b/cpuid_arm64.c @@ -26,6 +26,11 @@ *****************************************************************************/ #include +#ifdef OS_DARWIN +#include +int32_t value; +size_t length=sizeof(value); +#endif #define CPU_UNKNOWN 0 #define CPU_ARMV8 1 @@ -45,6 +50,8 @@ #define CPU_TSV110 9 // Ampere #define CPU_EMAG8180 10 +// Apple +#define CPU_VORTEX 13 static char *cpuname[] = { "UNKNOWN", @@ -59,7 +66,8 @@ static char *cpuname[] = { "TSV110", "EMAG8180", "NEOVERSEN1", - "THUNDERX3T110" + "THUNDERX3T110", + "VORTEX" }; static char *cpuname_lower[] = { @@ -75,7 +83,8 @@ static char *cpuname_lower[] = { "tsv110", "emag8180", "neoversen1", - "thunderx3t110" + "thunderx3t110", + "vortex" }; int get_feature(char *search) @@ -198,6 +207,10 @@ int detect(void) } #else +#ifdef DARWIN + sysctlbyname("hw.cpufamily",&value,&length,NULL,0); + if (value ==131287967) return CPU_VORTEX; +#endif return CPU_ARMV8; #endif @@ -247,7 +260,10 @@ int n=0; printf("#define NUM_CORES %d\n",n); #endif - +#ifdef DARWIN + sysctlbyname("hw.physicalcpu_max",&value,&length,NULL,0); + printf("#define NUM_CORES %d\n",value); +#endif } @@ -398,6 +414,19 @@ void get_cpuconfig(void) printf("#define DTB_DEFAULT_ENTRIES 64 \n"); printf("#define DTB_SIZE 4096 \n"); break; +#ifdef DARWIN + case CPU_VORTEX: + printf("#define VORTEX \n"); + sysctlbyname("hw.l1icachesize",&value,&length,NULL,0); + printf("#define L1_CODE_SIZE %d \n",value); + sysctlbyname("hw.cachelinesize",&value,&length,NULL,0); + printf("#define L1_CODE_LINESIZE %d \n",value); + sysctlbyname("hw.l1dcachesize",&value,&length,NULL,0); + printf("#define L1_DATA_SIZE %d \n",value); + sysctlbyname("hw.l2dcachesize",&value,&length,NULL,0); + printf("#define L2_DATA_SIZE %d \n",value); + break; +#endif } get_cpucount(); } diff --git a/kernel/arm64/KERNEL.VORTEX b/kernel/arm64/KERNEL.VORTEX new file mode 100644 index 000000000..e3efef1f5 --- /dev/null +++ b/kernel/arm64/KERNEL.VORTEX @@ -0,0 +1 @@ +include $(KERNELDIR)/KERNEL.ARMV8