Avoid false detection of SMSC FDC37N972 when Infineon TPM is present

Change-Id: Ibfb3af4c5d7675a5d4e27021cbb988c2ce00fd9f
Signed-off-by: Jonathan A. Kollasch <jakllsch@kollasch.net>
Reviewed-on: http://review.coreboot.org/420
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
diff --git a/util/superiotool/smsc.c b/util/superiotool/smsc.c
index 17925ae..012ffbd 100644
--- a/util/superiotool/smsc.c
+++ b/util/superiotool/smsc.c
@@ -844,6 +844,19 @@
 		return;
 	}
 
+	/* Infineon TPM causes false match of FDC37N972 */
+	if (idreg == DEVICE_ID_REG && revreg == DEVICE_REV_REG &&
+	    id == 0x0b && rev == 0x00) {
+		/* Infineon sets config port in 0x27:0x26, but SMSC does not */
+		if (((regval(port, 0x27)<<8)|regval(port, 0x26)) == port) {
+			if (verbose)
+				printf(NOTFOUND "id=0x%02x, rev=0x%02x\n",
+					id, rev);
+			exit_conf_mode_smsc(port);
+			return;
+		}
+	}
+
 	printf("Found %s %s (id=0x%02x, rev=0x%02x) at 0x%x\n",
 	       (id == 0x77 ? "ASUS" : "SMSC"), get_superio_name(reg_table, id),
 	       id, rev, port);