30 31#include <sys/param.h> 32#include <sys/bus.h> 33#include <sys/cpu.h> 34#include <sys/kernel.h> 35#include <sys/malloc.h> 36#include <sys/module.h> 37#include <sys/smp.h> 38#include <sys/systm.h> 39 40#include "cpufreq_if.h" 41#include <machine/md_var.h> 42 43#include <contrib/dev/acpica/acpi.h> 44#include <dev/acpica/acpivar.h> 45#include "acpi_if.h" 46 47/* Status/control registers (from the IA-32 System Programming Guide). */ 48#define MSR_PERF_STATUS 0x198 49#define MSR_PERF_CTL 0x199 50 51/* Register and bit for enabling SpeedStep. */ 52#define MSR_MISC_ENABLE 0x1a0 53#define MSR_SS_ENABLE (1<<16) 54 55/* Frequency and MSR control values. */ 56typedef struct { 57 uint16_t freq; 58 uint16_t volts; 59 uint16_t id16; 60 int power; 61} freq_info; 62 63/* Identifying characteristics of a processor and supported frequencies. */ 64typedef struct { 65 const char *vendor; 66 uint32_t id32; 67 uint32_t bus_clk; 68 freq_info *freqtab; 69} cpu_info; 70 71struct est_softc { 72 device_t dev; 73 int acpi_settings; 74 freq_info *freq_list; 75}; 76 77/* Convert MHz and mV into IDs for passing to the MSR. */ 78#define ID16(MHz, mV, bus_clk) \ 79 (((MHz / bus_clk) << 8) | ((mV ? mV - 700 : 0) >> 4)) 80#define ID32(MHz_hi, mV_hi, MHz_lo, mV_lo, bus_clk) \ 81 ((ID16(MHz_lo, mV_lo, bus_clk) << 16) | (ID16(MHz_hi, mV_hi, bus_clk))) 82 83/* Format for storing IDs in our table. */ 84#define FREQ_INFO(MHz, mV, bus_clk) \ 85 { MHz, mV, ID16(MHz, mV, bus_clk), CPUFREQ_VAL_UNKNOWN } 86#define INTEL(tab, zhi, vhi, zlo, vlo, bus_clk) \ 87 { GenuineIntel, ID32(zhi, vhi, zlo, vlo, bus_clk), bus_clk, tab } 88 89const char GenuineIntel[] = "GenuineIntel"; 90 91/* Default bus clock value for Centrino processors. */ 92#define INTEL_BUS_CLK 100 93 94/* XXX Update this if new CPUs have more settings. */ 95#define EST_MAX_SETTINGS 10 96CTASSERT(EST_MAX_SETTINGS <= MAX_SETTINGS); 97 98/* Estimate in microseconds of latency for performing a transition. */ 99#define EST_TRANS_LAT 10 100 101/* 102 * Frequency (MHz) and voltage (mV) settings. Data from the 103 * Intel Pentium M Processor Datasheet (Order Number 252612), Table 5. 104 * 105 * Dothan processors have multiple VID#s with different settings for 106 * each VID#. Since we can't uniquely identify this info 107 * without undisclosed methods from Intel, we can't support newer 108 * processors with this table method. If ACPI Px states are supported, 109 * we get info from them. 110 */ 111static freq_info PM17_130[] = { 112 /* 130nm 1.70GHz Pentium M */ 113 FREQ_INFO(1700, 1484, INTEL_BUS_CLK), 114 FREQ_INFO(1400, 1308, INTEL_BUS_CLK), 115 FREQ_INFO(1200, 1228, INTEL_BUS_CLK), 116 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 117 FREQ_INFO( 800, 1004, INTEL_BUS_CLK), 118 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 119 FREQ_INFO( 0, 0, 1), 120}; 121static freq_info PM16_130[] = { 122 /* 130nm 1.60GHz Pentium M */ 123 FREQ_INFO(1600, 1484, INTEL_BUS_CLK), 124 FREQ_INFO(1400, 1420, INTEL_BUS_CLK), 125 FREQ_INFO(1200, 1276, INTEL_BUS_CLK), 126 FREQ_INFO(1000, 1164, INTEL_BUS_CLK), 127 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 128 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 129 FREQ_INFO( 0, 0, 1), 130}; 131static freq_info PM15_130[] = { 132 /* 130nm 1.50GHz Pentium M */ 133 FREQ_INFO(1500, 1484, INTEL_BUS_CLK), 134 FREQ_INFO(1400, 1452, INTEL_BUS_CLK), 135 FREQ_INFO(1200, 1356, INTEL_BUS_CLK), 136 FREQ_INFO(1000, 1228, INTEL_BUS_CLK), 137 FREQ_INFO( 800, 1116, INTEL_BUS_CLK), 138 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 139 FREQ_INFO( 0, 0, 1), 140}; 141static freq_info PM14_130[] = { 142 /* 130nm 1.40GHz Pentium M */ 143 FREQ_INFO(1400, 1484, INTEL_BUS_CLK), 144 FREQ_INFO(1200, 1436, INTEL_BUS_CLK), 145 FREQ_INFO(1000, 1308, INTEL_BUS_CLK), 146 FREQ_INFO( 800, 1180, INTEL_BUS_CLK), 147 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 148 FREQ_INFO( 0, 0, 1), 149}; 150static freq_info PM13_130[] = { 151 /* 130nm 1.30GHz Pentium M */ 152 FREQ_INFO(1300, 1388, INTEL_BUS_CLK), 153 FREQ_INFO(1200, 1356, INTEL_BUS_CLK), 154 FREQ_INFO(1000, 1292, INTEL_BUS_CLK), 155 FREQ_INFO( 800, 1260, INTEL_BUS_CLK), 156 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 157 FREQ_INFO( 0, 0, 1), 158}; 159static freq_info PM13_LV_130[] = { 160 /* 130nm 1.30GHz Low Voltage Pentium M */ 161 FREQ_INFO(1300, 1180, INTEL_BUS_CLK), 162 FREQ_INFO(1200, 1164, INTEL_BUS_CLK), 163 FREQ_INFO(1100, 1100, INTEL_BUS_CLK), 164 FREQ_INFO(1000, 1020, INTEL_BUS_CLK), 165 FREQ_INFO( 900, 1004, INTEL_BUS_CLK), 166 FREQ_INFO( 800, 988, INTEL_BUS_CLK), 167 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 168 FREQ_INFO( 0, 0, 1), 169}; 170static freq_info PM12_LV_130[] = { 171 /* 130 nm 1.20GHz Low Voltage Pentium M */ 172 FREQ_INFO(1200, 1180, INTEL_BUS_CLK), 173 FREQ_INFO(1100, 1164, INTEL_BUS_CLK), 174 FREQ_INFO(1000, 1100, INTEL_BUS_CLK), 175 FREQ_INFO( 900, 1020, INTEL_BUS_CLK), 176 FREQ_INFO( 800, 1004, INTEL_BUS_CLK), 177 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 178 FREQ_INFO( 0, 0, 1), 179}; 180static freq_info PM11_LV_130[] = { 181 /* 130 nm 1.10GHz Low Voltage Pentium M */ 182 FREQ_INFO(1100, 1180, INTEL_BUS_CLK), 183 FREQ_INFO(1000, 1164, INTEL_BUS_CLK), 184 FREQ_INFO( 900, 1100, INTEL_BUS_CLK), 185 FREQ_INFO( 800, 1020, INTEL_BUS_CLK), 186 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 187 FREQ_INFO( 0, 0, 1), 188}; 189static freq_info PM11_ULV_130[] = { 190 /* 130 nm 1.10GHz Ultra Low Voltage Pentium M */ 191 FREQ_INFO(1100, 1004, INTEL_BUS_CLK), 192 FREQ_INFO(1000, 988, INTEL_BUS_CLK), 193 FREQ_INFO( 900, 972, INTEL_BUS_CLK), 194 FREQ_INFO( 800, 956, INTEL_BUS_CLK), 195 FREQ_INFO( 600, 844, INTEL_BUS_CLK), 196 FREQ_INFO( 0, 0, 1), 197}; 198static freq_info PM10_ULV_130[] = { 199 /* 130 nm 1.00GHz Ultra Low Voltage Pentium M */ 200 FREQ_INFO(1000, 1004, INTEL_BUS_CLK), 201 FREQ_INFO( 900, 988, INTEL_BUS_CLK), 202 FREQ_INFO( 800, 972, INTEL_BUS_CLK), 203 FREQ_INFO( 600, 844, INTEL_BUS_CLK), 204 FREQ_INFO( 0, 0, 1), 205}; 206 207/* 208 * Data from "Intel Pentium M Processor on 90nm Process with 209 * 2-MB L2 Cache Datasheet", Order Number 302189, Table 5. 210 */ 211static freq_info PM_765A_90[] = { 212 /* 90 nm 2.10GHz Pentium M, VID #A */ 213 FREQ_INFO(2100, 1340, INTEL_BUS_CLK), 214 FREQ_INFO(1800, 1276, INTEL_BUS_CLK), 215 FREQ_INFO(1600, 1228, INTEL_BUS_CLK), 216 FREQ_INFO(1400, 1180, INTEL_BUS_CLK), 217 FREQ_INFO(1200, 1132, INTEL_BUS_CLK), 218 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 219 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 220 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 221 FREQ_INFO( 0, 0, 1), 222}; 223static freq_info PM_765B_90[] = { 224 /* 90 nm 2.10GHz Pentium M, VID #B */ 225 FREQ_INFO(2100, 1324, INTEL_BUS_CLK), 226 FREQ_INFO(1800, 1260, INTEL_BUS_CLK), 227 FREQ_INFO(1600, 1212, INTEL_BUS_CLK), 228 FREQ_INFO(1400, 1180, INTEL_BUS_CLK), 229 FREQ_INFO(1200, 1132, INTEL_BUS_CLK), 230 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 231 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 232 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 233 FREQ_INFO( 0, 0, 1), 234}; 235static freq_info PM_765C_90[] = { 236 /* 90 nm 2.10GHz Pentium M, VID #C */ 237 FREQ_INFO(2100, 1308, INTEL_BUS_CLK), 238 FREQ_INFO(1800, 1244, INTEL_BUS_CLK), 239 FREQ_INFO(1600, 1212, INTEL_BUS_CLK), 240 FREQ_INFO(1400, 1164, INTEL_BUS_CLK), 241 FREQ_INFO(1200, 1116, INTEL_BUS_CLK), 242 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 243 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 244 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 245 FREQ_INFO( 0, 0, 1), 246}; 247static freq_info PM_765E_90[] = { 248 /* 90 nm 2.10GHz Pentium M, VID #E */ 249 FREQ_INFO(2100, 1356, INTEL_BUS_CLK), 250 FREQ_INFO(1800, 1292, INTEL_BUS_CLK), 251 FREQ_INFO(1600, 1244, INTEL_BUS_CLK), 252 FREQ_INFO(1400, 1196, INTEL_BUS_CLK), 253 FREQ_INFO(1200, 1148, INTEL_BUS_CLK), 254 FREQ_INFO(1000, 1100, INTEL_BUS_CLK), 255 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 256 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 257 FREQ_INFO( 0, 0, 1), 258}; 259static freq_info PM_755A_90[] = { 260 /* 90 nm 2.00GHz Pentium M, VID #A */ 261 FREQ_INFO(2000, 1340, INTEL_BUS_CLK), 262 FREQ_INFO(1800, 1292, INTEL_BUS_CLK), 263 FREQ_INFO(1600, 1244, INTEL_BUS_CLK), 264 FREQ_INFO(1400, 1196, INTEL_BUS_CLK), 265 FREQ_INFO(1200, 1148, INTEL_BUS_CLK), 266 FREQ_INFO(1000, 1100, INTEL_BUS_CLK), 267 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 268 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 269 FREQ_INFO( 0, 0, 1), 270}; 271static freq_info PM_755B_90[] = { 272 /* 90 nm 2.00GHz Pentium M, VID #B */ 273 FREQ_INFO(2000, 1324, INTEL_BUS_CLK), 274 FREQ_INFO(1800, 1276, INTEL_BUS_CLK), 275 FREQ_INFO(1600, 1228, INTEL_BUS_CLK), 276 FREQ_INFO(1400, 1180, INTEL_BUS_CLK), 277 FREQ_INFO(1200, 1132, INTEL_BUS_CLK), 278 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 279 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 280 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 281 FREQ_INFO( 0, 0, 1), 282}; 283static freq_info PM_755C_90[] = { 284 /* 90 nm 2.00GHz Pentium M, VID #C */ 285 FREQ_INFO(2000, 1308, INTEL_BUS_CLK), 286 FREQ_INFO(1800, 1276, INTEL_BUS_CLK), 287 FREQ_INFO(1600, 1228, INTEL_BUS_CLK), 288 FREQ_INFO(1400, 1180, INTEL_BUS_CLK), 289 FREQ_INFO(1200, 1132, INTEL_BUS_CLK), 290 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 291 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 292 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 293 FREQ_INFO( 0, 0, 1), 294}; 295static freq_info PM_755D_90[] = { 296 /* 90 nm 2.00GHz Pentium M, VID #D */ 297 FREQ_INFO(2000, 1276, INTEL_BUS_CLK), 298 FREQ_INFO(1800, 1244, INTEL_BUS_CLK), 299 FREQ_INFO(1600, 1196, INTEL_BUS_CLK), 300 FREQ_INFO(1400, 1164, INTEL_BUS_CLK), 301 FREQ_INFO(1200, 1116, INTEL_BUS_CLK), 302 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 303 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 304 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 305 FREQ_INFO( 0, 0, 1), 306}; 307static freq_info PM_745A_90[] = { 308 /* 90 nm 1.80GHz Pentium M, VID #A */ 309 FREQ_INFO(1800, 1340, INTEL_BUS_CLK), 310 FREQ_INFO(1600, 1292, INTEL_BUS_CLK), 311 FREQ_INFO(1400, 1228, INTEL_BUS_CLK), 312 FREQ_INFO(1200, 1164, INTEL_BUS_CLK), 313 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 314 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 315 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 316 FREQ_INFO( 0, 0, 1), 317}; 318static freq_info PM_745B_90[] = { 319 /* 90 nm 1.80GHz Pentium M, VID #B */ 320 FREQ_INFO(1800, 1324, INTEL_BUS_CLK), 321 FREQ_INFO(1600, 1276, INTEL_BUS_CLK), 322 FREQ_INFO(1400, 1212, INTEL_BUS_CLK), 323 FREQ_INFO(1200, 1164, INTEL_BUS_CLK), 324 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 325 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 326 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 327 FREQ_INFO( 0, 0, 1), 328}; 329static freq_info PM_745C_90[] = { 330 /* 90 nm 1.80GHz Pentium M, VID #C */ 331 FREQ_INFO(1800, 1308, INTEL_BUS_CLK), 332 FREQ_INFO(1600, 1260, INTEL_BUS_CLK), 333 FREQ_INFO(1400, 1212, INTEL_BUS_CLK), 334 FREQ_INFO(1200, 1148, INTEL_BUS_CLK), 335 FREQ_INFO(1000, 1100, INTEL_BUS_CLK), 336 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 337 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 338 FREQ_INFO( 0, 0, 1), 339}; 340static freq_info PM_745D_90[] = { 341 /* 90 nm 1.80GHz Pentium M, VID #D */ 342 FREQ_INFO(1800, 1276, INTEL_BUS_CLK), 343 FREQ_INFO(1600, 1228, INTEL_BUS_CLK), 344 FREQ_INFO(1400, 1180, INTEL_BUS_CLK), 345 FREQ_INFO(1200, 1132, INTEL_BUS_CLK), 346 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 347 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 348 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 349 FREQ_INFO( 0, 0, 1), 350}; 351static freq_info PM_735A_90[] = { 352 /* 90 nm 1.70GHz Pentium M, VID #A */ 353 FREQ_INFO(1700, 1340, INTEL_BUS_CLK), 354 FREQ_INFO(1400, 1244, INTEL_BUS_CLK), 355 FREQ_INFO(1200, 1180, INTEL_BUS_CLK), 356 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 357 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 358 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 359 FREQ_INFO( 0, 0, 1), 360}; 361static freq_info PM_735B_90[] = { 362 /* 90 nm 1.70GHz Pentium M, VID #B */ 363 FREQ_INFO(1700, 1324, INTEL_BUS_CLK), 364 FREQ_INFO(1400, 1244, INTEL_BUS_CLK), 365 FREQ_INFO(1200, 1180, INTEL_BUS_CLK), 366 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 367 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 368 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 369 FREQ_INFO( 0, 0, 1), 370}; 371static freq_info PM_735C_90[] = { 372 /* 90 nm 1.70GHz Pentium M, VID #C */ 373 FREQ_INFO(1700, 1308, INTEL_BUS_CLK), 374 FREQ_INFO(1400, 1228, INTEL_BUS_CLK), 375 FREQ_INFO(1200, 1164, INTEL_BUS_CLK), 376 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 377 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 378 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 379 FREQ_INFO( 0, 0, 1), 380}; 381static freq_info PM_735D_90[] = { 382 /* 90 nm 1.70GHz Pentium M, VID #D */ 383 FREQ_INFO(1700, 1276, INTEL_BUS_CLK), 384 FREQ_INFO(1400, 1212, INTEL_BUS_CLK), 385 FREQ_INFO(1200, 1148, INTEL_BUS_CLK), 386 FREQ_INFO(1000, 1100, INTEL_BUS_CLK), 387 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 388 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 389 FREQ_INFO( 0, 0, 1), 390}; 391static freq_info PM_725A_90[] = { 392 /* 90 nm 1.60GHz Pentium M, VID #A */ 393 FREQ_INFO(1600, 1340, INTEL_BUS_CLK), 394 FREQ_INFO(1400, 1276, INTEL_BUS_CLK), 395 FREQ_INFO(1200, 1212, INTEL_BUS_CLK), 396 FREQ_INFO(1000, 1132, INTEL_BUS_CLK), 397 FREQ_INFO( 800, 1068, INTEL_BUS_CLK), 398 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 399 FREQ_INFO( 0, 0, 1), 400}; 401static freq_info PM_725B_90[] = { 402 /* 90 nm 1.60GHz Pentium M, VID #B */ 403 FREQ_INFO(1600, 1324, INTEL_BUS_CLK), 404 FREQ_INFO(1400, 1260, INTEL_BUS_CLK), 405 FREQ_INFO(1200, 1196, INTEL_BUS_CLK), 406 FREQ_INFO(1000, 1132, INTEL_BUS_CLK), 407 FREQ_INFO( 800, 1068, INTEL_BUS_CLK), 408 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 409 FREQ_INFO( 0, 0, 1), 410}; 411static freq_info PM_725C_90[] = { 412 /* 90 nm 1.60GHz Pentium M, VID #C */ 413 FREQ_INFO(1600, 1308, INTEL_BUS_CLK), 414 FREQ_INFO(1400, 1244, INTEL_BUS_CLK), 415 FREQ_INFO(1200, 1180, INTEL_BUS_CLK), 416 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 417 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 418 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 419 FREQ_INFO( 0, 0, 1), 420}; 421static freq_info PM_725D_90[] = { 422 /* 90 nm 1.60GHz Pentium M, VID #D */ 423 FREQ_INFO(1600, 1276, INTEL_BUS_CLK), 424 FREQ_INFO(1400, 1228, INTEL_BUS_CLK), 425 FREQ_INFO(1200, 1164, INTEL_BUS_CLK), 426 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 427 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 428 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 429 FREQ_INFO( 0, 0, 1), 430}; 431static freq_info PM_715A_90[] = { 432 /* 90 nm 1.50GHz Pentium M, VID #A */ 433 FREQ_INFO(1500, 1340, INTEL_BUS_CLK), 434 FREQ_INFO(1200, 1228, INTEL_BUS_CLK), 435 FREQ_INFO(1000, 1148, INTEL_BUS_CLK), 436 FREQ_INFO( 800, 1068, INTEL_BUS_CLK), 437 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 438 FREQ_INFO( 0, 0, 1), 439}; 440static freq_info PM_715B_90[] = { 441 /* 90 nm 1.50GHz Pentium M, VID #B */ 442 FREQ_INFO(1500, 1324, INTEL_BUS_CLK), 443 FREQ_INFO(1200, 1212, INTEL_BUS_CLK), 444 FREQ_INFO(1000, 1148, INTEL_BUS_CLK), 445 FREQ_INFO( 800, 1068, INTEL_BUS_CLK), 446 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 447 FREQ_INFO( 0, 0, 1), 448}; 449static freq_info PM_715C_90[] = { 450 /* 90 nm 1.50GHz Pentium M, VID #C */ 451 FREQ_INFO(1500, 1308, INTEL_BUS_CLK), 452 FREQ_INFO(1200, 1212, INTEL_BUS_CLK), 453 FREQ_INFO(1000, 1132, INTEL_BUS_CLK), 454 FREQ_INFO( 800, 1068, INTEL_BUS_CLK), 455 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 456 FREQ_INFO( 0, 0, 1), 457}; 458static freq_info PM_715D_90[] = { 459 /* 90 nm 1.50GHz Pentium M, VID #D */ 460 FREQ_INFO(1500, 1276, INTEL_BUS_CLK), 461 FREQ_INFO(1200, 1180, INTEL_BUS_CLK), 462 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 463 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 464 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 465 FREQ_INFO( 0, 0, 1), 466};
| 30 31#include <sys/param.h> 32#include <sys/bus.h> 33#include <sys/cpu.h> 34#include <sys/kernel.h> 35#include <sys/malloc.h> 36#include <sys/module.h> 37#include <sys/smp.h> 38#include <sys/systm.h> 39 40#include "cpufreq_if.h" 41#include <machine/md_var.h> 42 43#include <contrib/dev/acpica/acpi.h> 44#include <dev/acpica/acpivar.h> 45#include "acpi_if.h" 46 47/* Status/control registers (from the IA-32 System Programming Guide). */ 48#define MSR_PERF_STATUS 0x198 49#define MSR_PERF_CTL 0x199 50 51/* Register and bit for enabling SpeedStep. */ 52#define MSR_MISC_ENABLE 0x1a0 53#define MSR_SS_ENABLE (1<<16) 54 55/* Frequency and MSR control values. */ 56typedef struct { 57 uint16_t freq; 58 uint16_t volts; 59 uint16_t id16; 60 int power; 61} freq_info; 62 63/* Identifying characteristics of a processor and supported frequencies. */ 64typedef struct { 65 const char *vendor; 66 uint32_t id32; 67 uint32_t bus_clk; 68 freq_info *freqtab; 69} cpu_info; 70 71struct est_softc { 72 device_t dev; 73 int acpi_settings; 74 freq_info *freq_list; 75}; 76 77/* Convert MHz and mV into IDs for passing to the MSR. */ 78#define ID16(MHz, mV, bus_clk) \ 79 (((MHz / bus_clk) << 8) | ((mV ? mV - 700 : 0) >> 4)) 80#define ID32(MHz_hi, mV_hi, MHz_lo, mV_lo, bus_clk) \ 81 ((ID16(MHz_lo, mV_lo, bus_clk) << 16) | (ID16(MHz_hi, mV_hi, bus_clk))) 82 83/* Format for storing IDs in our table. */ 84#define FREQ_INFO(MHz, mV, bus_clk) \ 85 { MHz, mV, ID16(MHz, mV, bus_clk), CPUFREQ_VAL_UNKNOWN } 86#define INTEL(tab, zhi, vhi, zlo, vlo, bus_clk) \ 87 { GenuineIntel, ID32(zhi, vhi, zlo, vlo, bus_clk), bus_clk, tab } 88 89const char GenuineIntel[] = "GenuineIntel"; 90 91/* Default bus clock value for Centrino processors. */ 92#define INTEL_BUS_CLK 100 93 94/* XXX Update this if new CPUs have more settings. */ 95#define EST_MAX_SETTINGS 10 96CTASSERT(EST_MAX_SETTINGS <= MAX_SETTINGS); 97 98/* Estimate in microseconds of latency for performing a transition. */ 99#define EST_TRANS_LAT 10 100 101/* 102 * Frequency (MHz) and voltage (mV) settings. Data from the 103 * Intel Pentium M Processor Datasheet (Order Number 252612), Table 5. 104 * 105 * Dothan processors have multiple VID#s with different settings for 106 * each VID#. Since we can't uniquely identify this info 107 * without undisclosed methods from Intel, we can't support newer 108 * processors with this table method. If ACPI Px states are supported, 109 * we get info from them. 110 */ 111static freq_info PM17_130[] = { 112 /* 130nm 1.70GHz Pentium M */ 113 FREQ_INFO(1700, 1484, INTEL_BUS_CLK), 114 FREQ_INFO(1400, 1308, INTEL_BUS_CLK), 115 FREQ_INFO(1200, 1228, INTEL_BUS_CLK), 116 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 117 FREQ_INFO( 800, 1004, INTEL_BUS_CLK), 118 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 119 FREQ_INFO( 0, 0, 1), 120}; 121static freq_info PM16_130[] = { 122 /* 130nm 1.60GHz Pentium M */ 123 FREQ_INFO(1600, 1484, INTEL_BUS_CLK), 124 FREQ_INFO(1400, 1420, INTEL_BUS_CLK), 125 FREQ_INFO(1200, 1276, INTEL_BUS_CLK), 126 FREQ_INFO(1000, 1164, INTEL_BUS_CLK), 127 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 128 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 129 FREQ_INFO( 0, 0, 1), 130}; 131static freq_info PM15_130[] = { 132 /* 130nm 1.50GHz Pentium M */ 133 FREQ_INFO(1500, 1484, INTEL_BUS_CLK), 134 FREQ_INFO(1400, 1452, INTEL_BUS_CLK), 135 FREQ_INFO(1200, 1356, INTEL_BUS_CLK), 136 FREQ_INFO(1000, 1228, INTEL_BUS_CLK), 137 FREQ_INFO( 800, 1116, INTEL_BUS_CLK), 138 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 139 FREQ_INFO( 0, 0, 1), 140}; 141static freq_info PM14_130[] = { 142 /* 130nm 1.40GHz Pentium M */ 143 FREQ_INFO(1400, 1484, INTEL_BUS_CLK), 144 FREQ_INFO(1200, 1436, INTEL_BUS_CLK), 145 FREQ_INFO(1000, 1308, INTEL_BUS_CLK), 146 FREQ_INFO( 800, 1180, INTEL_BUS_CLK), 147 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 148 FREQ_INFO( 0, 0, 1), 149}; 150static freq_info PM13_130[] = { 151 /* 130nm 1.30GHz Pentium M */ 152 FREQ_INFO(1300, 1388, INTEL_BUS_CLK), 153 FREQ_INFO(1200, 1356, INTEL_BUS_CLK), 154 FREQ_INFO(1000, 1292, INTEL_BUS_CLK), 155 FREQ_INFO( 800, 1260, INTEL_BUS_CLK), 156 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 157 FREQ_INFO( 0, 0, 1), 158}; 159static freq_info PM13_LV_130[] = { 160 /* 130nm 1.30GHz Low Voltage Pentium M */ 161 FREQ_INFO(1300, 1180, INTEL_BUS_CLK), 162 FREQ_INFO(1200, 1164, INTEL_BUS_CLK), 163 FREQ_INFO(1100, 1100, INTEL_BUS_CLK), 164 FREQ_INFO(1000, 1020, INTEL_BUS_CLK), 165 FREQ_INFO( 900, 1004, INTEL_BUS_CLK), 166 FREQ_INFO( 800, 988, INTEL_BUS_CLK), 167 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 168 FREQ_INFO( 0, 0, 1), 169}; 170static freq_info PM12_LV_130[] = { 171 /* 130 nm 1.20GHz Low Voltage Pentium M */ 172 FREQ_INFO(1200, 1180, INTEL_BUS_CLK), 173 FREQ_INFO(1100, 1164, INTEL_BUS_CLK), 174 FREQ_INFO(1000, 1100, INTEL_BUS_CLK), 175 FREQ_INFO( 900, 1020, INTEL_BUS_CLK), 176 FREQ_INFO( 800, 1004, INTEL_BUS_CLK), 177 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 178 FREQ_INFO( 0, 0, 1), 179}; 180static freq_info PM11_LV_130[] = { 181 /* 130 nm 1.10GHz Low Voltage Pentium M */ 182 FREQ_INFO(1100, 1180, INTEL_BUS_CLK), 183 FREQ_INFO(1000, 1164, INTEL_BUS_CLK), 184 FREQ_INFO( 900, 1100, INTEL_BUS_CLK), 185 FREQ_INFO( 800, 1020, INTEL_BUS_CLK), 186 FREQ_INFO( 600, 956, INTEL_BUS_CLK), 187 FREQ_INFO( 0, 0, 1), 188}; 189static freq_info PM11_ULV_130[] = { 190 /* 130 nm 1.10GHz Ultra Low Voltage Pentium M */ 191 FREQ_INFO(1100, 1004, INTEL_BUS_CLK), 192 FREQ_INFO(1000, 988, INTEL_BUS_CLK), 193 FREQ_INFO( 900, 972, INTEL_BUS_CLK), 194 FREQ_INFO( 800, 956, INTEL_BUS_CLK), 195 FREQ_INFO( 600, 844, INTEL_BUS_CLK), 196 FREQ_INFO( 0, 0, 1), 197}; 198static freq_info PM10_ULV_130[] = { 199 /* 130 nm 1.00GHz Ultra Low Voltage Pentium M */ 200 FREQ_INFO(1000, 1004, INTEL_BUS_CLK), 201 FREQ_INFO( 900, 988, INTEL_BUS_CLK), 202 FREQ_INFO( 800, 972, INTEL_BUS_CLK), 203 FREQ_INFO( 600, 844, INTEL_BUS_CLK), 204 FREQ_INFO( 0, 0, 1), 205}; 206 207/* 208 * Data from "Intel Pentium M Processor on 90nm Process with 209 * 2-MB L2 Cache Datasheet", Order Number 302189, Table 5. 210 */ 211static freq_info PM_765A_90[] = { 212 /* 90 nm 2.10GHz Pentium M, VID #A */ 213 FREQ_INFO(2100, 1340, INTEL_BUS_CLK), 214 FREQ_INFO(1800, 1276, INTEL_BUS_CLK), 215 FREQ_INFO(1600, 1228, INTEL_BUS_CLK), 216 FREQ_INFO(1400, 1180, INTEL_BUS_CLK), 217 FREQ_INFO(1200, 1132, INTEL_BUS_CLK), 218 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 219 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 220 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 221 FREQ_INFO( 0, 0, 1), 222}; 223static freq_info PM_765B_90[] = { 224 /* 90 nm 2.10GHz Pentium M, VID #B */ 225 FREQ_INFO(2100, 1324, INTEL_BUS_CLK), 226 FREQ_INFO(1800, 1260, INTEL_BUS_CLK), 227 FREQ_INFO(1600, 1212, INTEL_BUS_CLK), 228 FREQ_INFO(1400, 1180, INTEL_BUS_CLK), 229 FREQ_INFO(1200, 1132, INTEL_BUS_CLK), 230 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 231 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 232 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 233 FREQ_INFO( 0, 0, 1), 234}; 235static freq_info PM_765C_90[] = { 236 /* 90 nm 2.10GHz Pentium M, VID #C */ 237 FREQ_INFO(2100, 1308, INTEL_BUS_CLK), 238 FREQ_INFO(1800, 1244, INTEL_BUS_CLK), 239 FREQ_INFO(1600, 1212, INTEL_BUS_CLK), 240 FREQ_INFO(1400, 1164, INTEL_BUS_CLK), 241 FREQ_INFO(1200, 1116, INTEL_BUS_CLK), 242 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 243 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 244 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 245 FREQ_INFO( 0, 0, 1), 246}; 247static freq_info PM_765E_90[] = { 248 /* 90 nm 2.10GHz Pentium M, VID #E */ 249 FREQ_INFO(2100, 1356, INTEL_BUS_CLK), 250 FREQ_INFO(1800, 1292, INTEL_BUS_CLK), 251 FREQ_INFO(1600, 1244, INTEL_BUS_CLK), 252 FREQ_INFO(1400, 1196, INTEL_BUS_CLK), 253 FREQ_INFO(1200, 1148, INTEL_BUS_CLK), 254 FREQ_INFO(1000, 1100, INTEL_BUS_CLK), 255 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 256 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 257 FREQ_INFO( 0, 0, 1), 258}; 259static freq_info PM_755A_90[] = { 260 /* 90 nm 2.00GHz Pentium M, VID #A */ 261 FREQ_INFO(2000, 1340, INTEL_BUS_CLK), 262 FREQ_INFO(1800, 1292, INTEL_BUS_CLK), 263 FREQ_INFO(1600, 1244, INTEL_BUS_CLK), 264 FREQ_INFO(1400, 1196, INTEL_BUS_CLK), 265 FREQ_INFO(1200, 1148, INTEL_BUS_CLK), 266 FREQ_INFO(1000, 1100, INTEL_BUS_CLK), 267 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 268 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 269 FREQ_INFO( 0, 0, 1), 270}; 271static freq_info PM_755B_90[] = { 272 /* 90 nm 2.00GHz Pentium M, VID #B */ 273 FREQ_INFO(2000, 1324, INTEL_BUS_CLK), 274 FREQ_INFO(1800, 1276, INTEL_BUS_CLK), 275 FREQ_INFO(1600, 1228, INTEL_BUS_CLK), 276 FREQ_INFO(1400, 1180, INTEL_BUS_CLK), 277 FREQ_INFO(1200, 1132, INTEL_BUS_CLK), 278 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 279 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 280 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 281 FREQ_INFO( 0, 0, 1), 282}; 283static freq_info PM_755C_90[] = { 284 /* 90 nm 2.00GHz Pentium M, VID #C */ 285 FREQ_INFO(2000, 1308, INTEL_BUS_CLK), 286 FREQ_INFO(1800, 1276, INTEL_BUS_CLK), 287 FREQ_INFO(1600, 1228, INTEL_BUS_CLK), 288 FREQ_INFO(1400, 1180, INTEL_BUS_CLK), 289 FREQ_INFO(1200, 1132, INTEL_BUS_CLK), 290 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 291 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 292 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 293 FREQ_INFO( 0, 0, 1), 294}; 295static freq_info PM_755D_90[] = { 296 /* 90 nm 2.00GHz Pentium M, VID #D */ 297 FREQ_INFO(2000, 1276, INTEL_BUS_CLK), 298 FREQ_INFO(1800, 1244, INTEL_BUS_CLK), 299 FREQ_INFO(1600, 1196, INTEL_BUS_CLK), 300 FREQ_INFO(1400, 1164, INTEL_BUS_CLK), 301 FREQ_INFO(1200, 1116, INTEL_BUS_CLK), 302 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 303 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 304 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 305 FREQ_INFO( 0, 0, 1), 306}; 307static freq_info PM_745A_90[] = { 308 /* 90 nm 1.80GHz Pentium M, VID #A */ 309 FREQ_INFO(1800, 1340, INTEL_BUS_CLK), 310 FREQ_INFO(1600, 1292, INTEL_BUS_CLK), 311 FREQ_INFO(1400, 1228, INTEL_BUS_CLK), 312 FREQ_INFO(1200, 1164, INTEL_BUS_CLK), 313 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 314 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 315 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 316 FREQ_INFO( 0, 0, 1), 317}; 318static freq_info PM_745B_90[] = { 319 /* 90 nm 1.80GHz Pentium M, VID #B */ 320 FREQ_INFO(1800, 1324, INTEL_BUS_CLK), 321 FREQ_INFO(1600, 1276, INTEL_BUS_CLK), 322 FREQ_INFO(1400, 1212, INTEL_BUS_CLK), 323 FREQ_INFO(1200, 1164, INTEL_BUS_CLK), 324 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 325 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 326 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 327 FREQ_INFO( 0, 0, 1), 328}; 329static freq_info PM_745C_90[] = { 330 /* 90 nm 1.80GHz Pentium M, VID #C */ 331 FREQ_INFO(1800, 1308, INTEL_BUS_CLK), 332 FREQ_INFO(1600, 1260, INTEL_BUS_CLK), 333 FREQ_INFO(1400, 1212, INTEL_BUS_CLK), 334 FREQ_INFO(1200, 1148, INTEL_BUS_CLK), 335 FREQ_INFO(1000, 1100, INTEL_BUS_CLK), 336 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 337 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 338 FREQ_INFO( 0, 0, 1), 339}; 340static freq_info PM_745D_90[] = { 341 /* 90 nm 1.80GHz Pentium M, VID #D */ 342 FREQ_INFO(1800, 1276, INTEL_BUS_CLK), 343 FREQ_INFO(1600, 1228, INTEL_BUS_CLK), 344 FREQ_INFO(1400, 1180, INTEL_BUS_CLK), 345 FREQ_INFO(1200, 1132, INTEL_BUS_CLK), 346 FREQ_INFO(1000, 1084, INTEL_BUS_CLK), 347 FREQ_INFO( 800, 1036, INTEL_BUS_CLK), 348 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 349 FREQ_INFO( 0, 0, 1), 350}; 351static freq_info PM_735A_90[] = { 352 /* 90 nm 1.70GHz Pentium M, VID #A */ 353 FREQ_INFO(1700, 1340, INTEL_BUS_CLK), 354 FREQ_INFO(1400, 1244, INTEL_BUS_CLK), 355 FREQ_INFO(1200, 1180, INTEL_BUS_CLK), 356 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 357 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 358 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 359 FREQ_INFO( 0, 0, 1), 360}; 361static freq_info PM_735B_90[] = { 362 /* 90 nm 1.70GHz Pentium M, VID #B */ 363 FREQ_INFO(1700, 1324, INTEL_BUS_CLK), 364 FREQ_INFO(1400, 1244, INTEL_BUS_CLK), 365 FREQ_INFO(1200, 1180, INTEL_BUS_CLK), 366 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 367 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 368 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 369 FREQ_INFO( 0, 0, 1), 370}; 371static freq_info PM_735C_90[] = { 372 /* 90 nm 1.70GHz Pentium M, VID #C */ 373 FREQ_INFO(1700, 1308, INTEL_BUS_CLK), 374 FREQ_INFO(1400, 1228, INTEL_BUS_CLK), 375 FREQ_INFO(1200, 1164, INTEL_BUS_CLK), 376 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 377 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 378 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 379 FREQ_INFO( 0, 0, 1), 380}; 381static freq_info PM_735D_90[] = { 382 /* 90 nm 1.70GHz Pentium M, VID #D */ 383 FREQ_INFO(1700, 1276, INTEL_BUS_CLK), 384 FREQ_INFO(1400, 1212, INTEL_BUS_CLK), 385 FREQ_INFO(1200, 1148, INTEL_BUS_CLK), 386 FREQ_INFO(1000, 1100, INTEL_BUS_CLK), 387 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 388 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 389 FREQ_INFO( 0, 0, 1), 390}; 391static freq_info PM_725A_90[] = { 392 /* 90 nm 1.60GHz Pentium M, VID #A */ 393 FREQ_INFO(1600, 1340, INTEL_BUS_CLK), 394 FREQ_INFO(1400, 1276, INTEL_BUS_CLK), 395 FREQ_INFO(1200, 1212, INTEL_BUS_CLK), 396 FREQ_INFO(1000, 1132, INTEL_BUS_CLK), 397 FREQ_INFO( 800, 1068, INTEL_BUS_CLK), 398 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 399 FREQ_INFO( 0, 0, 1), 400}; 401static freq_info PM_725B_90[] = { 402 /* 90 nm 1.60GHz Pentium M, VID #B */ 403 FREQ_INFO(1600, 1324, INTEL_BUS_CLK), 404 FREQ_INFO(1400, 1260, INTEL_BUS_CLK), 405 FREQ_INFO(1200, 1196, INTEL_BUS_CLK), 406 FREQ_INFO(1000, 1132, INTEL_BUS_CLK), 407 FREQ_INFO( 800, 1068, INTEL_BUS_CLK), 408 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 409 FREQ_INFO( 0, 0, 1), 410}; 411static freq_info PM_725C_90[] = { 412 /* 90 nm 1.60GHz Pentium M, VID #C */ 413 FREQ_INFO(1600, 1308, INTEL_BUS_CLK), 414 FREQ_INFO(1400, 1244, INTEL_BUS_CLK), 415 FREQ_INFO(1200, 1180, INTEL_BUS_CLK), 416 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 417 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 418 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 419 FREQ_INFO( 0, 0, 1), 420}; 421static freq_info PM_725D_90[] = { 422 /* 90 nm 1.60GHz Pentium M, VID #D */ 423 FREQ_INFO(1600, 1276, INTEL_BUS_CLK), 424 FREQ_INFO(1400, 1228, INTEL_BUS_CLK), 425 FREQ_INFO(1200, 1164, INTEL_BUS_CLK), 426 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 427 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 428 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 429 FREQ_INFO( 0, 0, 1), 430}; 431static freq_info PM_715A_90[] = { 432 /* 90 nm 1.50GHz Pentium M, VID #A */ 433 FREQ_INFO(1500, 1340, INTEL_BUS_CLK), 434 FREQ_INFO(1200, 1228, INTEL_BUS_CLK), 435 FREQ_INFO(1000, 1148, INTEL_BUS_CLK), 436 FREQ_INFO( 800, 1068, INTEL_BUS_CLK), 437 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 438 FREQ_INFO( 0, 0, 1), 439}; 440static freq_info PM_715B_90[] = { 441 /* 90 nm 1.50GHz Pentium M, VID #B */ 442 FREQ_INFO(1500, 1324, INTEL_BUS_CLK), 443 FREQ_INFO(1200, 1212, INTEL_BUS_CLK), 444 FREQ_INFO(1000, 1148, INTEL_BUS_CLK), 445 FREQ_INFO( 800, 1068, INTEL_BUS_CLK), 446 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 447 FREQ_INFO( 0, 0, 1), 448}; 449static freq_info PM_715C_90[] = { 450 /* 90 nm 1.50GHz Pentium M, VID #C */ 451 FREQ_INFO(1500, 1308, INTEL_BUS_CLK), 452 FREQ_INFO(1200, 1212, INTEL_BUS_CLK), 453 FREQ_INFO(1000, 1132, INTEL_BUS_CLK), 454 FREQ_INFO( 800, 1068, INTEL_BUS_CLK), 455 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 456 FREQ_INFO( 0, 0, 1), 457}; 458static freq_info PM_715D_90[] = { 459 /* 90 nm 1.50GHz Pentium M, VID #D */ 460 FREQ_INFO(1500, 1276, INTEL_BUS_CLK), 461 FREQ_INFO(1200, 1180, INTEL_BUS_CLK), 462 FREQ_INFO(1000, 1116, INTEL_BUS_CLK), 463 FREQ_INFO( 800, 1052, INTEL_BUS_CLK), 464 FREQ_INFO( 600, 988, INTEL_BUS_CLK), 465 FREQ_INFO( 0, 0, 1), 466};
|
| 506static freq_info PM_773G_90[] = { 507 /* 90 nm 1.30GHz Ultra Low Voltage Pentium M, VID #G */ 508 FREQ_INFO(1300, 956, INTEL_BUS_CLK), 509 FREQ_INFO(1200, 940, INTEL_BUS_CLK), 510 FREQ_INFO(1100, 924, INTEL_BUS_CLK), 511 FREQ_INFO(1000, 908, INTEL_BUS_CLK), 512 FREQ_INFO( 900, 876, INTEL_BUS_CLK), 513 FREQ_INFO( 800, 860, INTEL_BUS_CLK), 514 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 515}; 516static freq_info PM_773H_90[] = { 517 /* 90 nm 1.30GHz Ultra Low Voltage Pentium M, VID #H */ 518 FREQ_INFO(1300, 940, INTEL_BUS_CLK), 519 FREQ_INFO(1200, 924, INTEL_BUS_CLK), 520 FREQ_INFO(1100, 908, INTEL_BUS_CLK), 521 FREQ_INFO(1000, 892, INTEL_BUS_CLK), 522 FREQ_INFO( 900, 876, INTEL_BUS_CLK), 523 FREQ_INFO( 800, 860, INTEL_BUS_CLK), 524 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 525}; 526static freq_info PM_773I_90[] = { 527 /* 90 nm 1.30GHz Ultra Low Voltage Pentium M, VID #I */ 528 FREQ_INFO(1300, 924, INTEL_BUS_CLK), 529 FREQ_INFO(1200, 908, INTEL_BUS_CLK), 530 FREQ_INFO(1100, 892, INTEL_BUS_CLK), 531 FREQ_INFO(1000, 876, INTEL_BUS_CLK), 532 FREQ_INFO( 900, 860, INTEL_BUS_CLK), 533 FREQ_INFO( 800, 844, INTEL_BUS_CLK), 534 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 535}; 536static freq_info PM_773J_90[] = { 537 /* 90 nm 1.30GHz Ultra Low Voltage Pentium M, VID #J */ 538 FREQ_INFO(1300, 908, INTEL_BUS_CLK), 539 FREQ_INFO(1200, 908, INTEL_BUS_CLK), 540 FREQ_INFO(1100, 892, INTEL_BUS_CLK), 541 FREQ_INFO(1000, 876, INTEL_BUS_CLK), 542 FREQ_INFO( 900, 860, INTEL_BUS_CLK), 543 FREQ_INFO( 800, 844, INTEL_BUS_CLK), 544 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 545}; 546static freq_info PM_773K_90[] = { 547 /* 90 nm 1.30GHz Ultra Low Voltage Pentium M, VID #K */ 548 FREQ_INFO(1300, 892, INTEL_BUS_CLK), 549 FREQ_INFO(1200, 892, INTEL_BUS_CLK), 550 FREQ_INFO(1100, 876, INTEL_BUS_CLK), 551 FREQ_INFO(1000, 860, INTEL_BUS_CLK), 552 FREQ_INFO( 900, 860, INTEL_BUS_CLK), 553 FREQ_INFO( 800, 844, INTEL_BUS_CLK), 554 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 555}; 556static freq_info PM_773L_90[] = { 557 /* 90 nm 1.30GHz Ultra Low Voltage Pentium M, VID #L */ 558 FREQ_INFO(1300, 876, INTEL_BUS_CLK), 559 FREQ_INFO(1200, 876, INTEL_BUS_CLK), 560 FREQ_INFO(1100, 860, INTEL_BUS_CLK), 561 FREQ_INFO(1000, 860, INTEL_BUS_CLK), 562 FREQ_INFO( 900, 844, INTEL_BUS_CLK), 563 FREQ_INFO( 800, 844, INTEL_BUS_CLK), 564 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 565}; 566static freq_info PM_753G_90[] = { 567 /* 90 nm 1.20GHz Ultra Low Voltage Pentium M, VID #G */ 568 FREQ_INFO(1200, 956, INTEL_BUS_CLK), 569 FREQ_INFO(1100, 940, INTEL_BUS_CLK), 570 FREQ_INFO(1000, 908, INTEL_BUS_CLK), 571 FREQ_INFO( 900, 892, INTEL_BUS_CLK), 572 FREQ_INFO( 800, 860, INTEL_BUS_CLK), 573 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 574}; 575static freq_info PM_753H_90[] = { 576 /* 90 nm 1.20GHz Ultra Low Voltage Pentium M, VID #H */ 577 FREQ_INFO(1200, 940, INTEL_BUS_CLK), 578 FREQ_INFO(1100, 924, INTEL_BUS_CLK), 579 FREQ_INFO(1000, 908, INTEL_BUS_CLK), 580 FREQ_INFO( 900, 876, INTEL_BUS_CLK), 581 FREQ_INFO( 800, 860, INTEL_BUS_CLK), 582 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 583}; 584static freq_info PM_753I_90[] = { 585 /* 90 nm 1.20GHz Ultra Low Voltage Pentium M, VID #I */ 586 FREQ_INFO(1200, 924, INTEL_BUS_CLK), 587 FREQ_INFO(1100, 908, INTEL_BUS_CLK), 588 FREQ_INFO(1000, 892, INTEL_BUS_CLK), 589 FREQ_INFO( 900, 876, INTEL_BUS_CLK), 590 FREQ_INFO( 800, 860, INTEL_BUS_CLK), 591 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 592}; 593static freq_info PM_753J_90[] = { 594 /* 90 nm 1.20GHz Ultra Low Voltage Pentium M, VID #J */ 595 FREQ_INFO(1200, 908, INTEL_BUS_CLK), 596 FREQ_INFO(1100, 892, INTEL_BUS_CLK), 597 FREQ_INFO(1000, 876, INTEL_BUS_CLK), 598 FREQ_INFO( 900, 860, INTEL_BUS_CLK), 599 FREQ_INFO( 800, 844, INTEL_BUS_CLK), 600 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 601}; 602static freq_info PM_753K_90[] = { 603 /* 90 nm 1.20GHz Ultra Low Voltage Pentium M, VID #K */ 604 FREQ_INFO(1200, 892, INTEL_BUS_CLK), 605 FREQ_INFO(1100, 892, INTEL_BUS_CLK), 606 FREQ_INFO(1000, 876, INTEL_BUS_CLK), 607 FREQ_INFO( 900, 860, INTEL_BUS_CLK), 608 FREQ_INFO( 800, 844, INTEL_BUS_CLK), 609 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 610}; 611static freq_info PM_753L_90[] = { 612 /* 90 nm 1.20GHz Ultra Low Voltage Pentium M, VID #L */ 613 FREQ_INFO(1200, 876, INTEL_BUS_CLK), 614 FREQ_INFO(1100, 876, INTEL_BUS_CLK), 615 FREQ_INFO(1000, 860, INTEL_BUS_CLK), 616 FREQ_INFO( 900, 844, INTEL_BUS_CLK), 617 FREQ_INFO( 800, 844, INTEL_BUS_CLK), 618 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 619}; 620 621static freq_info PM_733JG_90[] = { 622 /* 90 nm 1.10GHz Ultra Low Voltage Pentium M, VID #G */ 623 FREQ_INFO(1100, 956, INTEL_BUS_CLK), 624 FREQ_INFO(1000, 940, INTEL_BUS_CLK), 625 FREQ_INFO( 900, 908, INTEL_BUS_CLK), 626 FREQ_INFO( 800, 876, INTEL_BUS_CLK), 627 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 628}; 629static freq_info PM_733JH_90[] = { 630 /* 90 nm 1.10GHz Ultra Low Voltage Pentium M, VID #H */ 631 FREQ_INFO(1100, 940, INTEL_BUS_CLK), 632 FREQ_INFO(1000, 924, INTEL_BUS_CLK), 633 FREQ_INFO( 900, 892, INTEL_BUS_CLK), 634 FREQ_INFO( 800, 876, INTEL_BUS_CLK), 635 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 636}; 637static freq_info PM_733JI_90[] = { 638 /* 90 nm 1.10GHz Ultra Low Voltage Pentium M, VID #I */ 639 FREQ_INFO(1100, 924, INTEL_BUS_CLK), 640 FREQ_INFO(1000, 908, INTEL_BUS_CLK), 641 FREQ_INFO( 900, 892, INTEL_BUS_CLK), 642 FREQ_INFO( 800, 860, INTEL_BUS_CLK), 643 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 644}; 645static freq_info PM_733JJ_90[] = { 646 /* 90 nm 1.10GHz Ultra Low Voltage Pentium M, VID #J */ 647 FREQ_INFO(1100, 908, INTEL_BUS_CLK), 648 FREQ_INFO(1000, 892, INTEL_BUS_CLK), 649 FREQ_INFO( 900, 876, INTEL_BUS_CLK), 650 FREQ_INFO( 800, 860, INTEL_BUS_CLK), 651 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 652}; 653static freq_info PM_733JK_90[] = { 654 /* 90 nm 1.10GHz Ultra Low Voltage Pentium M, VID #K */ 655 FREQ_INFO(1100, 892, INTEL_BUS_CLK), 656 FREQ_INFO(1000, 876, INTEL_BUS_CLK), 657 FREQ_INFO( 900, 860, INTEL_BUS_CLK), 658 FREQ_INFO( 800, 844, INTEL_BUS_CLK), 659 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 660}; 661static freq_info PM_733JL_90[] = { 662 /* 90 nm 1.10GHz Ultra Low Voltage Pentium M, VID #L */ 663 FREQ_INFO(1100, 876, INTEL_BUS_CLK), 664 FREQ_INFO(1000, 876, INTEL_BUS_CLK), 665 FREQ_INFO( 900, 860, INTEL_BUS_CLK), 666 FREQ_INFO( 800, 844, INTEL_BUS_CLK), 667 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 668};
|
479static freq_info PM_733_90[] = { 480 /* 90 nm 1.10GHz Ultra Low Voltage Pentium M */ 481 FREQ_INFO(1100, 940, INTEL_BUS_CLK), 482 FREQ_INFO(1000, 924, INTEL_BUS_CLK), 483 FREQ_INFO( 900, 892, INTEL_BUS_CLK), 484 FREQ_INFO( 800, 876, INTEL_BUS_CLK), 485 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 486 FREQ_INFO( 0, 0, 1), 487}; 488static freq_info PM_723_90[] = { 489 /* 90 nm 1.00GHz Ultra Low Voltage Pentium M */ 490 FREQ_INFO(1000, 940, INTEL_BUS_CLK), 491 FREQ_INFO( 900, 908, INTEL_BUS_CLK), 492 FREQ_INFO( 800, 876, INTEL_BUS_CLK), 493 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 494 FREQ_INFO( 0, 0, 1), 495}; 496 497static cpu_info ESTprocs[] = { 498 INTEL(PM17_130, 1700, 1484, 600, 956, INTEL_BUS_CLK), 499 INTEL(PM16_130, 1600, 1484, 600, 956, INTEL_BUS_CLK), 500 INTEL(PM15_130, 1500, 1484, 600, 956, INTEL_BUS_CLK), 501 INTEL(PM14_130, 1400, 1484, 600, 956, INTEL_BUS_CLK), 502 INTEL(PM13_130, 1300, 1388, 600, 956, INTEL_BUS_CLK), 503 INTEL(PM13_LV_130, 1300, 1180, 600, 956, INTEL_BUS_CLK), 504 INTEL(PM12_LV_130, 1200, 1180, 600, 956, INTEL_BUS_CLK), 505 INTEL(PM11_LV_130, 1100, 1180, 600, 956, INTEL_BUS_CLK), 506 INTEL(PM11_ULV_130, 1100, 1004, 600, 844, INTEL_BUS_CLK), 507 INTEL(PM10_ULV_130, 1000, 1004, 600, 844, INTEL_BUS_CLK), 508 INTEL(PM_765A_90, 2100, 1340, 600, 988, INTEL_BUS_CLK), 509 INTEL(PM_765B_90, 2100, 1324, 600, 988, INTEL_BUS_CLK), 510 INTEL(PM_765C_90, 2100, 1308, 600, 988, INTEL_BUS_CLK), 511 INTEL(PM_765E_90, 2100, 1356, 600, 988, INTEL_BUS_CLK), 512 INTEL(PM_755A_90, 2000, 1340, 600, 988, INTEL_BUS_CLK), 513 INTEL(PM_755B_90, 2000, 1324, 600, 988, INTEL_BUS_CLK), 514 INTEL(PM_755C_90, 2000, 1308, 600, 988, INTEL_BUS_CLK), 515 INTEL(PM_755D_90, 2000, 1276, 600, 988, INTEL_BUS_CLK), 516 INTEL(PM_745A_90, 1800, 1340, 600, 988, INTEL_BUS_CLK), 517 INTEL(PM_745B_90, 1800, 1324, 600, 988, INTEL_BUS_CLK), 518 INTEL(PM_745C_90, 1800, 1308, 600, 988, INTEL_BUS_CLK), 519 INTEL(PM_745D_90, 1800, 1276, 600, 988, INTEL_BUS_CLK), 520 INTEL(PM_735A_90, 1700, 1340, 600, 988, INTEL_BUS_CLK), 521 INTEL(PM_735B_90, 1700, 1324, 600, 988, INTEL_BUS_CLK), 522 INTEL(PM_735C_90, 1700, 1308, 600, 988, INTEL_BUS_CLK), 523 INTEL(PM_735D_90, 1700, 1276, 600, 988, INTEL_BUS_CLK), 524 INTEL(PM_725A_90, 1600, 1340, 600, 988, INTEL_BUS_CLK), 525 INTEL(PM_725B_90, 1600, 1324, 600, 988, INTEL_BUS_CLK), 526 INTEL(PM_725C_90, 1600, 1308, 600, 988, INTEL_BUS_CLK), 527 INTEL(PM_725D_90, 1600, 1276, 600, 988, INTEL_BUS_CLK), 528 INTEL(PM_715A_90, 1500, 1340, 600, 988, INTEL_BUS_CLK), 529 INTEL(PM_715B_90, 1500, 1324, 600, 988, INTEL_BUS_CLK), 530 INTEL(PM_715C_90, 1500, 1308, 600, 988, INTEL_BUS_CLK), 531 INTEL(PM_715D_90, 1500, 1276, 600, 988, INTEL_BUS_CLK),
| 669static freq_info PM_733_90[] = { 670 /* 90 nm 1.10GHz Ultra Low Voltage Pentium M */ 671 FREQ_INFO(1100, 940, INTEL_BUS_CLK), 672 FREQ_INFO(1000, 924, INTEL_BUS_CLK), 673 FREQ_INFO( 900, 892, INTEL_BUS_CLK), 674 FREQ_INFO( 800, 876, INTEL_BUS_CLK), 675 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 676 FREQ_INFO( 0, 0, 1), 677}; 678static freq_info PM_723_90[] = { 679 /* 90 nm 1.00GHz Ultra Low Voltage Pentium M */ 680 FREQ_INFO(1000, 940, INTEL_BUS_CLK), 681 FREQ_INFO( 900, 908, INTEL_BUS_CLK), 682 FREQ_INFO( 800, 876, INTEL_BUS_CLK), 683 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 684 FREQ_INFO( 0, 0, 1), 685}; 686 687static cpu_info ESTprocs[] = { 688 INTEL(PM17_130, 1700, 1484, 600, 956, INTEL_BUS_CLK), 689 INTEL(PM16_130, 1600, 1484, 600, 956, INTEL_BUS_CLK), 690 INTEL(PM15_130, 1500, 1484, 600, 956, INTEL_BUS_CLK), 691 INTEL(PM14_130, 1400, 1484, 600, 956, INTEL_BUS_CLK), 692 INTEL(PM13_130, 1300, 1388, 600, 956, INTEL_BUS_CLK), 693 INTEL(PM13_LV_130, 1300, 1180, 600, 956, INTEL_BUS_CLK), 694 INTEL(PM12_LV_130, 1200, 1180, 600, 956, INTEL_BUS_CLK), 695 INTEL(PM11_LV_130, 1100, 1180, 600, 956, INTEL_BUS_CLK), 696 INTEL(PM11_ULV_130, 1100, 1004, 600, 844, INTEL_BUS_CLK), 697 INTEL(PM10_ULV_130, 1000, 1004, 600, 844, INTEL_BUS_CLK), 698 INTEL(PM_765A_90, 2100, 1340, 600, 988, INTEL_BUS_CLK), 699 INTEL(PM_765B_90, 2100, 1324, 600, 988, INTEL_BUS_CLK), 700 INTEL(PM_765C_90, 2100, 1308, 600, 988, INTEL_BUS_CLK), 701 INTEL(PM_765E_90, 2100, 1356, 600, 988, INTEL_BUS_CLK), 702 INTEL(PM_755A_90, 2000, 1340, 600, 988, INTEL_BUS_CLK), 703 INTEL(PM_755B_90, 2000, 1324, 600, 988, INTEL_BUS_CLK), 704 INTEL(PM_755C_90, 2000, 1308, 600, 988, INTEL_BUS_CLK), 705 INTEL(PM_755D_90, 2000, 1276, 600, 988, INTEL_BUS_CLK), 706 INTEL(PM_745A_90, 1800, 1340, 600, 988, INTEL_BUS_CLK), 707 INTEL(PM_745B_90, 1800, 1324, 600, 988, INTEL_BUS_CLK), 708 INTEL(PM_745C_90, 1800, 1308, 600, 988, INTEL_BUS_CLK), 709 INTEL(PM_745D_90, 1800, 1276, 600, 988, INTEL_BUS_CLK), 710 INTEL(PM_735A_90, 1700, 1340, 600, 988, INTEL_BUS_CLK), 711 INTEL(PM_735B_90, 1700, 1324, 600, 988, INTEL_BUS_CLK), 712 INTEL(PM_735C_90, 1700, 1308, 600, 988, INTEL_BUS_CLK), 713 INTEL(PM_735D_90, 1700, 1276, 600, 988, INTEL_BUS_CLK), 714 INTEL(PM_725A_90, 1600, 1340, 600, 988, INTEL_BUS_CLK), 715 INTEL(PM_725B_90, 1600, 1324, 600, 988, INTEL_BUS_CLK), 716 INTEL(PM_725C_90, 1600, 1308, 600, 988, INTEL_BUS_CLK), 717 INTEL(PM_725D_90, 1600, 1276, 600, 988, INTEL_BUS_CLK), 718 INTEL(PM_715A_90, 1500, 1340, 600, 988, INTEL_BUS_CLK), 719 INTEL(PM_715B_90, 1500, 1324, 600, 988, INTEL_BUS_CLK), 720 INTEL(PM_715C_90, 1500, 1308, 600, 988, INTEL_BUS_CLK), 721 INTEL(PM_715D_90, 1500, 1276, 600, 988, INTEL_BUS_CLK),
|