Skip to content

Commit c9cb78f

Browse files
committed
[Intel/EP] Query the QPI frequency from all available QPI_Link.
1 parent cd4cdfb commit c9cb78f

File tree

5 files changed

+41
-16
lines changed

5 files changed

+41
-16
lines changed

corefreq-api.h

+8-3
Original file line numberDiff line numberDiff line change
@@ -1118,8 +1118,9 @@ typedef struct
11181118
/* Source: Intel Xeon Processor E5 & E7 v1 Datasheet Vol 2 */
11191119
/* DMI2: Device=0 - Function=0 */
11201120
#define DID_INTEL_SNB_EP_HOST_BRIDGE 0x3c00
1121-
/* QPIMISCSTAT: Device=8 - Function=0 */
1121+
/* QPIMISCSTAT: Device=8,9 - Function=0 */
11221122
#define DID_INTEL_SNB_EP_QPI_LINK0 0x3c80
1123+
#define DID_INTEL_SNB_EP_QPI_LINK1 0x3c90
11231124
/* Integrated Memory Controller # : General and MemHot Registers */
11241125
/* Xeon E5 - CPGC: Device=15 - Function=0 */
11251126
#define DID_INTEL_SNB_EP_IMC_CTRL0_CPGC 0x3ca8
@@ -1156,8 +1157,10 @@ typedef struct
11561157
/* Source: Intel Xeon Processor E5 & E7 v2 Datasheet Vol 2 */
11571158
/* DMI2: Device=0 - Function=0 */
11581159
#define DID_INTEL_IVB_EP_HOST_BRIDGE 0x0e00
1159-
/* QPIMISCSTAT: Device=8 - Function=0 */
1160+
/* QPIMISCSTAT: Device={8,9},10 - Function=0 */
11601161
#define DID_INTEL_IVB_EP_QPI_LINK0 0x0e80
1162+
#define DID_INTEL_IVB_EP_QPI_LINK1 0x0e90
1163+
#define DID_INTEL_IVB_EP_QPI_LINK2 0x0e40
11611164
/* Integrated Memory Controller # : General and MemHot Registers */
11621165
/* Xeon E5 - CPGC: Device=15 - Function=0 */
11631166
#define DID_INTEL_IVB_EP_IMC_CTRL0_CPGC 0x0ea8
@@ -1194,8 +1197,10 @@ typedef struct
11941197
/* Source: Intel Xeon Processor E5 & E7 v3 Datasheet Vol 2 */
11951198
/* DMI2: Device=0 - Function=0 */
11961199
#define DID_INTEL_HSW_EP_HOST_BRIDGE 0x2f00
1197-
/* QPIMISCSTAT: Device=8 - Function=0 */
1200+
/* QPIMISCSTAT: Device={8,9},10 - Function=0 */
11981201
#define DID_INTEL_HSW_EP_QPI_LINK0 0x2f80
1202+
#define DID_INTEL_HSW_EP_QPI_LINK1 0x2f90
1203+
#define DID_INTEL_HSW_EP_QPI_LINK2 0x2f40
11991204
/* Integrated Memory Controller # : General and MemHot Registers */
12001205
/* Xeon E7 - CPGC: Device=19 - Function=0,1 */
12011206
#define DID_INTEL_HSW_E7_IMC_CTRL0_F0_CPGC 0x2fa8

corefreqd.c

+9-9
Original file line numberDiff line numberDiff line change
@@ -3694,10 +3694,10 @@ void SNB_EP_CAP(RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), RO(CORE) *RO(Core))
36943694
RO(Shm)->Uncore.CtrlSpeed /= RO(Shm)->Proc.Features.Factory.Clock.Hz;
36953695

36963696
RO(Shm)->Uncore.Bus.Rate = \
3697-
RO(Proc)->Uncore.Bus.QuickPath.IVB_EP.QPIFREQSEL == 0b010 ?
3698-
5600 : RO(Proc)->Uncore.Bus.QuickPath.IVB_EP.QPIFREQSEL == 0b011 ?
3699-
6400 : RO(Proc)->Uncore.Bus.QuickPath.IVB_EP.QPIFREQSEL == 0b100 ?
3700-
7200 : RO(Proc)->Uncore.Bus.QuickPath.IVB_EP.QPIFREQSEL == 0b101 ?
3697+
RO(Proc)->Uncore.Bus.QuickPath.EP.QPIFREQSEL == 0b010 ?
3698+
5600 : RO(Proc)->Uncore.Bus.QuickPath.EP.QPIFREQSEL == 0b011 ?
3699+
6400 : RO(Proc)->Uncore.Bus.QuickPath.EP.QPIFREQSEL == 0b100 ?
3700+
7200 : RO(Proc)->Uncore.Bus.QuickPath.EP.QPIFREQSEL == 0b101 ?
37013701
8000 : 5000;
37023702

37033703
RO(Shm)->Uncore.Bus.Speed = (RO(Core)->Clock.Hz
@@ -3987,11 +3987,11 @@ void HSW_EP_CAP(RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), RO(CORE) *RO(Core))
39873987
RO(Shm)->Uncore.CtrlSpeed /= RO(Shm)->Proc.Features.Factory.Clock.Hz;
39883988

