Skip to content

Commit aef8ee7

Browse files
committed
[Intel] Routing the Haswell-EP devices (initial implementation)
[SNB] Refactoring the count of IMC channels & DIMMs
1 parent fd3f1b3 commit aef8ee7

File tree

5 files changed

+524
-31
lines changed

5 files changed

+524
-31
lines changed

corefreq-api.h

+21-15
Original file line numberDiff line numberDiff line change
@@ -657,10 +657,14 @@ typedef struct
657657
/* 5008h */ MAD1; /* 32 bits */
658658
} SNB;
659659
struct {
660-
SNB_EP_MC_TECH TECH; /* 32 bits */
660+
/* 7Ch*/ SNB_EP_MC_TECH TECH; /* 32 bits */
661661
/* 80h */ SNB_EP_TADWAYNESS TAD; /* 12x32 bits */
662662
} SNB_EP;
663663
struct {
664+
/* 7Ch*/ HSW_EP_MC_TECH TECH; /* 32 bits */
665+
/* 80h */ HSW_EP_TADWAYNESS TAD; /* 12x32 bits */
666+
} HSW_EP;
667+
struct {
664668
/* 5000h */ SKL_IMC_MAD_MAPPING MADCH; /* 32 bits */
665669
/* 5004h */ SKL_IMC_MAD_CHANNEL MADC0, /* 32 bits */
666670
/* 5008h */ MADC1; /* 32 bits */
@@ -1193,21 +1197,23 @@ typedef struct
11931197
/* QPIMISCSTAT: Device=8 - Function=0 */
11941198
#define DID_INTEL_HSW_EP_QPI_LINK0 0x2f80
11951199
/* Integrated Memory Controller # : General and MemHot Registers */
1196-
/* Xeon E5 - CPGC: Device=19 - Function=0 */
1197-
#define DID_INTEL_HSW_EP_IMC_CTRL0_CPGC 0x2fa8
1198-
/* Xeon E7 - CPGC: Device=22 - Function=0 */
1199-
#define DID_INTEL_HSW_EP_IMC_CTRL1_CPGC 0x2f68
1200+
/* Xeon E7 - CPGC: Device=19 - Function=0,1 */
1201+
#define DID_INTEL_HSW_E7_IMC_CTRL0_F0_CPGC 0x2fa8
1202+
#define DID_INTEL_HSW_E7_IMC_CTRL0_F1_CPGC 0x2f71
1203+
/* Xeon E7 - CPGC: Device=22 - Function=0,1 */
1204+
#define DID_INTEL_HSW_E7_IMC_CTRL1_F0_CPGC 0x2f68
1205+
#define DID_INTEL_HSW_E7_IMC_CTRL1_F1_CPGC 0x2f79
12001206
/* Integrated Memory Controller # : Channel [m-M] Thermal Registers*/
1201-
/*TODO( Controller #0: Device=?? - Function=0,1,2,3 )
1202-
#define DID_INTEL_HSW_EP_IMC_CTRL0_CH0 0x0
1203-
#define DID_INTEL_HSW_EP_IMC_CTRL0_CH1 0x0
1204-
#define DID_INTEL_HSW_EP_IMC_CTRL0_CH2 0x0
1205-
#define DID_INTEL_HSW_EP_IMC_CTRL0_CH3 0x0 */
1206-
/*TODO( Controller #1: Device=?? - Function=4,5,6,7 )
1207-
#define DID_INTEL_HSW_EP_IMC_CTRL1_CH0 0x0
1208-
#define DID_INTEL_HSW_EP_IMC_CTRL1_CH1 0x0
1209-
#define DID_INTEL_HSW_EP_IMC_CTRL1_CH2 0x0
1210-
#define DID_INTEL_HSW_EP_IMC_CTRL1_CH3 0x0 */
1207+
/* Controller #0: Device=20,21 - Function=0,1 */
1208+
#define DID_INTEL_HSW_EP_IMC_CTRL0_CH0 0x2fb4
1209+
#define DID_INTEL_HSW_EP_IMC_CTRL0_CH1 0x2fb5
1210+
#define DID_INTEL_HSW_EP_IMC_CTRL0_CH2 0x2fb0
1211+
#define DID_INTEL_HSW_EP_IMC_CTRL0_CH3 0x2fb1
1212+
/* Controller #1: Device=23,24 - Function=2,3 */
1213+
#define DID_INTEL_HSW_EP_IMC_CTRL1_CH0 0x2fd6
1214+
#define DID_INTEL_HSW_EP_IMC_CTRL1_CH1 0x2fd7
1215+
#define DID_INTEL_HSW_EP_IMC_CTRL1_CH2 0x2fd2
1216+
#define DID_INTEL_HSW_EP_IMC_CTRL1_CH3 0x2fd3
12111217
/* Integrated Memory Controller 0 : Channel # TAD Registers */
12121218
/* Xeon E5 - TAD Controller #0: Device=19 - Function=2,3,4,5 */
12131219
#define DID_INTEL_HSW_EP_TAD_CTRL0_CH0 0x2faa

corefreqd.c

+77
Original file line numberDiff line numberDiff line change
@@ -3952,6 +3952,78 @@ void HSW_CAP(RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), RO(CORE) *RO(Core))
39523952
}
39533953
}
39543954

