libreboot

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 9050f300ef1440c66a026ff41a60926c907cda7c
parent 79eb2dd5875b6f46ba41b3208c61c8d18603cacb
Author: Swift Geek <swiftgeek@gmail.com>
Date:   Mon,  5 Mar 2018 02:13:07 +0000

Merge branch 'update-patches' of and_who/libreboot into master

Diffstat:
projects/flashrom/patches/0001-Purge-redundant-Macronix-chips.patch | 91+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
projects/flashrom/patches/0002-Workaround-for-MX25-chips.patch | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
projects/flashrom/patches/0003-purged-chips.patch | 354-------------------------------------------------------------------------------
projects/flashrom/patches/0005-Workaround-MX25-reliable-operation.patch | 66------------------------------------------------------------------
projects/flashrom/patches/lenovobios/0001-Lenovobios-adaptation-for-Macronix-and-SST-chips.patch | 21++++++++++-----------
5 files changed, 182 insertions(+), 431 deletions(-)

diff --git a/projects/flashrom/patches/0001-Purge-redundant-Macronix-chips.patch b/projects/flashrom/patches/0001-Purge-redundant-Macronix-chips.patch @@ -0,0 +1,91 @@ +From 4a262ea16a10a6067d48d70a2195151dea9292c6 Mon Sep 17 00:00:00 2001 +From: Andrew Robbins <contact@andrewrobbins.info> +Date: Fri, 2 Mar 2018 00:13:16 -0500 +Subject: [PATCH] Purge redundant Macronix chips + +Removing the redundant Macronix chips avoids the situation where X60 +owners have to specify their particular chip on the command line with +flashrom's '--chip' flag. +--- + flashchips.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/flashchips.c b/flashchips.c +index 1ab4986..7f85415 100644 +--- a/flashchips.c ++++ b/flashchips.c +@@ -7595,7 +7595,7 @@ const struct flashchip flashchips[] = { + .name = "MX25L1605A/MX25L1606E/MX25L1608E", + .bustype = BUS_SPI, + .manufacture_id = MACRONIX_ID, +- .model_id = MACRONIX_MX25L1605, ++ .model_id = 0xDEAD, + .total_size = 2048, + .page_size = 256, + /* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L1606E and MX25L1608E only) */ +@@ -7634,7 +7634,7 @@ const struct flashchip flashchips[] = { + .name = "MX25L1605D/MX25L1608D/MX25L1673E", + .bustype = BUS_SPI, + .manufacture_id = MACRONIX_ID, +- .model_id = MACRONIX_MX25L1605, ++ .model_id = 0xDEAD, + .total_size = 2048, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, +@@ -7776,7 +7776,7 @@ const struct flashchip flashchips[] = { + .name = "MX25L3205D/MX25L3208D", + .bustype = BUS_SPI, + .manufacture_id = MACRONIX_ID, +- .model_id = MACRONIX_MX25L3205, ++ .model_id = 0xDEAD, + .total_size = 4096, + .page_size = 256, + /* OTP: 64B total; enter 0xB1, exit 0xC1 */ +@@ -7812,7 +7812,7 @@ const struct flashchip flashchips[] = { + .name = "MX25L3206E/MX25L3208E", + .bustype = BUS_SPI, + .manufacture_id = MACRONIX_ID, +- .model_id = MACRONIX_MX25L3205, ++ .model_id = 0xDEAD, + .total_size = 4096, + .page_size = 256, + /* OTP: 64B total; enter 0xB1, exit 0xC1 */ +@@ -7851,7 +7851,7 @@ const struct flashchip flashchips[] = { + .name = "MX25L3273E", + .bustype = BUS_SPI, + .manufacture_id = MACRONIX_ID, +- .model_id = MACRONIX_MX25L3205, ++ .model_id = 0xDEAD, + .total_size = 4096, + .page_size = 256, + /* OTP: 64B total; enter 0xB1, exit 0xC1 */ +@@ -7962,7 +7962,7 @@ const struct flashchip flashchips[] = { + .name = "MX25L6405D", + .bustype = BUS_SPI, + .manufacture_id = MACRONIX_ID, +- .model_id = MACRONIX_MX25L6405, ++ .model_id = 0xDEAD, + .total_size = 8192, + .page_size = 256, + /* OTP: 64B total; enter 0xB1, exit 0xC1 */ +@@ -7998,7 +7998,7 @@ const struct flashchip flashchips[] = { + .name = "MX25L6406E/MX25L6408E", + .bustype = BUS_SPI, + .manufacture_id = MACRONIX_ID, +- .model_id = MACRONIX_MX25L6405, ++ .model_id = 0xDEAD, + .total_size = 8192, + .page_size = 256, + /* MX25L6406E supports SFDP */ +@@ -8038,7 +8038,7 @@ const struct flashchip flashchips[] = { + .name = "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F", + .bustype = BUS_SPI, + .manufacture_id = MACRONIX_ID, +- .model_id = MACRONIX_MX25L6405, ++ .model_id = 0xDEAD, + .total_size = 8192, + .page_size = 256, + /* supports SFDP */ +-- +1.9.1 + diff --git a/projects/flashrom/patches/0002-Workaround-for-MX25-chips.patch b/projects/flashrom/patches/0002-Workaround-for-MX25-chips.patch @@ -0,0 +1,81 @@ +From 886f1db7edbfc9ef4c9727b4f564c1e7e35d6565 Mon Sep 17 00:00:00 2001 +From: consts <grudnevkv@gmail.com> +Date: Fri, 2 Mar 2018 07:03:37 +0000 +Subject: [PATCH] Workaround for MX25 chips + +https://notabug.org/libreboot/libreboot/issues/193 +--- + cli_classic.c | 5 +++++ + programmer.h | 1 + + spi.c | 9 +++++++++ + 3 files changed, 15 insertions(+) + +diff --git a/cli_classic.c b/cli_classic.c +index 31f7394..c60168c 100644 +--- a/cli_classic.c ++++ b/cli_classic.c +@@ -62,6 +62,7 @@ static void cli_classic_usage(const char *name) + " -o | --output <logfile> log output to <logfile>\n" + " --flash-contents <ref-file> assume flash contents to be <ref-file>\n" + " -L | --list-supported print supported devices\n" ++ " -m | --workaround-mx keep flash busy before sending command\n" + #if CONFIG_PRINT_WIKI == 1 + " -z | --list-supported-wiki print supported devices in wiki syntax\n" + #endif +@@ -136,6 +137,7 @@ int main(int argc, char *argv[]) + {"help", 0, NULL, 'h'}, + {"version", 0, NULL, 'R'}, + {"output", 1, NULL, 'o'}, ++ {"workaround-mx", 0, NULL, 'm'}, + {NULL, 0, NULL, 0}, + }; + +@@ -347,6 +349,9 @@ int main(int argc, char *argv[]) + } + #endif /* STANDALONE */ + break; ++ case 'm': /* --workaround-mx */ ++ workaround_mx = 1; ++ break; + default: + cli_classic_abort_usage(); + break; +diff --git a/programmer.h b/programmer.h +index 139f4fa..f54e690 100644 +--- a/programmer.h ++++ b/programmer.h +@@ -664,6 +664,7 @@ enum ich_chipset { + CHIPSET_100_SERIES_SUNRISE_POINT, /* also 6th/7th gen Core i/o (LP) variants */ + CHIPSET_C620_SERIES_LEWISBURG, + }; ++extern int workaround_mx; /* workaround for MX25* chips, makes flash operations more reliable, less failures */ + + /* ichspi.c */ + #if CONFIG_INTERNAL == 1 +diff --git a/spi.c b/spi.c +index 56f1fdf..4e61d88 100644 +--- a/spi.c ++++ b/spi.c +@@ -30,10 +30,19 @@ + #include "programmer.h" + #include "spi.h" + ++int workaround_mx; /* Make operations with MX25* chips more reliable */ ++ + int spi_send_command(struct flashctx *flash, unsigned int writecnt, + unsigned int readcnt, const unsigned char *writearr, + unsigned char *readarr) + { ++ if (workaround_mx) { ++ const unsigned char cmd[JEDEC_READ_OUTSIZE] = {JEDEC_READ, 0, 0, 0}; ++ unsigned char buf[256]; ++ /* keep flash busy for some time, keep CS warm before sending actual command */ ++ flash->mst->spi.command(flash, sizeof(cmd), sizeof(buf), cmd, buf); ++ } ++ /* actual command */ + return flash->mst->spi.command(flash, writecnt, readcnt, writearr, + readarr); + } +-- +1.9.1 + diff --git a/projects/flashrom/patches/0003-purged-chips.patch b/projects/flashrom/patches/0003-purged-chips.patch @@ -1,354 +0,0 @@ -From 260f0e096b385c9f53e9a28e79293131a11122a6 Mon Sep 17 00:00:00 2001 -From: Leah Rowe <info@minifree.org> -Date: Fri, 11 Mar 2016 06:50:50 +0000 -Subject: [PATCH 1/1] purged chips - ---- - flashchips.c | 303 ----------------------------------------------------------- - 1 file changed, 303 deletions(-) - -diff --git a/flashchips.c b/flashchips.c -index 0fc1b7a..5c94304 100644 ---- a/flashchips.c -+++ b/flashchips.c -@@ -7451,80 +7451,6 @@ const struct flashchip flashchips[] = { - - { - .vendor = "Macronix", -- .name = "MX25L1605", -- .bustype = BUS_SPI, -- .manufacture_id = MACRONIX_ID, -- .model_id = MACRONIX_MX25L1605, -- .total_size = 2048, -- .page_size = 256, -- .feature_bits = FEATURE_WRSR_WREN, -- .tested = TEST_OK_PREW, -- .probe = probe_spi_rdid, -- .probe_timing = TIMING_ZERO, -- .block_erasers = -- { -- { -- .eraseblocks = { {64 * 1024, 32} }, -- .block_erase = spi_block_erase_20, -- }, { -- .eraseblocks = { {64 * 1024, 32} }, -- .block_erase = spi_block_erase_d8, -- }, { -- .eraseblocks = { {2 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_60, -- }, { -- .eraseblocks = { {2 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_c7, -- }, -- }, -- .printlock = spi_prettyprint_status_register_bp2_srwd, /* bit6: error flag */ -- .unlock = spi_disable_blockprotect, -- .write = spi_chip_write_256, -- .read = spi_chip_read, /* Fast read (0x0B) supported */ -- .voltage = {2700, 3600}, -- }, -- -- { -- .vendor = "Macronix", -- .name = "MX25L1605A/MX25L1606E/MX25L1608E", -- .bustype = BUS_SPI, -- .manufacture_id = MACRONIX_ID, -- .model_id = MACRONIX_MX25L1605, -- .total_size = 2048, -- .page_size = 256, -- /* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L1606E and MX25L1608E only) */ -- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, -- .tested = TEST_OK_PREW, -- .probe = probe_spi_rdid, -- .probe_timing = TIMING_ZERO, -- .block_erasers = -- { -- { -- .eraseblocks = { {4 * 1024, 512} }, -- .block_erase = spi_block_erase_20, -- }, { -- .eraseblocks = { {64 * 1024, 32} }, -- .block_erase = spi_block_erase_52, -- }, { -- .eraseblocks = { {64 * 1024, 32} }, -- .block_erase = spi_block_erase_d8, -- }, { -- .eraseblocks = { {2 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_60, -- }, { -- .eraseblocks = { {2 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_c7, -- }, -- }, -- .printlock = spi_prettyprint_status_register_bp3_srwd, /* MX25L1605A bp2 only */ -- .unlock = spi_disable_blockprotect_bp3_srwd, -- .write = spi_chip_write_256, -- .read = spi_chip_read, /* Fast read (0x0B) supported (MX25L1608E supports dual-I/O read) */ -- .voltage = {2700, 3600}, -- }, -- -- { -- .vendor = "Macronix", - .name = "MX25L1605D/MX25L1608D/MX25L1673E", - .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, -@@ -7632,41 +7558,6 @@ const struct flashchip flashchips[] = { - - { - .vendor = "Macronix", -- .name = "MX25L3205(A)", -- .bustype = BUS_SPI, -- .manufacture_id = MACRONIX_ID, -- .model_id = MACRONIX_MX25L3205, -- .total_size = 4096, -- .page_size = 256, -- .feature_bits = FEATURE_WRSR_WREN, -- .tested = TEST_OK_PREW, -- .probe = probe_spi_rdid, -- .probe_timing = TIMING_ZERO, -- .block_erasers = -- { -- { -- .eraseblocks = { {64 * 1024, 64} }, -- .block_erase = spi_block_erase_20, -- }, { -- .eraseblocks = { {64 * 1024, 64} }, -- .block_erase = spi_block_erase_d8, -- }, { -- .eraseblocks = { {4 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_60, -- }, { -- .eraseblocks = { {4 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_c7, -- }, -- }, -- .printlock = spi_prettyprint_status_register_bp2_srwd, /* bit6: error flag */ -- .unlock = spi_disable_blockprotect, -- .write = spi_chip_write_256, -- .read = spi_chip_read, /* Fast read (0x0B) supported */ -- .voltage = {2700, 3600}, -- }, -- -- { -- .vendor = "Macronix", - .name = "MX25L3205D/MX25L3208D", - .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, -@@ -7703,84 +7594,6 @@ const struct flashchip flashchips[] = { - - { - .vendor = "Macronix", -- .name = "MX25L3206E/MX25L3208E", -- .bustype = BUS_SPI, -- .manufacture_id = MACRONIX_ID, -- .model_id = MACRONIX_MX25L3205, -- .total_size = 4096, -- .page_size = 256, -- /* OTP: 64B total; enter 0xB1, exit 0xC1 */ -- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, -- .tested = TEST_OK_PREW, -- .probe = probe_spi_rdid, -- .probe_timing = TIMING_ZERO, -- .block_erasers = -- { -- { -- .eraseblocks = { {4 * 1024, 1024} }, -- .block_erase = spi_block_erase_20, -- }, { -- .eraseblocks = { {64 * 1024, 64} }, -- .block_erase = spi_block_erase_d8, -- }, { -- .eraseblocks = { {64 * 1024, 64} }, -- .block_erase = spi_block_erase_52, -- }, { -- .eraseblocks = { {4 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_60, -- }, { -- .eraseblocks = { {4 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_c7, -- }, -- }, -- .printlock = spi_prettyprint_status_register_bp3_srwd, -- .unlock = spi_disable_blockprotect_bp3_srwd, -- .write = spi_chip_write_256, -- .read = spi_chip_read, /* Fast read (0x0B) and dual I/O supported */ -- .voltage = {2700, 3600}, -- }, -- -- { -- .vendor = "Macronix", -- .name = "MX25L3273E", -- .bustype = BUS_SPI, -- .manufacture_id = MACRONIX_ID, -- .model_id = MACRONIX_MX25L3205, -- .total_size = 4096, -- .page_size = 256, -- /* OTP: 64B total; enter 0xB1, exit 0xC1 */ -- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, -- .tested = TEST_OK_PREW, -- .probe = probe_spi_rdid, -- .probe_timing = TIMING_ZERO, -- .block_erasers = -- { -- { -- .eraseblocks = { {4 * 1024, 1024} }, -- .block_erase = spi_block_erase_20, -- }, { -- .eraseblocks = { {32 * 1024, 128} }, -- .block_erase = spi_block_erase_52, -- }, { -- .eraseblocks = { {64 * 1024, 64} }, -- .block_erase = spi_block_erase_d8, -- }, { -- .eraseblocks = { {4 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_60, -- }, { -- .eraseblocks = { {4 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_c7, -- }, -- }, -- .printlock = spi_prettyprint_status_register_bp3_srwd, -- .unlock = spi_disable_blockprotect_bp3_srwd, -- .write = spi_chip_write_256, -- .read = spi_chip_read, /* Fast read (0x0B) and dual I/O supported */ -- .voltage = {2700, 3600}, -- }, -- -- { -- .vendor = "Macronix", - .name = "MX25L3235D", - .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, -@@ -7817,42 +7630,6 @@ const struct flashchip flashchips[] = { - - { - .vendor = "Macronix", -- .name = "MX25L6405", -- .bustype = BUS_SPI, -- .manufacture_id = MACRONIX_ID, -- .model_id = MACRONIX_MX25L6405, -- .total_size = 8192, -- .page_size = 256, -- /* Has an additional 512B EEPROM sector */ -- .feature_bits = FEATURE_WRSR_WREN, -- .tested = TEST_OK_PREW, -- .probe = probe_spi_rdid, -- .probe_timing = TIMING_ZERO, -- .block_erasers = -- { -- { -- .eraseblocks = { {64 * 1024, 128} }, -- .block_erase = spi_block_erase_20, -- }, { -- .eraseblocks = { {64 * 1024, 128} }, -- .block_erase = spi_block_erase_d8, -- }, { -- .eraseblocks = { {8 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_60, -- }, { -- .eraseblocks = { {8 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_c7, -- } -- }, -- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: error flag */ -- .unlock = spi_disable_blockprotect_bp3_srwd, -- .write = spi_chip_write_256, -- .read = spi_chip_read, /* Fast read (0x0B) supported */ -- .voltage = {2700, 3600}, -- }, -- -- { -- .vendor = "Macronix", - .name = "MX25L6405D", - .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, -@@ -7889,86 +7666,6 @@ const struct flashchip flashchips[] = { - - { - .vendor = "Macronix", -- .name = "MX25L6406E/MX25L6408E", -- .bustype = BUS_SPI, -- .manufacture_id = MACRONIX_ID, -- .model_id = MACRONIX_MX25L6405, -- .total_size = 8192, -- .page_size = 256, -- /* MX25L6406E supports SFDP */ -- /* OTP: 06E 64B total; enter 0xB1, exit 0xC1 */ -- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, -- .tested = TEST_OK_PREW, -- .probe = probe_spi_rdid, -- .probe_timing = TIMING_ZERO, -- .block_erasers = -- { -- { -- .eraseblocks = { {4 * 1024, 2048} }, -- .block_erase = spi_block_erase_20, -- }, { -- .eraseblocks = { {64 * 1024, 128} }, -- .block_erase = spi_block_erase_52, -- }, { -- .eraseblocks = { {64 * 1024, 128} }, -- .block_erase = spi_block_erase_d8, -- }, { -- .eraseblocks = { {8 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_60, -- }, { -- .eraseblocks = { {8 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_c7, -- } -- }, -- .printlock = spi_prettyprint_status_register_bp3_srwd, -- .unlock = spi_disable_blockprotect_bp3_srwd, -- .write = spi_chip_write_256, -- .read = spi_chip_read, /* Fast read (0x0B), dual I/O read supported */ -- .voltage = {2700, 3600}, -- }, -- -- { -- .vendor = "Macronix", -- .name = "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E", -- .bustype = BUS_SPI, -- .manufacture_id = MACRONIX_ID, -- .model_id = MACRONIX_MX25L6405, -- .total_size = 8192, -- .page_size = 256, -- /* supports SFDP */ -- /* OTP: 512B total; enter 0xB1, exit 0xC1 */ -- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, -- .tested = TEST_OK_PREW, -- .probe = probe_spi_rdid, -- .probe_timing = TIMING_ZERO, -- .block_erasers = -- { -- { -- .eraseblocks = { {4 * 1024, 2048} }, -- .block_erase = spi_block_erase_20, -- }, { -- .eraseblocks = { {32 * 1024, 256} }, -- .block_erase = spi_block_erase_52, -- }, { -- .eraseblocks = { {64 * 1024, 128} }, -- .block_erase = spi_block_erase_d8, -- }, { -- .eraseblocks = { {8 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_60, -- }, { -- .eraseblocks = { {8 * 1024 * 1024, 1} }, -- .block_erase = spi_block_erase_c7, -- } -- }, -- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */ -- .unlock = spi_disable_blockprotect_bp3_srwd, -- .write = spi_chip_write_256, -- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ -- .voltage = {2700, 3600}, -- }, -- -- { -- .vendor = "Macronix", - .name = "MX25L12805D", - .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, --- -1.9.1 - diff --git a/projects/flashrom/patches/0005-Workaround-MX25-reliable-operation.patch b/projects/flashrom/patches/0005-Workaround-MX25-reliable-operation.patch @@ -1,66 +0,0 @@ -diff --git a/cli_classic.c b/cli_classic.c -index 0a09cfd..9eeafe1 100644 ---- a/cli_classic.c -+++ b/cli_classic.c -@@ -61,6 +61,7 @@ static void cli_classic_usage(const char *name) - " -i | --image <name> only flash image <name> from flash layout\n" - " -o | --output <logfile> log output to <logfile>\n" - " -L | --list-supported print supported devices\n" -+ " | --workaround-mx keep flash busy before sending command\n" - #if CONFIG_PRINT_WIKI == 1 - " -z | --list-supported-wiki print supported devices in wiki syntax\n" - #endif -@@ -130,6 +131,7 @@ int main(int argc, char *argv[]) - {"help", 0, NULL, 'h'}, - {"version", 0, NULL, 'R'}, - {"output", 1, NULL, 'o'}, -+ {"workaround-mx", 0, NULL, 0x0101}, - {NULL, 0, NULL, 0}, - }; - -@@ -337,6 +339,9 @@ int main(int argc, char *argv[]) - } - #endif /* STANDALONE */ - break; -+ case 0x0101: /* --workaround-mx */ -+ workaround_mx = 1; -+ break; - default: - cli_classic_abort_usage(); - break; -diff --git a/programmer.h b/programmer.h -index 1a6216a..6f97cfc 100644 ---- a/programmer.h -+++ b/programmer.h -@@ -650,6 +650,7 @@ enum ich_chipset { - CHIPSET_8_SERIES_WELLSBURG, - CHIPSET_9_SERIES_WILDCAT_POINT, - }; -+extern int workaround_mx; /* workaround for MX25* chips, makes flash operations more reliable, less failures */ - - /* ichspi.c */ - #if CONFIG_INTERNAL == 1 -diff --git a/spi.c b/spi.c -index 894f73f..05aa5d0 100644 ---- a/spi.c -+++ b/spi.c -@@ -30,10 +30,19 @@ - #include "programmer.h" - #include "spi.h" - -+int workaround_mx; /* Make operations with MX25* chips more reliable */ -+ - int spi_send_command(struct flashctx *flash, unsigned int writecnt, - unsigned int readcnt, const unsigned char *writearr, - unsigned char *readarr) - { -+ if (workaround_mx) { -+ const unsigned char cmd[JEDEC_READ_OUTSIZE] = {JEDEC_READ, 0, 0, 0}; -+ unsigned char buf[256]; -+ /* keep flash busy for some time, keep CS warm before sending actual command */ -+ flash->mst->spi.command(flash, sizeof(cmd), sizeof(buf), cmd, buf); -+ } -+ /* actual command */ - return flash->mst->spi.command(flash, writecnt, readcnt, writearr, - readarr); - } diff --git a/projects/flashrom/patches/lenovobios/0001-Lenovobios-adaptation-for-Macronix-and-SST-chips.patch b/projects/flashrom/patches/lenovobios/0001-Lenovobios-adaptation-for-Macronix-and-SST-chips.patch @@ -1,22 +1,21 @@ -From aa2dd05f61f6ca91212d7f6d4055486af6e01436 Mon Sep 17 00:00:00 2001 -From: Leah Rowe <info@minifree.org> -Date: Fri, 5 Aug 2016 22:40:49 +0200 +From 85eea125194414b6afc8053565bb333f06054421 Mon Sep 17 00:00:00 2001 +From: Leah Rowe <leah@libreboot.org> +Date: Fri, 2 Mar 2018 06:47:34 +0000 Subject: [PATCH] Lenovobios adaptation for Macronix and SST chips -Signed-off-by: Paul Kocialkowski <contact@paulk.fr> --- flashchips.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flashchips.c b/flashchips.c -index e5ea181..f3a017c 100644 +index 7f85415..16b166b 100644 --- a/flashchips.c +++ b/flashchips.c -@@ -7454,12 +7454,12 @@ const struct flashchip flashchips[] = { +@@ -7634,12 +7634,12 @@ const struct flashchip flashchips[] = { .name = "MX25L1605D/MX25L1608D/MX25L1673E", .bustype = BUS_SPI, .manufacture_id = MACRONIX_ID, -- .model_id = MACRONIX_MX25L1605, +- .model_id = 0xDEAD, + .model_id = 0x14, .total_size = 2048, .page_size = 256, @@ -27,7 +26,7 @@ index e5ea181..f3a017c 100644 .probe_timing = TIMING_ZERO, .block_erasers = { -@@ -9857,7 +9857,7 @@ const struct flashchip flashchips[] = { +@@ -10442,7 +10442,7 @@ const struct flashchip flashchips[] = { }, .printlock = spi_prettyprint_status_register_bp2_srwd, .unlock = spi_disable_blockprotect, @@ -36,7 +35,7 @@ index e5ea181..f3a017c 100644 .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ .voltage = {2700, 3600}, }, -@@ -12150,12 +12150,12 @@ const struct flashchip flashchips[] = { +@@ -12735,12 +12735,12 @@ const struct flashchip flashchips[] = { .name = "SST25VF016B", .bustype = BUS_SPI, .manufacture_id = SST_ID, @@ -51,7 +50,7 @@ index e5ea181..f3a017c 100644 .probe_timing = TIMING_ZERO, .block_erasers = { -@@ -12178,7 +12178,7 @@ const struct flashchip flashchips[] = { +@@ -12763,7 +12763,7 @@ const struct flashchip flashchips[] = { }, .printlock = spi_prettyprint_status_register_sst25vf016, .unlock = spi_disable_blockprotect, @@ -61,5 +60,5 @@ index e5ea181..f3a017c 100644 .voltage = {2700, 3600}, }, -- -2.9.0 +1.9.1