39893989
RO(Shm)->Uncore.Bus.Rate = \
3990-
RO(Proc)->Uncore.Bus.QuickPath.IVB_EP.QPIFREQSEL == 0b010 ?
3991-
5600 : RO(Proc)->Uncore.Bus.QuickPath.IVB_EP.QPIFREQSEL == 0b011 ?
3992-
6400 : RO(Proc)->Uncore.Bus.QuickPath.IVB_EP.QPIFREQSEL == 0b100 ?
3993-
7200 : RO(Proc)->Uncore.Bus.QuickPath.IVB_EP.QPIFREQSEL == 0b101 ?
3994-
8000 : RO(Proc)->Uncore.Bus.QuickPath.IVB_EP.QPIFREQSEL == 0b111 ?
3990+
RO(Proc)->Uncore.Bus.QuickPath.EP.QPIFREQSEL == 0b010 ?
3991+
5600 : RO(Proc)->Uncore.Bus.QuickPath.EP.QPIFREQSEL == 0b011 ?
3992+
6400 : RO(Proc)->Uncore.Bus.QuickPath.EP.QPIFREQSEL == 0b100 ?
3993+
7200 : RO(Proc)->Uncore.Bus.QuickPath.EP.QPIFREQSEL == 0b101 ?
3994+
8000 : RO(Proc)->Uncore.Bus.QuickPath.EP.QPIFREQSEL == 0b111 ?
39953995
9600 : 6400;
39963996

39973997
RO(Shm)->Uncore.Bus.Speed = (RO(Core)->Clock.Hz

corefreqk.c

+6-2
Original file line numberDiff line numberDiff line change
@@ -5286,9 +5286,13 @@ static PCI_CALLBACK SNB_EP_TAD_CTRL1_CHA3(struct pci_dev *dev)
52865286

52875287
static PCI_CALLBACK SNB_EP_QPI(struct pci_dev *dev)
52885288
{
5289-
pci_read_config_dword(dev, 0xd4,
5290-
&PUBLIC(RO(Proc))->Uncore.Bus.QuickPath.value);
5289+
QPI_FREQUENCY QuickPath = {.value = 0};
5290+
pci_read_config_dword(dev, 0xd4, &QuickPath.value);
52915291

5292+
if ((PUBLIC(RO(Proc))->Uncore.Bus.QuickPath.EP.QPIFREQSEL == 0b000)
5293+
&& (QuickPath.EP.QPIFREQSEL != 0b000)) {
5294+
PUBLIC(RO(Proc))->Uncore.Bus.QuickPath = QuickPath;
5295+
}
52925296
return (PCI_CALLBACK) 0;
52935297
}
52945298

corefreqk.h

+16
Original file line numberDiff line numberDiff line change
@@ -2274,10 +2274,22 @@ static struct pci_device_id PCI_SandyBridge_EP_ids[] = {
22742274
PCI_VDEVICE(INTEL, DID_INTEL_SNB_EP_QPI_LINK0),
22752275
.driver_data = (kernel_ulong_t) SNB_EP_QPI
22762276
},
2277+
{
2278+
PCI_VDEVICE(INTEL, DID_INTEL_SNB_EP_QPI_LINK1),
2279+
.driver_data = (kernel_ulong_t) SNB_EP_QPI
2280+
},
22772281
{
22782282
PCI_VDEVICE(INTEL, DID_INTEL_IVB_EP_QPI_LINK0),
22792283
.driver_data = (kernel_ulong_t) SNB_EP_QPI
22802284
},
2285+
{ /* Bus: 1 Device: 9 Function: 0 (From B stepping) */
2286+
PCI_VDEVICE(INTEL, DID_INTEL_IVB_EP_QPI_LINK1),
2287+
.driver_data = (kernel_ulong_t) SNB_EP_QPI
2288+
},
2289+
{
2290+
PCI_VDEVICE(INTEL, DID_INTEL_IVB_EP_QPI_LINK2),
2291+
.driver_data = (kernel_ulong_t) SNB_EP_QPI
2292+
},
22812293
/* Power Control Unit */
22822294
{
22832295
PCI_VDEVICE(INTEL, DID_INTEL_SNB_EP_CAPABILITY),
@@ -2449,6 +2461,10 @@ static struct pci_device_id PCI_Haswell_ids[] = {
24492461
PCI_VDEVICE(INTEL, DID_INTEL_HSW_EP_QPI_LINK0),
24502462
.driver_data = (kernel_ulong_t) HSW_EP_QPI
24512463
},
2464+
{
2465+
PCI_VDEVICE(INTEL, DID_INTEL_HSW_EP_QPI_LINK2),
2466+
.driver_data = (kernel_ulong_t) HSW_EP_QPI
2467+
},
24522468
/* Power Control Unit */
24532469
{
24542470
PCI_VDEVICE(INTEL, DID_INTEL_HSW_EP_CAPABILITY),

intelmsr.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -2704,13 +2704,13 @@ typedef union
27042704
ReservedBits : 31-2,
27052705
VT_d : 32-31; /* Placeholder for VT-d: 0=Enable */
27062706
} X58;
2707-
struct { /* Xeon E7 v2 & Xeon E5 v2 */
2707+
struct { /* Xeon E7 v2 & Xeon E5 v1,v2,v3 */
27082708
unsigned int
27092709
QPIFREQSEL : 3-0, /*010=5600,011=6400,100=7200,101=8000*/
27102710
ReservedBits1 : 4-3,
27112711
Slow_Mode : 5-4,
27122712
ReservedBits2 : 32-5;
2713-
} IVB_EP; /* Defined in SNB_EP as QPIMISCSTAT. HSW_EP: 111=9600 */
2713+
} EP; /* Defined in SNB_EP as QPIMISCSTAT. HSW_EP: 111=9600 */
27142714
} QPI_FREQUENCY;
27152715

27162716

0 commit comments

Comments
 (0)