3955+
#define HSW_EP_IMC SNB_EP_IMC
3956+
3957+
void HSW_EP_CAP(RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), RO(CORE) *RO(Core))
3958+
{
3959+
switch (RO(Proc)->Uncore.Bus.SNB_EP_Cap1.DMFC) {
3960+
case 0b111:
3961+
RO(Shm)->Uncore.CtrlSpeed = 1066;
3962+
break;
3963+
case 0b110:
3964+
RO(Shm)->Uncore.CtrlSpeed = 1333;
3965+
break;
3966+
case 0b101:
3967+
RO(Shm)->Uncore.CtrlSpeed = 1600;
3968+
break;
3969+
case 0b100:
3970+
RO(Shm)->Uncore.CtrlSpeed = 1866;
3971+
break;
3972+
case 0b011:
3973+
RO(Shm)->Uncore.CtrlSpeed = 2133;
3974+
break;
3975+
case 0b010:
3976+
RO(Shm)->Uncore.CtrlSpeed = 2400;
3977+
break;
3978+
case 0b001:
3979+
RO(Shm)->Uncore.CtrlSpeed = 2666;
3980+
break;
3981+
case 0b000:
3982+
RO(Shm)->Uncore.CtrlSpeed = 2933;
3983+
break;
3984+
}
3985+
3986+
RO(Shm)->Uncore.CtrlSpeed *= RO(Core)->Clock.Hz;
3987+
RO(Shm)->Uncore.CtrlSpeed /= RO(Shm)->Proc.Features.Factory.Clock.Hz;
3988+
3989+
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 ?
3995+
9600 : 6400;
3996+
3997+
RO(Shm)->Uncore.Bus.Speed = (RO(Core)->Clock.Hz
3998+
* RO(Shm)->Uncore.Bus.Rate)
3999+
/ RO(Shm)->Proc.Features.Factory.Clock.Hz;
4000+
4001+
RO(Shm)->Uncore.Unit.Bus_Rate = MC_MTS;
4002+
RO(Shm)->Uncore.Unit.BusSpeed = MC_MTS;
4003+
RO(Shm)->Uncore.Unit.DDR_Rate = MC_NIL;
4004+
RO(Shm)->Uncore.Unit.DDRSpeed = MC_MHZ;
4005+
4006+
if (RO(Proc)->Uncore.MC[0].HSW_EP.TECH.DDR4_Mode) {
4007+
RO(Shm)->Uncore.Unit.DDR_Ver = 4;
4008+
} else {
4009+
RO(Shm)->Uncore.Unit.DDR_Ver = 3;
4010+
}
4011+
if (RO(Proc)->Uncore.Bus.SNB_EP_Cap3.RDIMM_DIS)
4012+
{
4013+
if (RO(Proc)->Uncore.Bus.SNB_EP_Cap3.UDIMM_DIS) {
4014+
RO(Shm)->Uncore.Unit.DDR_Std = RAM_STD_UNSPEC;
4015+
} else {
4016+
RO(Shm)->Uncore.Unit.DDR_Std = RAM_STD_SDRAM;
4017+
}
4018+
} else {
4019+
RO(Shm)->Uncore.Unit.DDR_Std = RAM_STD_RDIMM;
4020+
}
4021+
/*TODO(VT-d capability from device 30 in CAPID# registers among offsets 0x80)*/
4022+
RO(Shm)->Proc.Technology.IOMMU = 0;
4023+
RO(Shm)->Proc.Technology.IOMMU_Ver_Major = 0;
4024+
RO(Shm)->Proc.Technology.IOMMU_Ver_Minor = 0;
4025+
}
4026+
39554027
unsigned int SKL_DimmWidthToRows(unsigned int width)
39564028
{
39574029
unsigned int rows = 0;
@@ -5822,6 +5894,11 @@ void PCI_Intel(RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), RO(CORE) *RO(Core),
58225894
HSW_IMC(RO(Shm), RO(Proc));
58235895
SET_CHIPSET(IC_LYNXPOINT);
58245896
break;
5897+
case DID_INTEL_HSW_EP_HOST_BRIDGE:
5898+
HSW_EP_CAP(RO(Shm), RO(Proc), RO(Core));
5899+
HSW_EP_IMC(RO(Shm), RO(Proc));
5900+
SET_CHIPSET(IC_WELLSBURG);
5901+
break;
58255902
case DID_INTEL_BROADWELL_IMC_HA0: /* Broadwell/Y/U Core m */
58265903
IVB_CAP(RO(Shm), RO(Proc), RO(Core));
58275904
HSW_IMC(RO(Shm), RO(Proc));

0 commit comments

Comments
 (0)