diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/ifdtool/ifdtool.c | 42 | ||||
-rw-r--r-- | util/ifdtool/ifdtool.h | 8 |
2 files changed, 45 insertions, 5 deletions
diff --git a/util/ifdtool/ifdtool.c b/util/ifdtool/ifdtool.c index ada120b001..ddbc0fb91b 100644 --- a/util/ifdtool/ifdtool.c +++ b/util/ifdtool/ifdtool.c @@ -95,6 +95,7 @@ static const char *const ich_chipset_names[] = { "300 series Cannon Point", "400 series Ice Point", "500 series Tiger Point/ 600 series Alder Point", + "800 series Meteor Lake", "C620 series Lewisburg", "Denverton: C39xx", NULL @@ -241,8 +242,9 @@ static enum ich_chipset ifd2_platform_to_chipset(const int pindex) case PLATFORM_TGL: case PLATFORM_ADL: case PLATFORM_IFD2: - case PLATFORM_MTL: return CHIPSET_500_600_SERIES_TIGER_ALDER_POINT; + case PLATFORM_MTL: + return CHIPSET_800_SERIES_METEOR_LAKE; case PLATFORM_ICL: return CHIPSET_400_SERIES_ICE_POINT; case PLATFORM_LBG: @@ -531,10 +533,14 @@ static void _decode_spi_frequency_500_series(unsigned int freq) static void decode_spi_frequency(unsigned int freq) { - if (chipset == CHIPSET_500_600_SERIES_TIGER_ALDER_POINT) + switch (chipset) { + case CHIPSET_500_600_SERIES_TIGER_ALDER_POINT: + case CHIPSET_800_SERIES_METEOR_LAKE: _decode_spi_frequency_500_series(freq); - else + break; + default: _decode_spi_frequency(freq); + } } static void _decode_espi_frequency(unsigned int freq) @@ -586,10 +592,32 @@ static void _decode_espi_frequency_500_series(unsigned int freq) } } +static void _decode_espi_frequency_800_series(unsigned int freq) +{ + switch (freq) { + case ESPI_FREQUENCY_800SERIES_20MHZ: + printf("20MHz"); + break; + case ESPI_FREQUENCY_800SERIES_25MHZ: + printf("25MHz"); + break; + case ESPI_FREQUENCY_800SERIES_33MHZ: + printf("33MHz"); + break; + case ESPI_FREQUENCY_800SERIES_50MHZ: + printf("50MHz"); + break; + default: + printf("unknown<%x>MHz", freq); + } +} + static void decode_espi_frequency(unsigned int freq) { if (chipset == CHIPSET_500_600_SERIES_TIGER_ALDER_POINT) _decode_espi_frequency_500_series(freq); + else if (chipset == CHIPSET_800_SERIES_METEOR_LAKE) + _decode_espi_frequency_800_series(freq); else _decode_espi_frequency(freq); } @@ -641,7 +669,7 @@ static int is_platform_with_pch(void) static int is_platform_with_100x_series_pch(void) { if (chipset >= CHIPSET_100_200_SERIES_SUNRISE_POINT && - chipset <= CHIPSET_500_600_SERIES_TIGER_ALDER_POINT) + chipset <= CHIPSET_800_SERIES_METEOR_LAKE) return 1; return 0; @@ -668,6 +696,8 @@ static void dump_fcba(const struct fcba *fcba, const struct fpsba *fpsba) printf("\n Read eSPI/EC Bus Frequency: "); if (chipset == CHIPSET_500_600_SERIES_TIGER_ALDER_POINT) freq = (fpsba->pchstrp[22] & 0x38) >> 3; + else if (chipset == CHIPSET_800_SERIES_METEOR_LAKE) + freq = (fpsba->pchstrp[65] & 0x38) >> 3; else freq = (fcba->flcomp >> 17) & 7; decode_espi_frequency(freq); @@ -964,7 +994,8 @@ static void dump_fd(char *image, int size) printf(" FMSBA: 0x%x\n", ((fdb->flmap2) & 0xff) << 4); } - if (chipset == CHIPSET_500_600_SERIES_TIGER_ALDER_POINT) { + if (chipset == CHIPSET_500_600_SERIES_TIGER_ALDER_POINT || + chipset == CHIPSET_800_SERIES_METEOR_LAKE) { printf("FLMAP3: 0x%08x\n", fdb->flmap3); printf(" Minor Revision ID: 0x%04x\n", (fdb->flmap3 >> 14) & 0x7f); printf(" Major Revision ID: 0x%04x\n", (fdb->flmap3 >> 21) & 0x7ff); @@ -1810,6 +1841,7 @@ static void print_usage(const char *name) " icl - Ice Lake\n" " ifd2 - IFDv2 Platform\n" " jsl - Jasper Lake\n" + " mtl - Meteor Lake\n" " sklkbl - Sky Lake/Kaby Lake\n" " tgl - Tiger Lake\n" " wbg - Wellsburg\n" diff --git a/util/ifdtool/ifdtool.h b/util/ifdtool/ifdtool.h index 5717a0a87a..219634b21d 100644 --- a/util/ifdtool/ifdtool.h +++ b/util/ifdtool/ifdtool.h @@ -38,6 +38,7 @@ enum ich_chipset { CHIPSET_400_SERIES_ICE_POINT, /* 10th gen Core i/o (LP) variants */ CHIPSET_500_600_SERIES_TIGER_ALDER_POINT, /* 11th-12th gen Core i/o (LP) * variants onwards */ + CHIPSET_800_SERIES_METEOR_LAKE, /* 14th gen Core i/o (LP) variants onwards */ CHIPSET_C620_SERIES_LEWISBURG, CHIPSET_DENVERTON, }; @@ -94,6 +95,13 @@ enum espi_frequency_500_series { ESPI_FREQUENCY_500SERIES_60MHZ = 4, }; +enum espi_frequency_800_series { + ESPI_FREQUENCY_800SERIES_20MHZ = 0, + ESPI_FREQUENCY_800SERIES_25MHZ = 1, + ESPI_FREQUENCY_800SERIES_33MHZ = 2, + ESPI_FREQUENCY_800SERIES_50MHZ = 4, +}; + enum component_density { COMPONENT_DENSITY_512KB = 0, COMPONENT_DENSITY_1MB = 1, |