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