@@ -3952,6 +3952,78 @@ void HSW_CAP(RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), RO(CORE) *RO(Core))
3952
3952
}
3953
3953
}
3954
3954
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
+
3955
4027
unsigned int SKL_DimmWidthToRows (unsigned int width )
3956
4028
{
3957
4029
unsigned int rows = 0 ;
@@ -5822,6 +5894,11 @@ void PCI_Intel(RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), RO(CORE) *RO(Core),
5822
5894
HSW_IMC (RO (Shm ), RO (Proc ));
5823
5895
SET_CHIPSET (IC_LYNXPOINT );
5824
5896
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 ;
5825
5902
case DID_INTEL_BROADWELL_IMC_HA0 : /* Broadwell/Y/U Core m */
5826
5903
IVB_CAP (RO (Shm ), RO (Proc ), RO (Core ));
5827
5904
HSW_IMC (RO (Shm ), RO (Proc ));
0 commit comments