@@ -6963,6 +6963,72 @@ void AMD_17h_IOMMU(RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc))
69636963 RO (Proc )-> Uncore .Bus .IOMMU_HDR .CapRev & 0b01111 ;
69646964}
69656965
6966+ void AMD_1Ah_STX_CAP ( RO (SHM_STRUCT ) * RO (Shm ),
6967+ RO (PROC ) * RO (Proc ), RO (CORE ) * RO (Core ) )
6968+ {
6969+ unsigned short mc , clock_done = 0 ;
6970+ for (mc = 0 ; mc < RO (Shm )-> Uncore .CtrlCount && !clock_done ; mc ++ )
6971+ {
6972+ unsigned short cha ;
6973+ for (cha = 0 ;
6974+ cha < RO (Shm )-> Uncore .MC [mc ].ChannelCount && !clock_done ;
6975+ cha ++ )
6976+ {
6977+ const AMD_ZEN_UMC_CFG_MISC MISC = \
6978+ RO (Proc )-> Uncore .MC [mc ].Channel [cha ].AMD17h .MISC ;
6979+
6980+ unsigned short slot ;
6981+
6982+ if (MISC .DDR5 .MEMCLK )
6983+ {
6984+ const unsigned int correction = \
6985+ BITEXTRZ ((unsigned long long )MISC .value , 0 , 3 ) == 0 ? 0 : 2 ;
6986+
6987+ RO (Shm )-> Uncore .Bus .Rate = 4U * MISC .DDR5 .MEMCLK ;
6988+ RO (Shm )-> Uncore .Bus .Rate = RO (Shm )-> Uncore .Bus .Rate + correction ;
6989+
6990+ RO (Shm )-> Uncore .Bus .Speed = (unsigned long long )RO (Shm )-> Uncore .Bus .Rate ;
6991+ RO (Shm )-> Uncore .Bus .Speed = \
6992+ ( RO (Shm )-> Uncore .Bus .Speed * RO (Core )-> Clock .Hz )
6993+ / RO (Shm )-> Proc .Features .Factory .Clock .Hz ;
6994+
6995+ RO (Shm )-> Uncore .CtrlSpeed = 2LLU * RO (Shm )-> Uncore .Bus .Rate ;
6996+
6997+ clock_done = 1 ;
6998+ }
6999+ switch (RO (Proc )-> Uncore .MC [mc ].Channel [cha ].AMD17h .CONFIG .BurstLength ) {
7000+ case 0x0 : /* BL2 */
7001+ case 0x1 : /* BL4 */
7002+ case 0x2 : /* BL8 */
7003+ RO (Shm )-> Uncore .Unit .DDR_Ver = 4 ;
7004+ RO (Shm )-> Uncore .Unit .DDR_Std = RAM_STD_LPDDR ;
7005+ break ;
7006+ case 0x3 : /* BL16 */
7007+ RO (Shm )-> Uncore .Unit .DDR_Ver = 5 ;
7008+ RO (Shm )-> Uncore .Unit .DDR_Std = RAM_STD_LPDDR ;
7009+ break ;
7010+ }
7011+ for (slot = 0 ; slot < RO (Shm )-> Uncore .MC [mc ].SlotCount ; slot ++ )
7012+ {
7013+ if (RO (Proc )-> Uncore .MC [mc ].Channel [cha ].DIMM [slot ].AMD17h \
7014+ .CFG .value != 0xffffffff )
7015+ {
7016+ if (RO (Proc )-> Uncore .MC [mc ].Channel [cha ].DIMM [slot ].AMD17h .CFG .RDIMM
7017+ || RO (Proc )-> Uncore .MC [mc ].Channel [cha ].DIMM [slot ].AMD17h .CFG .LRDIMM )
7018+ {
7019+ RO (Shm )-> Uncore .Unit .DDR_Std = RAM_STD_RDIMM ;
7020+ break ;
7021+ }
7022+ }
7023+ }
7024+ }
7025+ }
7026+ RO (Shm )-> Uncore .Unit .Bus_Rate = MC_MHZ ;
7027+ RO (Shm )-> Uncore .Unit .BusSpeed = MC_MHZ ;
7028+ RO (Shm )-> Uncore .Unit .DDR_Rate = MC_NIL ;
7029+ RO (Shm )-> Uncore .Unit .DDRSpeed = MC_MTS ;
7030+ }
7031+
69667032#undef TIMING
69677033
69687034static char * Chipset [CHIPSETS ] = {
@@ -7710,10 +7776,14 @@ void PCI_AMD(RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), RO(CORE) *RO(Core),
77107776 case DID_AMD_19H_GENOA_DF_UMC :
77117777 case DID_AMD_19H_PHOENIX_DF_UMC :
77127778 case DID_AMD_1AH_TURIN_DF_UMC :
7779+ AMD_17h_UMC (RO (Shm ), RO (Proc ));
7780+ AMD_17h_CAP (RO (Shm ), RO (Proc ), RO (Core ));
7781+ SET_CHIPSET (IC_ZEN );
7782+ break ;
77137783 case DID_AMD_1AH_STX_DF_UMC :
77147784 case DID_AMD_1AH_STXH_DF_UMC :
77157785 AMD_17h_UMC (RO (Shm ), RO (Proc ));
7716- AMD_17h_CAP (RO (Shm ), RO (Proc ), RO (Core ));
7786+ AMD_1Ah_STX_CAP (RO (Shm ), RO (Proc ), RO (Core ));
77177787 SET_CHIPSET (IC_ZEN );
77187788 break ;
77197789 }
0 commit comments