diff options
author | Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> | 2014-08-30 23:39:51 +0000 |
---|---|---|
committer | Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> | 2014-08-30 23:39:51 +0000 |
commit | 4e32ec19b124a7431d1e3fd9f7e75196b7495a7e (patch) | |
tree | 5ca7051747f8161639957c37d984cbe8f878271a /cli_classic.c | |
parent | 583ea32911f67641daef9d05b3e65176b6923f94 (diff) | |
download | ast2050-flashrom-4e32ec19b124a7431d1e3fd9f7e75196b7495a7e.zip ast2050-flashrom-4e32ec19b124a7431d1e3fd9f7e75196b7495a7e.tar.gz |
Refine physical address mapping of flash chips
- Create distinct functions for mapping and unmapping for flash chips.
- Map only when needed: map before probing and unmap immediately
after it. Map again when a single chip was probed successfully before
taking any actual actions and clean up afterwards.
- Map special function chip registers centrally together with flash space
instead of within (some) probing methods after successful probes.
- Save the used base addresses of the mappings in struct flashctx as well.
- Do not try to (un)map the zero-sized chip definitions that are merely hacks.
This also fixes the printing of wrong warnings for these chip definitions
introduced in r1765.
Corresponding to flashrom svn r1847.
Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Diffstat (limited to 'cli_classic.c')
-rw-r--r-- | cli_classic.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/cli_classic.c b/cli_classic.c index 945ad7b..8588881 100644 --- a/cli_classic.c +++ b/cli_classic.c @@ -481,8 +481,14 @@ int main(int argc, char *argv[]) ret = 1; goto out_shutdown; } + if (map_flash(&flashes[0]) != 0) { + free(flashes[0].chip); + ret = 1; + goto out_shutdown; + } msg_cinfo("Please note that forced reads most likely contain garbage.\n"); ret = read_flash_to_file(&flashes[0], filename); + unmap_flash(&flashes[0]); free(flashes[0].chip); goto out_shutdown; } @@ -525,6 +531,12 @@ int main(int argc, char *argv[]) if (write_it && !dont_verify_it) verify_it = 1; + /* Map the selected flash chip again. */ + if (map_flash(fill_flash) != 0) { + ret = 1; + goto out_shutdown; + } + /* FIXME: We should issue an unconditional chip reset here. This can be * done once we have a .reset function in struct flashchip. * Give the chip time to settle. @@ -532,6 +544,7 @@ int main(int argc, char *argv[]) programmer_delay(100000); ret |= doit(fill_flash, force, filename, read_it, write_it, erase_it, verify_it); + unmap_flash(fill_flash); out_shutdown: programmer_shutdown(); out: |