linux/drivers/cpufreq/longhaul.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 *  longhaul.h
   4 *  (C) 2003 Dave Jones.
   5 *
   6 *  VIA-specific information
   7 */
   8
   9union msr_bcr2 {
  10        struct {
  11                unsigned Reseved:19,    // 18:0
  12                ESOFTBF:1,              // 19
  13                Reserved2:3,            // 22:20
  14                CLOCKMUL:4,             // 26:23
  15                Reserved3:5;            // 31:27
  16        } bits;
  17        unsigned long val;
  18};
  19
  20union msr_longhaul {
  21        struct {
  22                unsigned RevisionID:4,  // 3:0
  23                RevisionKey:4,          // 7:4
  24                EnableSoftBusRatio:1,   // 8
  25                EnableSoftVID:1,        // 9
  26                EnableSoftBSEL:1,       // 10
  27                Reserved:3,             // 11:13
  28                SoftBusRatio4:1,        // 14
  29                VRMRev:1,               // 15
  30                SoftBusRatio:4,         // 19:16
  31                SoftVID:5,              // 24:20
  32                Reserved2:3,            // 27:25
  33                SoftBSEL:2,             // 29:28
  34                Reserved3:2,            // 31:30
  35                MaxMHzBR:4,             // 35:32
  36                MaximumVID:5,           // 40:36
  37                MaxMHzFSB:2,            // 42:41
  38                MaxMHzBR4:1,            // 43
  39                Reserved4:4,            // 47:44
  40                MinMHzBR:4,             // 51:48
  41                MinimumVID:5,           // 56:52
  42                MinMHzFSB:2,            // 58:57
  43                MinMHzBR4:1,            // 59
  44                Reserved5:4;            // 63:60
  45        } bits;
  46        unsigned long long val;
  47};
  48
  49/*
  50 * Clock ratio tables. Div/Mod by 10 to get ratio.
  51 * The eblcr values specify the ratio read from the CPU.
  52 * The mults values specify what to write to the CPU.
  53 */
  54
  55/*
  56 * VIA C3 Samuel 1  & Samuel 2 (stepping 0)
  57 */
  58static const int samuel1_mults[16] = {
  59        -1, /* 0000 -> RESERVED */
  60        30, /* 0001 ->  3.0x */
  61        40, /* 0010 ->  4.0x */
  62        -1, /* 0011 -> RESERVED */
  63        -1, /* 0100 -> RESERVED */
  64        35, /* 0101 ->  3.5x */
  65        45, /* 0110 ->  4.5x */
  66        55, /* 0111 ->  5.5x */
  67        60, /* 1000 ->  6.0x */
  68        70, /* 1001 ->  7.0x */
  69        80, /* 1010 ->  8.0x */
  70        50, /* 1011 ->  5.0x */
  71        65, /* 1100 ->  6.5x */
  72        75, /* 1101 ->  7.5x */
  73        -1, /* 1110 -> RESERVED */
  74        -1, /* 1111 -> RESERVED */
  75};
  76
  77static const int samuel1_eblcr[16] = {
  78        50, /* 0000 -> RESERVED */
  79        30, /* 0001 ->  3.0x */
  80        40, /* 0010 ->  4.0x */
  81        -1, /* 0011 -> RESERVED */
  82        55, /* 0100 ->  5.5x */
  83        35, /* 0101 ->  3.5x */
  84        45, /* 0110 ->  4.5x */
  85        -1, /* 0111 -> RESERVED */
  86        -1, /* 1000 -> RESERVED */
  87        70, /* 1001 ->  7.0x */
  88        80, /* 1010 ->  8.0x */
  89        60, /* 1011 ->  6.0x */
  90        -1, /* 1100 -> RESERVED */
  91        75, /* 1101 ->  7.5x */
  92        -1, /* 1110 -> RESERVED */
  93        65, /* 1111 ->  6.5x */
  94};
  95
  96/*
  97 * VIA C3 Samuel2 Stepping 1->15
  98 */
  99static const int samuel2_eblcr[16] = {
 100        50,  /* 0000 ->  5.0x */
 101        30,  /* 0001 ->  3.0x */
 102        40,  /* 0010 ->  4.0x */
 103        100, /* 0011 -> 10.0x */
 104        55,  /* 0100 ->  5.5x */
 105        35,  /* 0101 ->  3.5x */
 106        45,  /* 0110 ->  4.5x */
 107        110, /* 0111 -> 11.0x */
 108        90,  /* 1000 ->  9.0x */
 109        70,  /* 1001 ->  7.0x */
 110        80,  /* 1010 ->  8.0x */
 111        60,  /* 1011 ->  6.0x */
 112        120, /* 1100 -> 12.0x */
 113        75,  /* 1101 ->  7.5x */
 114        130, /* 1110 -> 13.0x */
 115        65,  /* 1111 ->  6.5x */
 116};
 117
 118/*
 119 * VIA C3 Ezra
 120 */
 121static const int ezra_mults[16] = {
 122        100, /* 0000 -> 10.0x */
 123        30,  /* 0001 ->  3.0x */
 124        40,  /* 0010 ->  4.0x */
 125        90,  /* 0011 ->  9.0x */
 126        95,  /* 0100 ->  9.5x */
 127        35,  /* 0101 ->  3.5x */
 128        45,  /* 0110 ->  4.5x */
 129        55,  /* 0111 ->  5.5x */
 130        60,  /* 1000 ->  6.0x */
 131        70,  /* 1001 ->  7.0x */
 132        80,  /* 1010 ->  8.0x */
 133        50,  /* 1011 ->  5.0x */
 134        65,  /* 1100 ->  6.5x */
 135        75,  /* 1101 ->  7.5x */
 136        85,  /* 1110 ->  8.5x */
 137        120, /* 1111 -> 12.0x */
 138};
 139
 140static const int ezra_eblcr[16] = {
 141        50,  /* 0000 ->  5.0x */
 142        30,  /* 0001 ->  3.0x */
 143        40,  /* 0010 ->  4.0x */
 144        100, /* 0011 -> 10.0x */
 145        55,  /* 0100 ->  5.5x */
 146        35,  /* 0101 ->  3.5x */
 147        45,  /* 0110 ->  4.5x */
 148        95,  /* 0111 ->  9.5x */
 149        90,  /* 1000 ->  9.0x */
 150        70,  /* 1001 ->  7.0x */
 151        80,  /* 1010 ->  8.0x */
 152        60,  /* 1011 ->  6.0x */
 153        120, /* 1100 -> 12.0x */
 154        75,  /* 1101 ->  7.5x */
 155        85,  /* 1110 ->  8.5x */
 156        65,  /* 1111 ->  6.5x */
 157};
 158
 159/*
 160 * VIA C3 (Ezra-T) [C5M].
 161 */
 162static const int ezrat_mults[32] = {
 163        100, /* 0000 -> 10.0x */
 164        30,  /* 0001 ->  3.0x */
 165        40,  /* 0010 ->  4.0x */
 166        90,  /* 0011 ->  9.0x */
 167        95,  /* 0100 ->  9.5x */
 168        35,  /* 0101 ->  3.5x */
 169        45,  /* 0110 ->  4.5x */
 170        55,  /* 0111 ->  5.5x */
 171        60,  /* 1000 ->  6.0x */
 172        70,  /* 1001 ->  7.0x */
 173        80,  /* 1010 ->  8.0x */
 174        50,  /* 1011 ->  5.0x */
 175        65,  /* 1100 ->  6.5x */
 176        75,  /* 1101 ->  7.5x */
 177        85,  /* 1110 ->  8.5x */
 178        120, /* 1111 ->  12.0x */
 179
 180        -1,  /* 0000 -> RESERVED (10.0x) */
 181        110, /* 0001 -> 11.0x */
 182        -1, /* 0010 -> 12.0x */
 183        -1,  /* 0011 -> RESERVED (9.0x)*/
 184        105, /* 0100 -> 10.5x */
 185        115, /* 0101 -> 11.5x */
 186        125, /* 0110 -> 12.5x */
 187        135, /* 0111 -> 13.5x */
 188        140, /* 1000 -> 14.0x */
 189        150, /* 1001 -> 15.0x */
 190        160, /* 1010 -> 16.0x */
 191        130, /* 1011 -> 13.0x */
 192        145, /* 1100 -> 14.5x */
 193        155, /* 1101 -> 15.5x */
 194        -1,  /* 1110 -> RESERVED (13.0x) */
 195        -1,  /* 1111 -> RESERVED (12.0x) */
 196};
 197
 198static const int ezrat_eblcr[32] = {
 199        50,  /* 0000 ->  5.0x */
 200        30,  /* 0001 ->  3.0x */
 201        40,  /* 0010 ->  4.0x */
 202        100, /* 0011 -> 10.0x */
 203        55,  /* 0100 ->  5.5x */
 204        35,  /* 0101 ->  3.5x */
 205        45,  /* 0110 ->  4.5x */
 206        95,  /* 0111 ->  9.5x */
 207        90,  /* 1000 ->  9.0x */
 208        70,  /* 1001 ->  7.0x */
 209        80,  /* 1010 ->  8.0x */
 210        60,  /* 1011 ->  6.0x */
 211        120, /* 1100 -> 12.0x */
 212        75,  /* 1101 ->  7.5x */
 213        85,  /* 1110 ->  8.5x */
 214        65,  /* 1111 ->  6.5x */
 215
 216        -1,  /* 0000 -> RESERVED (9.0x) */
 217        110, /* 0001 -> 11.0x */
 218        120, /* 0010 -> 12.0x */
 219        -1,  /* 0011 -> RESERVED (10.0x)*/
 220        135, /* 0100 -> 13.5x */
 221        115, /* 0101 -> 11.5x */
 222        125, /* 0110 -> 12.5x */
 223        105, /* 0111 -> 10.5x */
 224        130, /* 1000 -> 13.0x */
 225        150, /* 1001 -> 15.0x */
 226        160, /* 1010 -> 16.0x */
 227        140, /* 1011 -> 14.0x */
 228        -1,  /* 1100 -> RESERVED (12.0x) */
 229        155, /* 1101 -> 15.5x */
 230        -1,  /* 1110 -> RESERVED (13.0x) */
 231        145, /* 1111 -> 14.5x */
 232};
 233
 234/*
 235 * VIA C3 Nehemiah */
 236
 237static const int nehemiah_mults[32] = {
 238        100, /* 0000 -> 10.0x */
 239        -1, /* 0001 -> 16.0x */
 240        40,  /* 0010 ->  4.0x */
 241        90,  /* 0011 ->  9.0x */
 242        95,  /* 0100 ->  9.5x */
 243        -1,  /* 0101 ->  RESERVED */
 244        45,  /* 0110 ->  4.5x */
 245        55,  /* 0111 ->  5.5x */
 246        60,  /* 1000 ->  6.0x */
 247        70,  /* 1001 ->  7.0x */
 248        80,  /* 1010 ->  8.0x */
 249        50,  /* 1011 ->  5.0x */
 250        65,  /* 1100 ->  6.5x */
 251        75,  /* 1101 ->  7.5x */
 252        85,  /* 1110 ->  8.5x */
 253        120, /* 1111 -> 12.0x */
 254        -1, /* 0000 -> 10.0x */
 255        110, /* 0001 -> 11.0x */
 256        -1, /* 0010 -> 12.0x */
 257        -1,  /* 0011 ->  9.0x */
 258        105, /* 0100 -> 10.5x */
 259        115, /* 0101 -> 11.5x */
 260        125, /* 0110 -> 12.5x */
 261        135, /* 0111 -> 13.5x */
 262        140, /* 1000 -> 14.0x */
 263        150, /* 1001 -> 15.0x */
 264        160, /* 1010 -> 16.0x */
 265        130, /* 1011 -> 13.0x */
 266        145, /* 1100 -> 14.5x */
 267        155, /* 1101 -> 15.5x */
 268        -1,  /* 1110 -> RESERVED (13.0x) */
 269        -1, /* 1111 -> 12.0x */
 270};
 271
 272static const int nehemiah_eblcr[32] = {
 273        50,  /* 0000 ->  5.0x */
 274        160, /* 0001 -> 16.0x */
 275        40,  /* 0010 ->  4.0x */
 276        100, /* 0011 -> 10.0x */
 277        55,  /* 0100 ->  5.5x */
 278        -1,  /* 0101 ->  RESERVED */
 279        45,  /* 0110 ->  4.5x */
 280        95,  /* 0111 ->  9.5x */
 281        90,  /* 1000 ->  9.0x */
 282        70,  /* 1001 ->  7.0x */
 283        80,  /* 1010 ->  8.0x */
 284        60,  /* 1011 ->  6.0x */
 285        120, /* 1100 -> 12.0x */
 286        75,  /* 1101 ->  7.5x */
 287        85,  /* 1110 ->  8.5x */
 288        65,  /* 1111 ->  6.5x */
 289        90,  /* 0000 ->  9.0x */
 290        110, /* 0001 -> 11.0x */
 291        120, /* 0010 -> 12.0x */
 292        100, /* 0011 -> 10.0x */
 293        135, /* 0100 -> 13.5x */
 294        115, /* 0101 -> 11.5x */
 295        125, /* 0110 -> 12.5x */
 296        105, /* 0111 -> 10.5x */
 297        130, /* 1000 -> 13.0x */
 298        150, /* 1001 -> 15.0x */
 299        160, /* 1010 -> 16.0x */
 300        140, /* 1011 -> 14.0x */
 301        120, /* 1100 -> 12.0x */
 302        155, /* 1101 -> 15.5x */
 303        -1,  /* 1110 -> RESERVED (13.0x) */
 304        145 /* 1111 -> 14.5x */
 305};
 306
 307/*
 308 * Voltage scales. Div/Mod by 1000 to get actual voltage.
 309 * Which scale to use depends on the VRM type in use.
 310 */
 311
 312struct mV_pos {
 313        unsigned short mV;
 314        unsigned short pos;
 315};
 316
 317static const struct mV_pos vrm85_mV[32] = {
 318        {1250, 8},      {1200, 6},      {1150, 4},      {1100, 2},
 319        {1050, 0},      {1800, 30},     {1750, 28},     {1700, 26},
 320        {1650, 24},     {1600, 22},     {1550, 20},     {1500, 18},
 321        {1450, 16},     {1400, 14},     {1350, 12},     {1300, 10},
 322        {1275, 9},      {1225, 7},      {1175, 5},      {1125, 3},
 323        {1075, 1},      {1825, 31},     {1775, 29},     {1725, 27},
 324        {1675, 25},     {1625, 23},     {1575, 21},     {1525, 19},
 325        {1475, 17},     {1425, 15},     {1375, 13},     {1325, 11}
 326};
 327
 328static const unsigned char mV_vrm85[32] = {
 329        0x04,   0x14,   0x03,   0x13,   0x02,   0x12,   0x01,   0x11,
 330        0x00,   0x10,   0x0f,   0x1f,   0x0e,   0x1e,   0x0d,   0x1d,
 331        0x0c,   0x1c,   0x0b,   0x1b,   0x0a,   0x1a,   0x09,   0x19,
 332        0x08,   0x18,   0x07,   0x17,   0x06,   0x16,   0x05,   0x15
 333};
 334
 335static const struct mV_pos mobilevrm_mV[32] = {
 336        {1750, 31},     {1700, 30},     {1650, 29},     {1600, 28},
 337        {1550, 27},     {1500, 26},     {1450, 25},     {1400, 24},
 338        {1350, 23},     {1300, 22},     {1250, 21},     {1200, 20},
 339        {1150, 19},     {1100, 18},     {1050, 17},     {1000, 16},
 340        {975, 15},      {950, 14},      {925, 13},      {900, 12},
 341        {875, 11},      {850, 10},      {825, 9},       {800, 8},
 342        {775, 7},       {750, 6},       {725, 5},       {700, 4},
 343        {675, 3},       {650, 2},       {625, 1},       {600, 0}
 344};
 345
 346static const unsigned char mV_mobilevrm[32] = {
 347        0x1f,   0x1e,   0x1d,   0x1c,   0x1b,   0x1a,   0x19,   0x18,
 348        0x17,   0x16,   0x15,   0x14,   0x13,   0x12,   0x11,   0x10,
 349        0x0f,   0x0e,   0x0d,   0x0c,   0x0b,   0x0a,   0x09,   0x08,
 350        0x07,   0x06,   0x05,   0x04,   0x03,   0x02,   0x01,   0x00
 351};
 352
 353