[PCI Utilities PATCH] Decode HyperTransport 1.02 as 1.03

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



AMD K8 processors claim that they're using HyperTransport 1.02, but the
publicly available documentation (specifically the BKDG) states that the
HT version is 1.03 in reality.

lspci will issue a warning "!!! Possibly incomplete decoding" and only
decode some basic HT properties for HT versions before 1.03.
Move that boundary down to HT version 1.02.

Example output before the patch:

00:18.0 0600: 1022:1100
	Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Capabilities: [80] HyperTransport: Host or Secondary Interface
		!!! Possibly incomplete decoding
		Command: WarmRst+ DblEnd-
		Link Control: CFlE- CST- CFE- <LkFail- Init+ EOC- TXO- <CRCErr=0
		Link Config: MLWI=16bit MLWO=16bit LWI=16bit LWO=16bit
		Revision ID: 1.02

Example output with the same processor after the patch:
00:18.0 0600: 1022:1100
	Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Capabilities: [80] HyperTransport: Host or Secondary Interface
		Command: WarmRst+ DblEnd- DevNum=0 ChainSide- HostHide+ Slave- <EOCErr- DUL-
		Link Control: CFlE- CST- CFE- <LkFail- Init+ EOC- TXO- <CRCErr=0 IsocEn- LSEn- ExtCTL- 64b-
		Link Config: MLWI=16bit DwFcIn- MLWO=16bit DwFcOut- LWI=16bit DwFcInEn- LWO=16bit DwFcOutEn-
		Revision ID: 1.02
		Link Frequency: 1.0GHz
		Link Error: <Prot- <Ovfl- <EOC- CTLTm-
		Link Frequency Capability: 200MHz+ 300MHz- 400MHz+ 500MHz- 600MHz+ 800MHz+ 1.0GHz+ 1.2GHz- 1.4GHz- 1.6GHz- Vend-
		Feature Capability: IsocFC- LDTSTOP+ CRCTM- ECTLT- 64bA- UIDRD- ExtRS- UCnfE-


Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@xxxxxxx>

-- 
http://www.hailfinger.org/

From 3ec82ad313d0172227916c95b50a2c2f847fa4b7 Mon Sep 17 00:00:00 2001
From: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@xxxxxxx>
Date: Tue, 4 Nov 2008 00:52:32 +0100
Subject: [PATCH] Decode HyperTransport 1.02 as 1.03
AMD K8 processors claim that they're using HyperTransport 1.02, but the
publicly available documentation (specifically the BKDG) states that
the HT version is 1.03 in reality.
lspci will issue a warning "!!! Possibly incomplete decoding" and
only decode some basic HT properties for HT versions before 1.03.
Move that boundary down to HT version 1.02.
---
 lspci.c |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/lspci.c b/lspci.c
index 5254b75..c17c4c1 100644
--- a/lspci.c
+++ b/lspci.c
@@ -571,10 +571,10 @@ cap_ht_pri(struct device *d, int where, int cmd)
   if (!config_fetch(d, where + PCI_HT_PRI_LCTR0, PCI_HT_PRI_SIZEOF - PCI_HT_PRI_LCTR0))
     return;
   rid = get_conf_byte(d, where + PCI_HT_PRI_RID);
-  if (rid < 0x23 && rid > 0x11)
+  if (rid < 0x22 && rid > 0x11)
     printf("\t\t!!! Possibly incomplete decoding\n");
 
-  if (rid >= 0x23)
+  if (rid >= 0x22)
     fmt = "\t\tCommand: BaseUnitID=%u UnitCnt=%u MastHost%c DefDir%c DUL%c\n";
   else
     fmt = "\t\tCommand: BaseUnitID=%u UnitCnt=%u MastHost%c DefDir%c\n";
@@ -585,7 +585,7 @@ cap_ht_pri(struct device *d, int where, int cmd)
 	 FLAG(cmd, PCI_HT_PRI_CMD_DD),
 	 FLAG(cmd, PCI_HT_PRI_CMD_DUL));
   lctr0 = get_conf_word(d, where + PCI_HT_PRI_LCTR0);
-  if (rid >= 0x23)
+  if (rid >= 0x22)
     fmt = "\t\tLink Control 0: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x IsocEn%c LSEn%c ExtCTL%c 64b%c\n";
   else
     fmt = "\t\tLink Control 0: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x\n";
@@ -603,7 +603,7 @@ cap_ht_pri(struct device *d, int where, int cmd)
 	 FLAG(lctr0, PCI_HT_LCTR_EXTCTL),
 	 FLAG(lctr0, PCI_HT_LCTR_64B));
   lcnf0 = get_conf_word(d, where + PCI_HT_PRI_LCNF0);
-  if (rid >= 0x23)
+  if (rid >= 0x22)
     fmt = "\t\tLink Config 0: MLWI=%1$s DwFcIn%5$c MLWO=%2$s DwFcOut%6$c LWI=%3$s DwFcInEn%7$c LWO=%4$s DwFcOutEn%8$c\n";
   else
     fmt = "\t\tLink Config 0: MLWI=%s MLWO=%s LWI=%s LWO=%s\n";
