From 498430e280a63cb2b8e57e821066e289fd4d5564 Mon Sep 17 00:00:00 2001 From: edef Date: Mon, 29 Jul 2024 16:37:31 +0000 Subject: [PATCH] flashrom: remove (broken) Promontory support 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'd rather not crash the systems of unsuspecting NixOS/nixpkgs users, so this change forward-ports the patch from 1.3.0, though amended to reference the relevant bug in the error message, rather than requesting the user email upstream. Link: https://ticket.coreboot.org/issues/370 Link: https://review.coreboot.org/c/flashrom/+/68824 --- ...1-sb600spi.c-Drop-Promontory-support.patch | 103 ++++++++++++++++++ pkgs/by-name/fl/flashrom/package.nix | 9 ++ 2 files changed, 112 insertions(+) create mode 100644 pkgs/by-name/fl/flashrom/0001-sb600spi.c-Drop-Promontory-support.patch 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