util/ifdtool: Fix eSPI frequency as per Gen 11 SPI flash guide

BUG=b:153888802
TEST=Able to list correct eSPI frequency as per TGL SPI flash guide

Without this CL :
Found Component Section
FLCOMP     0x093030f6
  Dual Output Fast Read Support:       not supported
  Read ID/Read Status Clock Frequency: 50MHz
  Write/Erase Clock Frequency:         50MHz
  Fast Read Clock Frequency:           50MHz
  Fast Read Support:                   supported
  Read Clock Frequency:                20MHz

With this CL :
Found Component Section
FLCOMP     0x093030f6
  Dual Output Fast Read Support:       not supported
  Read ID/Read Status Clock Frequency: 50MHz
  Write/Erase Clock Frequency:         50MHz
  Fast Read Clock Frequency:           50MHz
  Fast Read Support:                   supported
  Read eSPI/EC Bus Frequency:          60MHz

Signed-off-by: Subrata Banik <subrata.banik@intel.com>
Change-Id: I20840e6f931d7c1fabea0b6892e3bd19ead81168
Reviewed-on: https://review.coreboot.org/c/coreboot/+/44820
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
diff --git a/util/ifdtool/ifdtool.c b/util/ifdtool/ifdtool.c
index 9f507bb..e2fd0ab 100644
--- a/util/ifdtool/ifdtool.c
+++ b/util/ifdtool/ifdtool.c
@@ -509,6 +509,63 @@
 		_decode_spi_frequency(freq);
 }
 
+static void _decode_espi_frequency(unsigned int freq)
+{
+	switch (freq) {
+	case ESPI_FREQUENCY_20MHZ:
+		printf("20MHz");
+		break;
+	case ESPI_FREQUENCY_24MHZ:
+		printf("24MHz");
+		break;
+	case ESPI_FREQUENCY_30MHZ:
+		printf("30MHz");
+		break;
+	case ESPI_FREQUENCY_48MHZ:
+		printf("48MHz");
+		break;
+	case ESPI_FREQUENCY_60MHZ:
+		printf("60MHz");
+		break;
+	case ESPI_FREQUENCY_17MHZ:
+		printf("17MHz");
+		break;
+	default:
+		printf("unknown<%x>MHz", freq);
+	}
+}
+
+static void _decode_espi_frequency_500_series(unsigned int freq)
+{
+	switch (freq) {
+	case ESPI_FREQUENCY_500SERIES_20MHZ:
+		printf("20MHz");
+		break;
+	case ESPI_FREQUENCY_500SERIES_24MHZ:
+		printf("24MHz");
+		break;
+	case ESPI_FREQUENCY_500SERIES_25MHZ:
+		printf("25MHz");
+		break;
+	case ESPI_FREQUENCY_500SERIES_48MHZ:
+		printf("48MHz");
+		break;
+	case ESPI_FREQUENCY_500SERIES_60MHZ:
+		printf("60MHz");
+		break;
+	default:
+		printf("unknown<%x>MHz", freq);
+	}
+}
+
+static void decode_espi_frequency(unsigned int freq)
+{
+	if (chipset == CHIPSET_500_SERIES_TIGER_POINT)
+		_decode_espi_frequency_500_series(freq);
+	else
+		_decode_espi_frequency(freq);
+}
+
 static void decode_component_density(unsigned int density)
 {
 	switch (density) {
@@ -562,8 +619,10 @@
 	return 0;
 }
 
-static void dump_fcba(const fcba_t *fcba)
+static void dump_fcba(const fcba_t *fcba, const fpsba_t *fpsba)
 {
+	unsigned int freq;
+
 	printf("\nFound Component Section\n");
 	printf("FLCOMP     0x%08x\n", fcba->flcomp);
 	printf("  Dual Output Fast Read Support:       %ssupported\n",
@@ -576,8 +635,18 @@
 	decode_spi_frequency((fcba->flcomp >> 21) & 7);
 	printf("\n  Fast Read Support:                   %ssupported",
 		(fcba->flcomp & (1 << 20))?"":"not ");
-	printf("\n  Read Clock Frequency:                ");
-	decode_spi_frequency((fcba->flcomp >> 17) & 7);
+	if (is_platform_with_100x_series_pch() &&
+			chipset != CHIPSET_100_200_SERIES_SUNRISE_POINT) {
+		printf("\n  Read eSPI/EC Bus Frequency:          ");
+		if (chipset == CHIPSET_500_SERIES_TIGER_POINT)
+			freq = (fpsba->pchstrp[22] & 0x38) >> 3;
+		else
+			freq = (fcba->flcomp >> 17) & 7;
+		decode_espi_frequency(freq);
+	} else {
+		printf("\n  Read Clock Frequency:                ");
+		decode_spi_frequency((fcba->flcomp >> 17) & 7);
+	}
 
 	switch (ifd_version) {
 	case IFD_VERSION_1:
@@ -868,7 +937,7 @@
 
 	if (frba && fcba && fpsba && fmba && fmsba) {
 		dump_frba(frba);
-		dump_fcba(fcba);
+		dump_fcba(fcba, fpsba);
 		dump_fpsba(fdb, fpsba);
 		dump_fmba(fmba);
 		dump_fmsba(fmsba);