#6408 cpuinfo support 2K1000 and gs264

Tue, 28 Nov 2017 15:50:12 +0800

author
aoqi
date
Tue, 28 Nov 2017 15:50:12 +0800
changeset 8016
efbfe5d2d462
parent 8015
2581a5399fb7
child 8017
0b9f05e89eae

#6408 cpuinfo support 2K1000 and gs264
Reviewed-by: chenhaoxuan

src/cpu/mips/vm/vm_version_mips.cpp file | annotate | diff | comparison | revisions
src/cpu/mips/vm/vm_version_mips.hpp file | annotate | diff | comparison | revisions
src/os_cpu/linux_mips/vm/vm_version_linux_mips.cpp file | annotate | diff | comparison | revisions
     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  }

mercurial