Try to read cpu information from /sys/devices/system/cpu/cpu0 if HWCAP_CPUID fails
@@ -139,19 +139,30 @@ static gotoblas_t *force_coretype(char *coretype) {
static gotoblas_t *get_coretype(void) {
int implementer, variant, part, arch, revision, midr_el1;
+ char coremsg[128];
+
+#if (!defined OS_LINUX && !defined OS_ANDROID)
+ return NULL;
+#endif
-#if (defined OS_LINUX || defined OS_ANDROID)
if (!(getauxval(AT_HWCAP) & HWCAP_CPUID)) {
- char coremsg[128];
+#ifdef __linux
+ FILE *infile;
+ char buffer[512], *p, *cpu_part = NULL, *cpu_implementer = NULL;
+ p = (char *) NULL ;
+ infile = fopen("/sys/devices/system/cpu/cpu0/regs/identification/midr_el1","r");
+ if (!infile) return NULL;
+ fgets(buffer, sizeof(buffer), infile);
+ midr_el1=strtoul(buffer,NULL,16);
+ fclose(infile);
+#else
snprintf(coremsg, 128, "Kernel lacks cpuid feature support. Auto detection of core type failed !!!\n");
openblas_warning(1, coremsg);
return NULL;
- }
-#else
- return NULL;
#endif
-
+ } else {
get_cpu_ftr(MIDR_EL1, midr_el1);
+ }
/*
* MIDR_EL1
*
@@ -219,6 +230,9 @@ static gotoblas_t *get_coretype(void) {
return &gotoblas_FALKOR;
}
break;
+ default:
+ snprintf(coremsg, 128, "Unknown CPU model - implementer %x part %x\n",implementer,part);
+ openblas_warning(1, coremsg);
}
return NULL;
}
