Tue, 28 Nov 2017 15:50:12 +0800
#6408 cpuinfo support 2K1000 and gs264
Reviewed-by: chenhaoxuan
1.1 --- a/src/cpu/mips/vm/vm_version_mips.cpp Tue Nov 28 15:31:16 2017 +0800 1.2 +++ b/src/cpu/mips/vm/vm_version_mips.cpp Tue Nov 28 15:50:12 2017 +0800 1.3 @@ -152,9 +152,10 @@ 1.4 (has_l2_cache() ? ", has_l2_cache" : ""), 1.5 (has_16k_page() ? ", has_16k_page" : ""), 1.6 (is_loongson() ? ", on_loongson" : ""), 1.7 - (is_gs464() ? ", 3A1000" : ""), 1.8 + (is_gs464() ? ", 3A1000" : ""), 1.9 (is_gs464v() ? ", 3B1500" : "" ), 1.10 (is_gs464e() ? ", 3A2000/3A3000/3B2000/3B3000" : ""), 1.11 + (is_gs264() ? ", 2K1000" : ""), 1.12 (UseLoongsonISA ? ", UseLoongsonISA" : ""), 1.13 (UseCountTrailingZerosInstruction ? ", UseCountTrailingZerosInstruction" : ""), 1.14 (Use3A2000 ? ", Use3A2000" : ""));
2.1 --- a/src/cpu/mips/vm/vm_version_mips.hpp Tue Nov 28 15:31:16 2017 +0800 2.2 +++ b/src/cpu/mips/vm/vm_version_mips.hpp Tue Nov 28 15:50:12 2017 +0800 2.3 @@ -33,24 +33,26 @@ 2.4 class VM_Version: public Abstract_VM_Version { 2.5 protected: 2.6 enum Feature_Flag { 2.7 - with_l2_cache = 0, 2.8 - spt_16k_page = 1, 2.9 - gs464v = 2, 2.10 - gs464e = 3, 2.11 - gs464 = 4, 2.12 - with_gs_support = 5, 2.13 + with_l2_cache = 0, 2.14 + spt_16k_page = 1, 2.15 + gs464v = 2, 2.16 + gs464e = 3, 2.17 + gs464 = 4, 2.18 + gs264 = 5, 2.19 + with_gs_support = 6, 2.20 //////////////////////add some other feature here////////////////// 2.21 }; 2.22 2.23 enum Feature_Flag_Set { 2.24 - unknown_m = 0, 2.25 + unknown_m = 0, 2.26 all_features_m = -1, 2.27 - with_l2_cache_m = 1 << with_l2_cache, 2.28 - spt_16k_page_m = 1 << spt_16k_page, 2.29 + with_l2_cache_m = 1 << with_l2_cache, 2.30 + spt_16k_page_m = 1 << spt_16k_page, 2.31 with_gs_support_m = 1 << with_gs_support, 2.32 - gs464_m = 1 << gs464, 2.33 - gs464v_m = 1 << gs464v, 2.34 - gs464e_m = 1 << gs464e, 2.35 + gs464_m = 1 << gs464, 2.36 + gs464v_m = 1 << gs464v, 2.37 + gs464e_m = 1 << gs464e, 2.38 + gs264_m = 1 << gs264, 2.39 2.40 //////////////////////add some other feature here////////////////// 2.41 }; 2.42 @@ -71,6 +73,7 @@ 2.43 2.44 static bool has_l2_cache() { return _features & with_l2_cache_m; } 2.45 static bool has_16k_page() { return _features & spt_16k_page_m; } 2.46 + static bool is_gs264() { return _features & gs264_m; } 2.47 static bool is_gs464() { return _features & gs464_m; } 2.48 static bool is_gs464v() { return _features & gs464v_m; } 2.49 static bool is_gs464e() { return _features & gs464e_m; }
3.1 --- a/src/os_cpu/linux_mips/vm/vm_version_linux_mips.cpp Tue Nov 28 15:31:16 2017 +0800 3.2 +++ b/src/os_cpu/linux_mips/vm/vm_version_linux_mips.cpp Tue Nov 28 15:50:12 2017 +0800 3.3 @@ -28,7 +28,7 @@ 3.4 #include "vm_version_mips.hpp" 3.5 #include "string.h" 3.6 #include "ctype.h" 3.7 -#define CPU_FAMILY_AMOUNT 7 3.8 +#define CPU_FAMILY_AMOUNT 8 3.9 3.10 const char cpuinfo[CPU_FAMILY_AMOUNT][20] = { 3.11 "not loongson", 3.12 @@ -38,62 +38,67 @@ 3.13 "3b3000", 3.14 "loongson-3a", 3.15 "loongson-3b", 3.16 + "2k1000" 3.17 }; 3.18 3.19 void read_cpu_info(const char *path, char *result) { 3.20 - FILE *ptr; 3.21 - char buf[1024]; 3.22 - int i = 0; 3.23 - if((ptr=fopen(path, "r")) != NULL) { 3.24 - while(fgets(buf, 1024, ptr)!=NULL) { 3.25 + FILE *ptr; 3.26 + char buf[1024]; 3.27 + int i = 0; 3.28 + if((ptr=fopen(path, "r")) != NULL) { 3.29 + while(fgets(buf, 1024, ptr)!=NULL) { 3.30 strcat(result,buf); 3.31 i++; 3.32 if (i == 10) break; 3.33 } 3.34 fclose(ptr); 3.35 - } else { 3.36 - tty->print_cr("fopen %s error\n", path); 3.37 - } 3.38 + } else { 3.39 + tty->print_cr("fopen %s error\n", path); 3.40 + } 3.41 } 3.42 3.43 void *strlwr(char *str){ 3.44 - for (; *str!='\0'; str++) 3.45 - *str = tolower(*str); 3.46 + for (; *str!='\0'; str++) 3.47 + *str = tolower(*str); 3.48 } 3.49 3.50 int VM_Version::platform_features(int features) { 3.51 - char res[10240]; 3.52 - int i; 3.53 - features = spt_16k_page_m; //default support 3.54 - memset(res, '\0', 10240 * sizeof(char)); 3.55 - read_cpu_info("/proc/cpuinfo", res); 3.56 - strlwr(res); 3.57 + char res[10240]; 3.58 + int i; 3.59 + features = spt_16k_page_m; //default support 3.60 + memset(res, '\0', 10240 * sizeof(char)); 3.61 + read_cpu_info("/proc/cpuinfo", res); 3.62 + strlwr(res); 3.63 // puts(res); // <--------------- 3.64 - for (i = 1; i < CPU_FAMILY_AMOUNT; i++){ 3.65 - if (strstr(res, cpuinfo[i])){ 3.66 - break; 3.67 - } 3.68 - } 3.69 - //add some other support when detected on loongson 3.70 - if (i != CPU_FAMILY_AMOUNT) { 3.71 - features |= with_gs_support_m; 3.72 - } 3.73 - switch (i % CPU_FAMILY_AMOUNT) { 3.74 - case 1 : 3.75 - case 2 : 3.76 - case 3 : 3.77 - case 4 : 3.78 - features |= gs464e_m; 3.79 - //tty->print_cr("3A2000/3A3000/3B2000/3B3000 platform"); 3.80 - break; 3.81 - case 5 : 3.82 - features |= gs464_m; 3.83 - //tty->print_cr("3A1000 platform"); 3.84 - break; 3.85 - case 6 : 3.86 - features |= gs464v_m; 3.87 - //tty->print_cr("3B1500 platform"); 3.88 - break; 3.89 - } 3.90 - return features; 3.91 + for (i = 1; i < CPU_FAMILY_AMOUNT; i++){ 3.92 + if (strstr(res, cpuinfo[i])){ 3.93 + break; 3.94 + } 3.95 + } 3.96 + //add some other support when detected on loongson 3.97 + if (i != CPU_FAMILY_AMOUNT) { 3.98 + features |= with_gs_support_m; 3.99 + } 3.100 + switch (i % CPU_FAMILY_AMOUNT) { 3.101 + case 1 : 3.102 + case 2 : 3.103 + case 3 : 3.104 + case 4 : 3.105 + features |= gs464e_m; 3.106 + //tty->print_cr("3A2000/3A3000/3B2000/3B3000 platform"); 3.107 + break; 3.108 + case 5 : 3.109 + features |= gs464_m; 3.110 + //tty->print_cr("3A1000 platform"); 3.111 + break; 3.112 + case 6 : 3.113 + features |= gs464v_m; 3.114 + //tty->print_cr("3B1500 platform"); 3.115 + break; 3.116 + case 7 : 3.117 + features |= gs264_m; 3.118 + //tty->print_cr("2K1000 platform"); 3.119 + break; 3.120 + } 3.121 + return features; 3.122 }