diff --git a/pkgs/by-name/fl/flashrom/0001-sb600spi.c-Drop-Promontory-support.patch b/pkgs/by-name/fl/flashrom/0001-sb600spi.c-Drop-Promontory-support.patch new file mode 100644 index 000000000000..2fa422f8c1a1 --- /dev/null +++ b/pkgs/by-name/fl/flashrom/0001-sb600spi.c-Drop-Promontory-support.patch @@ -0,0 +1,103 @@ +From 38b2cb092e866dede6b6ffddd135ff54a9bda69e Mon Sep 17 00:00:00 2001 +From: Angel Pons +Date: Wed, 2 Nov 2022 22:45:52 +0100 +Subject: [PATCH] sb600spi.c: Drop "Promontory" support + +The "Promontory" code is riddled with issues, some of them can result in +soft bricks. Moreover, Promontory doesn't have a SPI controller. + +Drop support for "Promontory" in flashrom for now: it's holding back the +entire project and it's unlikely that it'll be fixed in a timely manner. + +Change-Id: I1457946dce68321b496d9ffa40a0c5ab46455f72 +Signed-off-by: Angel Pons +Reviewed-on: https://review.coreboot.org/c/flashrom/+/68824 +Tested-by: build bot (Jenkins) +Reviewed-by: Felix Singer +Reviewed-by: Swift Geek (Sebastian Grzywna) +Reviewed-by: Edward O'Callaghan +(cherry picked from commit 664c58f32af45b2acf7520c05bb40ef2c2f0891e) +--- + sb600spi.c | 31 ++----------------------------- + 1 file changed, 2 insertions(+), 29 deletions(-) + +diff --git a/sb600spi.c b/sb600spi.c +index cec7e0a5..e84bb8d6 100644 +--- a/sb600spi.c ++++ b/sb600spi.c +@@ -48,7 +48,6 @@ enum amd_chipset { + CHIPSET_HUDSON234, + CHIPSET_BOLTON, + CHIPSET_YANGTZE, +- CHIPSET_PROMONTORY, + }; + + #define FIFO_SIZE_OLD 8 +@@ -135,7 +134,8 @@ static enum amd_chipset determine_generation(struct pci_dev *dev) + */ + } else if (rev == 0x4b || rev == 0x51 || rev == 0x59 || rev == 0x61 || rev == 0x71) { + msg_pdbg("Promontory (rev 0x%02x) detected.\n", rev); +- return CHIPSET_PROMONTORY; ++ msg_perr("AMD \"Promontory\" chipsets are currently not supported (https://ticket.coreboot.org/issues/370)"); ++ return CHIPSET_AMD_UNKNOWN; + } else { + msg_pwarn("FCH device found but SMBus revision 0x%02x does not match known values.\n" + "Please report this to flashrom@flashrom.org and include this log and\n" +@@ -572,18 +572,6 @@ static int handle_imc(const struct programmer_cfg *cfg, struct pci_dev *dev, enu + return amd_imc_shutdown(dev); + } + +-static int promontory_read_memmapped(struct flashctx *flash, uint8_t *buf, +- unsigned int start, unsigned int len) +-{ +- struct sb600spi_data * data = (struct sb600spi_data *)flash->mst->spi.data; +- if (!data->flash) { +- map_flash(flash); +- data->flash = flash; /* keep a copy of flashctx for unmap() on tear-down. */ +- } +- mmio_readn((void *)(flash->virtual_memory + start), buf, len); +- return 0; +-} +- + static int sb600spi_shutdown(void *data) + { + struct sb600spi_data *sb600_data = data; +@@ -617,17 +605,6 @@ static const struct spi_master spi_master_yangtze = { + .shutdown = sb600spi_shutdown, + }; + +-static const struct spi_master spi_master_promontory = { +- .max_data_read = MAX_DATA_READ_UNLIMITED, +- .max_data_write = FIFO_SIZE_YANGTZE - 3, +- .command = spi100_spi_send_command, +- .map_flash_region = physmap, +- .unmap_flash_region = physunmap, +- .read = promontory_read_memmapped, +- .write_256 = default_spi_write_256, +- .shutdown = sb600spi_shutdown, +-}; +- + int sb600_probe_spi(const struct programmer_cfg *cfg, struct pci_dev *dev) + { + struct pci_dev *smbus_dev; +@@ -731,8 +708,6 @@ int sb600_probe_spi(const struct programmer_cfg *cfg, struct pci_dev *dev) + case CHIPSET_SB89XX: + case CHIPSET_HUDSON234: + case CHIPSET_YANGTZE: +- case CHIPSET_PROMONTORY: +- msg_pdbg(", SpiBusy=%"PRIi32"", (tmp >> 31) & 0x1); + default: break; + } + msg_pdbg("\n"); +@@ -808,8 +783,6 @@ int sb600_probe_spi(const struct programmer_cfg *cfg, struct pci_dev *dev) + register_spi_master(&spi_master_sb600, data); + else if (amd_gen == CHIPSET_YANGTZE) + register_spi_master(&spi_master_yangtze, data); +- else +- register_spi_master(&spi_master_promontory, data); + + return 0; + } +-- +2.45.2 + diff --git a/pkgs/by-name/fl/flashrom/package.nix b/pkgs/by-name/fl/flashrom/package.nix index 287786e7ca8f..f8cbd4f1354a 100644 --- a/pkgs/by-name/fl/flashrom/package.nix +++ b/pkgs/by-name/fl/flashrom/package.nix @@ -24,6 +24,15 @@ stdenv.mkDerivation rec { hash = "sha256-rX7htJI5xvtPj1XjZwb81zFDXbGkvS+rPYDx9yUIzO4="; }; + patches = [ + # Release notes for 1.4.0 state that Promontory chipsets are unsupported, and that attempting to read flash on those systems may crash the system. + # The patch that removes this (broken) support only made it into the 1.3.0 release, seemingly by mistake, and the relevant code has been essentially untouched since. + # We cherry-pick the upstream patch from 1.3.0, though amended to reference the relevant bug in the error message, rather than requesting the user email upstream. + # https://ticket.coreboot.org/issues/370 + # https://review.coreboot.org/c/flashrom/+/68824 + ./0001-sb600spi.c-Drop-Promontory-support.patch + ]; + nativeBuildInputs = [ meson ninja