diff options
author | Leah Rowe <info@minifree.org> | 2017-06-17 21:45:20 +0000 |
---|---|---|
committer | Gogs <gogitservice@gmail.com> | 2017-06-17 21:45:20 +0000 |
commit | 5787cc7698de91a80806275e863d8392f96744e2 (patch) | |
tree | 5a9179c5aed3b938a76bae9a7ae81c06108b60b8 /projects | |
parent | 5428c303f8e25940a7a92296447c39888ba1c489 (diff) | |
parent | 2caaac00972d9ea56b0fcd7c95897e90283b05b8 (diff) | |
download | librebootfr-5787cc7698de91a80806275e863d8392f96744e2.tar.gz librebootfr-5787cc7698de91a80806275e863d8392f96744e2.zip |
Merge branch 'master' of consts/libreboot into master
Diffstat (limited to 'projects')
-rw-r--r-- | projects/flashrom/patches/0005-Workaround-MX25-reliable-operation.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/projects/flashrom/patches/0005-Workaround-MX25-reliable-operation.patch b/projects/flashrom/patches/0005-Workaround-MX25-reliable-operation.patch new file mode 100644 index 00000000..472afd30 --- /dev/null +++ b/projects/flashrom/patches/0005-Workaround-MX25-reliable-operation.patch @@ -0,0 +1,66 @@ +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); + } |