@@ -617,7 +617,7 @@ cap_ht_pri(struct device *d, int where, int cmd)
 	 FLAG(lcnf0, PCI_HT_LCNF_DFIE),
 	 FLAG(lcnf0, PCI_HT_LCNF_DFOE));
   lctr1 = get_conf_word(d, where + PCI_HT_PRI_LCTR1);
-  if (rid >= 0x23)
+  if (rid >= 0x22)
     fmt = "\t\tLink Control 1: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x IsocEn%c LSEn%c ExtCTL%c 64b%c\n";
   else
     fmt = "\t\tLink Control 1: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x\n";
@@ -635,7 +635,7 @@ cap_ht_pri(struct device *d, int where, int cmd)
 	 FLAG(lctr1, PCI_HT_LCTR_EXTCTL),
 	 FLAG(lctr1, PCI_HT_LCTR_64B));
   lcnf1 = get_conf_word(d, where + PCI_HT_PRI_LCNF1);
-  if (rid >= 0x23)
+  if (rid >= 0x22)
     fmt = "\t\tLink Config 1: MLWI=%1$s DwFcIn%5$c MLWO=%2$s DwFcOut%6$c LWI=%3$s DwFcInEn%7$c LWO=%4$s DwFcOutEn%8$c\n";
   else
     fmt = "\t\tLink Config 1: MLWI=%s MLWO=%s LWI=%s LWO=%s\n";
@@ -650,7 +650,7 @@ cap_ht_pri(struct device *d, int where, int cmd)
 	 FLAG(lcnf1, PCI_HT_LCNF_DFOE));
   printf("\t\tRevision ID: %u.%02u\n",
 	 (rid & PCI_HT_RID_MAJ) >> 5, (rid & PCI_HT_RID_MIN));
-  if (rid < 0x23)
+  if (rid < 0x22)
     return;
   lfrer0 = get_conf_byte(d, where + PCI_HT_PRI_LFRER0);
   printf("\t\tLink Frequency 0: %s\n", ht_link_freq(lfrer0 & PCI_HT_LFRER_FREQ));
@@ -739,10 +739,10 @@ cap_ht_sec(struct device *d, int where, int cmd)
   if (!config_fetch(d, where + PCI_HT_SEC_LCTR, PCI_HT_SEC_SIZEOF - PCI_HT_SEC_LCTR))
     return;
   rid = get_conf_byte(d, where + PCI_HT_SEC_RID);
-  if (rid < 0x23 && rid > 0x11)
+  if (rid < 0x22 && rid > 0x11)
     printf("\t\t!!! Possibly incomplete decoding\n");
 
-  if (rid >= 0x23)
+  if (rid >= 0x22)
     fmt = "\t\tCommand: WarmRst%c DblEnd%c DevNum=%u ChainSide%c HostHide%c Slave%c <EOCErr%c DUL%c\n";
   else
     fmt = "\t\tCommand: WarmRst%c DblEnd%c\n";
@@ -756,7 +756,7 @@ cap_ht_sec(struct device *d, int where, int cmd)
 	 FLAG(cmd, PCI_HT_SEC_CMD_HIECE),
 	 FLAG(cmd, PCI_HT_SEC_CMD_DUL));
   lctr = get_conf_word(d, where + PCI_HT_SEC_LCTR);
-  if (rid >= 0x23)
+  if (rid >= 0x22)
     fmt = "\t\tLink Control: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x IsocEn%c LSEn%c ExtCTL%c 64b%c\n";
   else
     fmt = "\t\tLink Control: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x\n";
@@ -774,7 +774,7 @@ cap_ht_sec(struct device *d, int where, int cmd)
 	 FLAG(lctr, PCI_HT_LCTR_EXTCTL),
 	 FLAG(lctr, PCI_HT_LCTR_64B));
   lcnf = get_conf_word(d, where + PCI_HT_SEC_LCNF);
-  if (rid >= 0x23)
+  if (rid >= 0x22)
     fmt = "\t\tLink Config: MLWI=%1$s DwFcIn%5$c MLWO=%2$s DwFcOut%6$c LWI=%3$s DwFcInEn%7$c LWO=%4$s DwFcOutEn%8$c\n";
   else
     fmt = "\t\tLink Config: MLWI=%s MLWO=%s LWI=%s LWO=%s\n";
@@ -789,7 +789,7 @@ cap_ht_sec(struct device *d, int where, int cmd)
 	 FLAG(lcnf, PCI_HT_LCNF_DFOE));
   printf("\t\tRevision ID: %u.%02u\n",
 	 (rid & PCI_HT_RID_MAJ) >> 5, (rid & PCI_HT_RID_MIN));
-  if (rid < 0x23)
+  if (rid < 0x22)
     return;
   lfrer = get_conf_byte(d, where + PCI_HT_SEC_LFRER);
   printf("\t\tLink Frequency: %s\n", ht_link_freq(lfrer & PCI_HT_LFRER_FREQ));
-- 
1.5.2.4


[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux