diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2016-09-14 15:42:56 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-09-16 21:59:08 -0700 |
commit | fd418235953ed853bbb2093d307679604e539902 (patch) | |
tree | aa2a50afcffb789c5e87c1ef5e163e17470b3da2 /common/flash.c | |
parent | 258bc48bacf948e7f95b98bfc847c3cc0d5f515d (diff) | |
download | chrome-ec-fd418235953ed853bbb2093d307679604e539902.tar.gz |
flash: Call lock function prior to mapped external read
Mapped read access to external flash may conflict with direct access
through SPI commands, so call a chip-level function to lock access prior
to doing such reads.
BUG=chrome-os-partner:55781
BRANCH=Gru
TEST=Verify 'ver' still works fine on kevin, and vboot hashing completes
successfully.
Change-Id: I009d6d5ee61c83260fb49ad4ee137fa3f4cd625a
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/385165
Tested-by: Mulin Chao <mlchao@nuvoton.com>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Reviewed-by: Mulin Chao <mlchao@nuvoton.com>
(cherry picked from commit a7f3e3fa376731709f4823a0c1d464b4d1deae14)
Reviewed-on: https://chromium-review.googlesource.com/386446
Commit-Ready: Shawn N <shawnn@chromium.org>
Tested-by: Shawn N <shawnn@chromium.org>
Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'common/flash.c')
-rw-r--r-- | common/flash.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/common/flash.c b/common/flash.c index cdd4219394..05489b7b57 100644 --- a/common/flash.c +++ b/common/flash.c @@ -370,9 +370,14 @@ int flash_is_erased(uint32_t offset, int size) (const char **)&ptr) < 0) return 0; + flash_lock_mapped_storage(1); for (size /= sizeof(uint32_t); size > 0; size--, ptr++) - if (*ptr != CONFIG_FLASH_ERASED_VALUE32) + if (*ptr != CONFIG_FLASH_ERASED_VALUE32) { + flash_lock_mapped_storage(0); return 0; + } + + flash_lock_mapped_storage(0); #else /* Read flash a chunk at a time */ uint32_t buf[8]; @@ -406,7 +411,9 @@ int flash_read(int offset, int size, char *data) if (flash_dataptr(offset, size, 1, &src) < 0) return EC_ERROR_INVAL; + flash_lock_mapped_storage(1); memcpy(data, src, size); + flash_lock_mapped_storage(0); return EC_SUCCESS; #else return flash_physical_read(offset, size, data); |