mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 15:12:36 +02:00
ichspi: Add support for Panther Lake
This patch adds Panther Lake support into flashrom as per Intel Panther Lake SPI programming doc, number: 815466. BUG=b:347669091 TEST=Flashrom is able to detect PTL SPI DID and show chipset name as below: > flashrom --flash-name .... Found chipset "Intel Panther Lake-U/H 12Xe". .... > flashrom -p internal --ifd -i fd -i bios -r /tmp/bios.rom .... Reading ich_descriptor... done. Assuming chipset 'Panther Lake'. Using regions: "bios", "fd". Reading flash... done. SUCCESS Change-Id: I99cd8eb7cbb11381f8e8455b06cf90b9db77d8f0 Signed-off-by: Subrata Banik <subratabanik@google.com> Reviewed-on: https://review.coreboot.org/c/flashrom/+/83144 Reviewed-by: Jamie Ryu <jamie.m.ryu@intel.com> Reviewed-by: Hsuan-ting Chen <roccochen@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Anastasia Klimchuk <aklm@chromium.org> Reviewed-by: Sam McNally <sammc@google.com>
This commit is contained in:
parent
30d1b5a107
commit
57cd50cd6a
@ -607,6 +607,7 @@ static enum chipbustype enable_flash_ich_report_gcs(
|
|||||||
case CHIPSET_500_SERIES_TIGER_POINT:
|
case CHIPSET_500_SERIES_TIGER_POINT:
|
||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
case CHIPSET_ELKHART_LAKE:
|
case CHIPSET_ELKHART_LAKE:
|
||||||
case CHIPSET_APOLLO_LAKE:
|
case CHIPSET_APOLLO_LAKE:
|
||||||
case CHIPSET_GEMINI_LAKE:
|
case CHIPSET_GEMINI_LAKE:
|
||||||
@ -715,6 +716,7 @@ static enum chipbustype enable_flash_ich_report_gcs(
|
|||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_C740_SERIES_EMMITSBURG:
|
case CHIPSET_C740_SERIES_EMMITSBURG:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
boot_straps = boot_straps_pch500;
|
boot_straps = boot_straps_pch500;
|
||||||
break;
|
break;
|
||||||
case CHIPSET_APOLLO_LAKE:
|
case CHIPSET_APOLLO_LAKE:
|
||||||
@ -750,6 +752,7 @@ static enum chipbustype enable_flash_ich_report_gcs(
|
|||||||
case CHIPSET_500_SERIES_TIGER_POINT:
|
case CHIPSET_500_SERIES_TIGER_POINT:
|
||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
case CHIPSET_APOLLO_LAKE:
|
case CHIPSET_APOLLO_LAKE:
|
||||||
case CHIPSET_GEMINI_LAKE:
|
case CHIPSET_GEMINI_LAKE:
|
||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
@ -1019,6 +1022,11 @@ static int enable_flash_mtl(const struct programmer_cfg *cfg, struct pci_dev *co
|
|||||||
return enable_flash_pch100_or_c620(cfg, dev, name, 0x1f, 5, CHIPSET_METEOR_LAKE);
|
return enable_flash_pch100_or_c620(cfg, dev, name, 0x1f, 5, CHIPSET_METEOR_LAKE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int enable_flash_ptl(const struct programmer_cfg *cfg, struct pci_dev *const dev, const char *const name)
|
||||||
|
{
|
||||||
|
return enable_flash_pch100_or_c620(cfg, dev, name, 0x1f, 5, CHIPSET_PANTHER_LAKE);
|
||||||
|
}
|
||||||
|
|
||||||
static int enable_flash_mcc(const struct programmer_cfg *cfg, struct pci_dev *const dev, const char *const name)
|
static int enable_flash_mcc(const struct programmer_cfg *cfg, struct pci_dev *const dev, const char *const name)
|
||||||
{
|
{
|
||||||
return enable_flash_pch100_or_c620(cfg, dev, name, 0x1f, 5, CHIPSET_ELKHART_LAKE);
|
return enable_flash_pch100_or_c620(cfg, dev, name, 0x1f, 5, CHIPSET_ELKHART_LAKE);
|
||||||
@ -2186,6 +2194,8 @@ const struct penable chipset_enables[] = {
|
|||||||
{0x8086, 0x7a8d, B_S, NT, "Intel", "WM690", enable_flash_pch600},
|
{0x8086, 0x7a8d, B_S, NT, "Intel", "WM690", enable_flash_pch600},
|
||||||
{0x8086, 0x7a8c, B_S, NT, "Intel", "HM670", enable_flash_pch600},
|
{0x8086, 0x7a8c, B_S, NT, "Intel", "HM670", enable_flash_pch600},
|
||||||
{0x8086, 0x7e23, B_S, DEP, "Intel", "Meteor Lake-P/M", enable_flash_mtl},
|
{0x8086, 0x7e23, B_S, DEP, "Intel", "Meteor Lake-P/M", enable_flash_mtl},
|
||||||
|
{0x8086, 0xe323, B_S, DEP, "Intel", "Panther Lake-U/H 12Xe", enable_flash_ptl},
|
||||||
|
{0x8086, 0xe423, B_S, DEP, "Intel", "Panther Lake-H 4Xe", enable_flash_ptl},
|
||||||
#endif
|
#endif
|
||||||
{0},
|
{0},
|
||||||
};
|
};
|
||||||
|
@ -50,6 +50,7 @@ ssize_t ich_number_of_regions(const enum ich_chipset cs, const struct ich_desc_c
|
|||||||
case CHIPSET_500_SERIES_TIGER_POINT:
|
case CHIPSET_500_SERIES_TIGER_POINT:
|
||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
case CHIPSET_ELKHART_LAKE:
|
case CHIPSET_ELKHART_LAKE:
|
||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
return 16;
|
return 16;
|
||||||
@ -80,6 +81,7 @@ ssize_t ich_number_of_masters(const enum ich_chipset cs, const struct ich_desc_c
|
|||||||
case CHIPSET_APOLLO_LAKE:
|
case CHIPSET_APOLLO_LAKE:
|
||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
case CHIPSET_GEMINI_LAKE:
|
case CHIPSET_GEMINI_LAKE:
|
||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
case CHIPSET_ELKHART_LAKE:
|
case CHIPSET_ELKHART_LAKE:
|
||||||
@ -122,7 +124,7 @@ void prettyprint_ich_chipset(enum ich_chipset cs)
|
|||||||
"C620 series Lewisburg", "C740 series Emmitsburg", "300 series Cannon Point",
|
"C620 series Lewisburg", "C740 series Emmitsburg", "300 series Cannon Point",
|
||||||
"400 series Comet Point", "500 series Tiger Point", "600 series Alder Point",
|
"400 series Comet Point", "500 series Tiger Point", "600 series Alder Point",
|
||||||
"Apollo Lake", "Gemini Lake", "Jasper Lake", "Elkhart Lake",
|
"Apollo Lake", "Gemini Lake", "Jasper Lake", "Elkhart Lake",
|
||||||
"Meteor Lake",
|
"Meteor Lake", "Panther Lake",
|
||||||
};
|
};
|
||||||
if (cs < CHIPSET_ICH8 || cs - CHIPSET_ICH8 + 1 >= ARRAY_SIZE(chipset_names))
|
if (cs < CHIPSET_ICH8 || cs - CHIPSET_ICH8 + 1 >= ARRAY_SIZE(chipset_names))
|
||||||
cs = 0;
|
cs = 0;
|
||||||
@ -220,6 +222,7 @@ static const char *pprint_density(enum ich_chipset cs, const struct ich_descript
|
|||||||
case CHIPSET_500_SERIES_TIGER_POINT:
|
case CHIPSET_500_SERIES_TIGER_POINT:
|
||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
case CHIPSET_APOLLO_LAKE:
|
case CHIPSET_APOLLO_LAKE:
|
||||||
case CHIPSET_GEMINI_LAKE:
|
case CHIPSET_GEMINI_LAKE:
|
||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
@ -319,6 +322,7 @@ static const char *pprint_freq(enum ich_chipset cs, uint8_t value)
|
|||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_C740_SERIES_EMMITSBURG:
|
case CHIPSET_C740_SERIES_EMMITSBURG:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
return freq_str[3][value];
|
return freq_str[3][value];
|
||||||
case CHIPSET_ELKHART_LAKE:
|
case CHIPSET_ELKHART_LAKE:
|
||||||
return freq_str[4][value];
|
return freq_str[4][value];
|
||||||
@ -368,6 +372,7 @@ void prettyprint_ich_descriptor_component(enum ich_chipset cs, const struct ich_
|
|||||||
case CHIPSET_500_SERIES_TIGER_POINT:
|
case CHIPSET_500_SERIES_TIGER_POINT:
|
||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
case CHIPSET_APOLLO_LAKE:
|
case CHIPSET_APOLLO_LAKE:
|
||||||
case CHIPSET_GEMINI_LAKE:
|
case CHIPSET_GEMINI_LAKE:
|
||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
@ -508,7 +513,9 @@ void prettyprint_ich_descriptor_master(const enum ich_chipset cs, const struct i
|
|||||||
cs == CHIPSET_500_SERIES_TIGER_POINT ||
|
cs == CHIPSET_500_SERIES_TIGER_POINT ||
|
||||||
cs == CHIPSET_600_SERIES_ALDER_POINT ||
|
cs == CHIPSET_600_SERIES_ALDER_POINT ||
|
||||||
cs == CHIPSET_C740_SERIES_EMMITSBURG ||
|
cs == CHIPSET_C740_SERIES_EMMITSBURG ||
|
||||||
cs == CHIPSET_JASPER_LAKE || cs == CHIPSET_METEOR_LAKE) {
|
cs == CHIPSET_JASPER_LAKE ||
|
||||||
|
cs == CHIPSET_METEOR_LAKE ||
|
||||||
|
cs == CHIPSET_PANTHER_LAKE) {
|
||||||
const char *const master_names[] = {
|
const char *const master_names[] = {
|
||||||
"BIOS", "ME", "GbE", "DevE", "EC",
|
"BIOS", "ME", "GbE", "DevE", "EC",
|
||||||
};
|
};
|
||||||
@ -1083,6 +1090,8 @@ static enum ich_chipset guess_ich_chipset_from_content(const struct ich_desc_con
|
|||||||
return CHIPSET_JASPER_LAKE;
|
return CHIPSET_JASPER_LAKE;
|
||||||
else if (content->CSSO == 0x70)
|
else if (content->CSSO == 0x70)
|
||||||
return CHIPSET_METEOR_LAKE;
|
return CHIPSET_METEOR_LAKE;
|
||||||
|
else if (content->CSSO == 0x60)
|
||||||
|
return CHIPSET_PANTHER_LAKE;
|
||||||
}
|
}
|
||||||
msg_pwarn("Unknown flash descriptor, assuming 500 series compatibility.\n");
|
msg_pwarn("Unknown flash descriptor, assuming 500 series compatibility.\n");
|
||||||
return CHIPSET_500_SERIES_TIGER_POINT;
|
return CHIPSET_500_SERIES_TIGER_POINT;
|
||||||
@ -1107,6 +1116,7 @@ static enum ich_chipset guess_ich_chipset(const struct ich_desc_content *const c
|
|||||||
case CHIPSET_500_SERIES_TIGER_POINT:
|
case CHIPSET_500_SERIES_TIGER_POINT:
|
||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
case CHIPSET_GEMINI_LAKE:
|
case CHIPSET_GEMINI_LAKE:
|
||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
case CHIPSET_ELKHART_LAKE:
|
case CHIPSET_ELKHART_LAKE:
|
||||||
@ -1268,6 +1278,7 @@ int getFCBA_component_density(enum ich_chipset cs, const struct ich_descriptors
|
|||||||
case CHIPSET_500_SERIES_TIGER_POINT:
|
case CHIPSET_500_SERIES_TIGER_POINT:
|
||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
case CHIPSET_APOLLO_LAKE:
|
case CHIPSET_APOLLO_LAKE:
|
||||||
case CHIPSET_GEMINI_LAKE:
|
case CHIPSET_GEMINI_LAKE:
|
||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
@ -1314,6 +1325,7 @@ static uint32_t read_descriptor_reg(enum ich_chipset cs, uint8_t section, uint16
|
|||||||
case CHIPSET_500_SERIES_TIGER_POINT:
|
case CHIPSET_500_SERIES_TIGER_POINT:
|
||||||
case CHIPSET_600_SERIES_ALDER_POINT:
|
case CHIPSET_600_SERIES_ALDER_POINT:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
case CHIPSET_APOLLO_LAKE:
|
case CHIPSET_APOLLO_LAKE:
|
||||||
case CHIPSET_GEMINI_LAKE:
|
case CHIPSET_GEMINI_LAKE:
|
||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
|
10
ichspi.c
10
ichspi.c
@ -2111,6 +2111,7 @@ static void init_chipset_properties(struct swseq_data *swseq, struct hwseq_data
|
|||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
case CHIPSET_ELKHART_LAKE:
|
case CHIPSET_ELKHART_LAKE:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
*num_pr = 6; /* Includes GPR0 */
|
*num_pr = 6; /* Includes GPR0 */
|
||||||
*reg_pr0 = PCH100_REG_FPR0;
|
*reg_pr0 = PCH100_REG_FPR0;
|
||||||
swseq->reg_ssfsc = PCH100_REG_SSFSC;
|
swseq->reg_ssfsc = PCH100_REG_SSFSC;
|
||||||
@ -2151,6 +2152,7 @@ static void init_chipset_properties(struct swseq_data *swseq, struct hwseq_data
|
|||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
case CHIPSET_ELKHART_LAKE:
|
case CHIPSET_ELKHART_LAKE:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
*num_freg = 16;
|
*num_freg = 16;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -2213,6 +2215,7 @@ static int init_ich_default(const struct programmer_cfg *cfg, void *spibar, enum
|
|||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
case CHIPSET_ELKHART_LAKE:
|
case CHIPSET_ELKHART_LAKE:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
tmp = mmio_readl(spibar + PCH100_REG_DLOCK);
|
tmp = mmio_readl(spibar + PCH100_REG_DLOCK);
|
||||||
msg_pdbg("0x0c: 0x%08"PRIx32" (DLOCK)\n", tmp);
|
msg_pdbg("0x0c: 0x%08"PRIx32" (DLOCK)\n", tmp);
|
||||||
prettyprint_pch100_reg_dlock(tmp);
|
prettyprint_pch100_reg_dlock(tmp);
|
||||||
@ -2294,6 +2297,7 @@ static int init_ich_default(const struct programmer_cfg *cfg, void *spibar, enum
|
|||||||
case CHIPSET_BAYTRAIL:
|
case CHIPSET_BAYTRAIL:
|
||||||
case CHIPSET_ELKHART_LAKE:
|
case CHIPSET_ELKHART_LAKE:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ichspi_bbar = mmio_readl(spibar + ICH9_REG_BBAR);
|
ichspi_bbar = mmio_readl(spibar + ICH9_REG_BBAR);
|
||||||
@ -2333,6 +2337,7 @@ static int init_ich_default(const struct programmer_cfg *cfg, void *spibar, enum
|
|||||||
case CHIPSET_JASPER_LAKE:
|
case CHIPSET_JASPER_LAKE:
|
||||||
case CHIPSET_ELKHART_LAKE:
|
case CHIPSET_ELKHART_LAKE:
|
||||||
case CHIPSET_METEOR_LAKE:
|
case CHIPSET_METEOR_LAKE:
|
||||||
|
case CHIPSET_PANTHER_LAKE:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
tmp = mmio_readl(spibar + ICH9_REG_FPB);
|
tmp = mmio_readl(spibar + ICH9_REG_FPB);
|
||||||
@ -2376,8 +2381,9 @@ static int init_ich_default(const struct programmer_cfg *cfg, void *spibar, enum
|
|||||||
ich_gen == CHIPSET_GEMINI_LAKE ||
|
ich_gen == CHIPSET_GEMINI_LAKE ||
|
||||||
ich_gen == CHIPSET_JASPER_LAKE ||
|
ich_gen == CHIPSET_JASPER_LAKE ||
|
||||||
ich_gen == CHIPSET_ELKHART_LAKE ||
|
ich_gen == CHIPSET_ELKHART_LAKE ||
|
||||||
ich_gen == CHIPSET_METEOR_LAKE)) {
|
ich_gen == CHIPSET_METEOR_LAKE ||
|
||||||
msg_pdbg("Enabling hardware sequencing by default for Apollo/Gemini/Jasper/Elkhart/Meteor Lake.\n");
|
ich_gen == CHIPSET_PANTHER_LAKE)) {
|
||||||
|
msg_pdbg("Enabling hardware sequencing by default for Apollo/Gemini/Jasper/Elkhart/Meteor/Panther Lake.\n");
|
||||||
ich_spi_mode = ich_hwseq;
|
ich_spi_mode = ich_hwseq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,6 +363,7 @@ enum ich_chipset {
|
|||||||
CHIPSET_ELKHART_LAKE,
|
CHIPSET_ELKHART_LAKE,
|
||||||
/* All chipsets after METEOR_LAKE should support checking BIOS_BM to get read/write access to of FREG0~15 */
|
/* All chipsets after METEOR_LAKE should support checking BIOS_BM to get read/write access to of FREG0~15 */
|
||||||
CHIPSET_METEOR_LAKE,
|
CHIPSET_METEOR_LAKE,
|
||||||
|
CHIPSET_PANTHER_LAKE,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ichspi.c */
|
/* ichspi.c */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user