1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
/*
* (C) 2001 Dave Jones.
*
* Licensed under the terms of the GNU GPL License version 2.
*
* Longhaul register decoding.
*/
#include <stdio.h>
#include "../x86info.h"
union msr_longhaul {
struct {
unsigned RevisionID:4, // 3:0
RevisionKey:4, // 7:4
EnableSoftBusRatio:1, // 8
EnableSoftVID:1, // 9
EnableSoftBSEL:1, // 10
Reserved:3, // 11:13
SoftBusRatio4:1, // 14
VRMRev:1, // 15
SoftBusRatio:4, // 19:16
SoftVID:5, // 24:20
Reserved2:3, // 27:25
SoftBSEL:2, // 29:28
Reserved3:2, // 31:30
MaxMHzBR:4, // 35:32
MaximumVID:5, // 40:36
MaxMHzFSB:2, // 42:41
MaxMHzBR4:1, // 43
Reserved4:4, // 47:44
MinMHzBR:4, // 51:48
MinimumVID:5, // 56:52
MinMHzFSB:2, // 58:57
MinMHzBR4:1, // 59
Reserved5:4; // 63:60
} bits;
unsigned long long val;
};
void decode_longhaul(struct cpudata *cpu)
{
union msr_longhaul longhaul;
if (read_msr(cpu->number, 0x110A, &longhaul.val) == 1) {
dumpmsr (cpu->number, 0x110A, 64);
if (longhaul.bits.RevisionID & 1)
printf("\tSoftVID support\n");
if (longhaul.bits.RevisionID & 2)
printf("\tSoftBSEL support\n");
if (longhaul.bits.RevisionID == 0)
printf("\tSoftware clock multiplier only: No Softvid\n");
if (longhaul.bits.EnableSoftBusRatio==1)
printf("\tEnableSoftBusRatio=Enabled\n");
if (longhaul.bits.EnableSoftVID==1)
printf("\tEnableSoftVID=Enabled\n");
if (longhaul.bits.EnableSoftBSEL==1)
printf("\tEnableSoftBSEL=Enabled\n");
printf("\tSoftBusRatio4=%s\n", longhaul.bits.SoftBusRatio4 ? "1" : "0");
printf("\tSoftBusRatio=");
binary (4, longhaul.bits.SoftBusRatio);
if (longhaul.bits.RevisionID & 1)
printf("\tVRM Rev=%s\n",
longhaul.bits.VRMRev ? "Mobile VRM" : "VRM 8.5");
printf("\tMaxMHzBR4: %s\n", longhaul.bits.MaxMHzBR4 ? "1" : "0");
printf("\tMaxMHzBR: ");
binary (4, longhaul.bits.MaxMHzBR);
printf("\tMaximumVID: ");
binary (5, longhaul.bits.MaximumVID);
printf("\tMaxMHzFSB: ");
binary (2, longhaul.bits.MaxMHzFSB);
printf("\tMinMHzBR4: %s\n", longhaul.bits.MinMHzBR4 ? "1" : "0");
printf("\tMinMHzBR: ");
binary (4, longhaul.bits.MinMHzBR);
printf("\tMinimumVID: ");
binary (4, longhaul.bits.MinimumVID);
printf("\tMinMHzFSB: ");
binary (2, longhaul.bits.MinMHzFSB);
}
}
|