Commit Graph

133 Commits (93db82f59146277ff8a9615a54fd5280fae54bb4)

Author SHA1 Message Date
Martin Kojtal ea56ffbafc
Merge pull request #12799 from kyle-cypress/pr/tdb-calc-size
TDBStore: Handle odd number of sectors in block
2020-04-15 09:43:06 +02:00
Kyle Kearney b46da65937 TDBStore: Handle odd number of sectors in block
Rework TDBStore::calc_area_params so that it can handle situations where
the block device size is not an even multiple of the sector size (while
retaining its ability to handle non-uniform erase sizes).
This avoids intermittent asserts on boards where TDBStore is implemented
in internal flash, in which case the size of the block device varies
with the application size and a minor change (or a shift in optimization
level) can shift TDBStore from an odd to an even number of sectors.
2020-04-13 12:01:25 -07:00
MarceloSalazar a15f6a43ad General clean-up of unsupported targets 2020-04-09 15:36:21 +01:00
Kyle Kearney ab8ac8871c Remove stray include of TDBStore.h 2020-03-24 12:27:21 -07:00
Kyle Kearney ae7c6203cc kv_config: Remove hard fail on too few pages
STORE_SECTORS is a hard requirement. If there are fewer than 2 pages
then the kvstore will not work, because the garbage collection process
relies on having at least two sectors to work with.
STORE_PAGES is a heuristic. It is a reasonable default to use if the
application does not specify the amount of flash to use for TDBStore.
But if an application knows that a smaller number of pages will suffice
for its specific needs, then that is valid and should be permitted.
2020-03-24 12:27:21 -07:00
Kyle Kearney 7f18a6ce49 Move flash bounds helpers from TDBStore to kv_config 2020-03-24 12:27:21 -07:00
Kyle Kearney 622a50ff6a KV_CONFIG: Change errors to use tr_error not tr_warning 2020-03-24 12:27:21 -07:00
Kyle Kearney e1b857078a Remove unnecessary reference-typed arguments
No callers make use of the modified argument values, so change
them to a more straightforward pass by value.
2020-03-24 12:27:21 -07:00
Kyle Kearney 3ef04db1a3 TDBStore: Increase min pages to 14
Increase minimum page count from 10 to 14 based on further experiments
with features-storage-tests-kvstore-static_tests.
2020-03-24 12:27:21 -07:00
Kyle Kearney 0002830c03 TDBStore: remove get_flash_bounds input constraint
Handle the case where the entirety of flash (size = 0) is required
for a flash memory starting at address 0, instead of erroring out.
2020-03-24 12:27:20 -07:00
Kyle Kearney 9d414316da TDBStore: Fix potential alignment issue in default addresses
When 10 pages is larger than 2 sectors, align the selected size
down to be an even multiple of the sector size, to ensure that
the allocated space divides cleanly in half for garbage collection.
2020-03-24 12:27:20 -07:00
Kyle Kearney 7cd4d11a8a Expand error checks in _calculate_blocksize_match_tdbstore
The minimum size required by tdbstore is either 2 sectors or 10 pages,
whichever is larger. Correspondingly, adjust the error checks in
_calculate_blocksize_match_tdbstore to match this requirement.
2020-03-24 12:27:20 -07:00
Kyle Kearney cda0af66eb Move TDB bounds computation for better reuse
Migrate into TDBStore so that DirectAccessDeviceKey can use it as well.
2020-03-24 12:27:20 -07:00
Kyle Kearney afa88b76d4 Refactor internal flash TDB bounds determination
Default the size to the larger of two sectors or 10 pages, so that the
  computation works better on devices with a low sector to page size ratio.
Reduce code duplication.
2020-03-24 12:27:20 -07:00
Marcin Tomczyk 6a21dfa080 [Storage] Use internal flash for KVStore always if default configuration. TDB_INTERNAL is always for first choose. 2020-03-18 06:05:52 -07:00
Jarno Lamsa b34dd0ce89 Remove _variant_bd_erase_unit_size
In some cases, it is possible that every erase unit in area 0
has the same size, but they are still different than in area 1.
Remove the flag for varying erase sizes and instead check from
flash, what is the erase size of the current unit.
2020-03-03 13:05:27 +02:00
Martin Kojtal fc5f3259de
Merge pull request #12458 from GaborAbonyi/add_musca_b1_platform
Add Musca B1 target
2020-02-27 13:53:58 +00:00
Tamas Kaman 551c3c553c Add ARM_MUSCA_B1 as a new target platform
Musca-B1 is a Cortex-M33 based target with security extension enabled.

- ARM_MUSCA_B1 is the non-secure target running mbed-os.
- ARM_MUSCA_B1_S is the secure target running TF-M.
- TF-M sources were imported and patched in previous commits.
- TF-M secure bootloader (McuBoot) for MUSCA_B1 is submitted by a
  pre-built binary.
- A post-build hook concatenates The secure and non-secure binaries,
  signs it and then concatenates the bootloader with the signed binary.

Change-Id: I4b36290941b5f0bb7aa7c12dda2f38b5c1e39ae2
Signed-off-by: Tamas Kaman <tamas.kaman@arm.com>
Signed-off-by: Gabor Abonyi <gabor.abonyi@arm.com>
2020-02-21 14:34:39 +01:00
Marcin Tomczyk b5d0b7b6f1 IOTSTOR-1009 - TDBStore magic number if endian sensitive - remove incorrect comment 2020-02-21 00:57:50 -08:00
Pawel Zarembski 620442305f hani_iot: add spif storage config 2020-02-03 14:03:09 +01:00
ccli8 41d95ef2fb [M2351] Support TFM level 1 2020-01-06 15:55:00 +08:00
Przemyslaw Stekiel 25f354fe1f storage: fix static pin-map for ARMC5 2019-12-16 15:38:07 +01:00
Przemyslaw Stekiel ee5953ad74 Add static pinmap support: SDBlockDevice, kvstore, system storage
This is done in order to enable static pin-map for Mbed Cloud Client Example. This should give extra ROM savings, ~1KB.
2019-12-10 12:26:23 +01:00
Martin Kojtal 412a9317de
Merge pull request #12017 from VeijoPesonen/remove_nvstore
NVStore: already deprecated implementation removed
2019-12-05 09:10:30 +01:00
Seppo Takalo 21acb66c1c TDBStore: remove unused variables 2019-12-04 16:21:55 +02:00
Seppo Takalo 7902100238 SecureStore: Get rid of casting by using opaque pointers. 2019-12-04 16:21:55 +02:00
Seppo Takalo 23b2b8c4f3 SecureStore: Deinitialize also member TDBStorages on deinit() 2019-12-04 14:55:45 +02:00
Seppo Takalo 650b93b66c SecureStore: Validate internal RBP data first
Previous logic was allowing external storage to be tampered by setting
write-protected keys, so values could not be updated, but it was still
used by get().
2019-12-04 14:55:45 +02:00
Seppo Takalo bde9753696 SecureStore: Don't use flags of corrupted data. Allow removing. 2019-12-04 14:55:45 +02:00
Seppo Takalo 56d67360ef SecureStore: Validate internal header size before using its values. 2019-12-04 14:55:45 +02:00
Veijo Pesonen 060a1c6df7 NVStore: deprecated implementation removed 2019-12-03 15:36:31 +02:00
Seppo Takalo ce7b196b26 TDBStore: Don't copy more data than what we can hold 2019-12-03 15:20:10 +02:00
Seppo Takalo fe3c3550f9 TDBStore: Move Assert to init(), so Block parameter are initialised correctly 2019-12-03 15:20:10 +02:00
Seppo Takalo adf409f7f7 Do not require Flash device for TDBStore
TDBStore used to rely on Flash devices erase value.
This logic has been removed, and TDBStore can do the entire erase
logic itself, in case the given BlockDevice does not offer erase().
This relies on BlockDevice to properly return -1 in BlockDevice::get_erase_value().
2019-12-03 15:20:10 +02:00
Seppo Takalo 3dc6c4879f TDBStore: erase one program unit more, when cleaning an area 2019-12-03 15:20:10 +02:00
Seppo Takalo 93d7422f75 TDBStore: Do no garbage_collect() on init()
Previous logic caused garbage collection to kick in, if the init() was
called on empty storage. This has effect of erasing areas twice, if both
areas were empty.

Re-write logic so that we erase areas only on garbage_collect() or reset().
The init() logic already chooses the active area, so no need to touch,
until keys are modified.

Removed also the is_erase_unit_erased() as this is working only on
FLASH devices, and TDBStore should be refactored to work on all storages.
2019-12-03 15:20:10 +02:00
Seppo Takalo 36523282fa TDBStore: Keep copy of reserved data on both areas.
Change the "reserved data" logic so that every time we erase and area,
the content of reserved data is then immediately copied to newly erased
area. This keeps two copies of the data.
When data is requested, return only if checksum is matching.
When data is written, only allow if BOTH checksums are incorrect, meaning
that areas are either corrupted or erased.
Only exception is TDBStore::reset() which erases all keys and reserved data.

Removed all logic that tried to detect, if reserved are was erased or
corrupted. Rely entirely on checksum.

Add moduletest for reserved data.
2019-12-03 15:20:10 +02:00
Kevin Bracey c67816b5ff Adjust code for MbedCRC changes
* Make mbed_error use bitwise MbedCRC call rather than local
  implementation.
* Remove use of POLY_32BIT_REV_ANSI from LittleFS.
* Move some MbedCRC instances closer to use - construction cost is
  trivial, and visibility aids compiler optimisation.
2019-12-02 14:45:37 +02:00
Seppo Takalo 7f7b191077 IOTSTOR-951: Unlock the master mutex even after garbage_collect() 2019-11-28 14:33:07 +02:00
Seppo Takalo b82e106a43 Astyle fixes 2019-11-28 10:59:48 +02:00
Seppo Takalo 8f77de6453 TDBStore safety check: Erase if there is valid keys on the free space.
In case our are contains data from previous reset() or reset_area(),
we might  end up in the situation  where  free space contains valid
key headers,  but we have not erased that area  yet. This can cause
failures if the deinit() and init()  because  new scan of that area
would continue  as long as keys  are found. This causes keys on the
not-yet-erased  area to be included in the new instance of TDBStore.

To prevent this failure,  check  after each key-write that our free
space does not contain valid  key headers.  Also make sure  that we
erase one program unit sector over the master record.  If we erased
just the master record,first key might is still there, causing next
init() to find it.  Extend erase area by  one program unit, so that
build_ram_table() won't find any keys.
2019-11-28 10:37:07 +02:00
Martin Kojtal 5f7ecea00b
Revert "MbedCRC and CRC HAL revisions" 2019-11-26 13:45:37 +00:00
Veijo Pesonen 8a0af607f3 LPC55S69_NS: Sets default TDBStore size to 32kB
Previously it was 2 pages - 1kB - which isn't sufficient to store
Reserved Area and Master Record. Reserved are requires one page and Master
Record takes two pages. With 512B page size and having two areas, active and
inactive, the minimum size requirement becomes 2 areas * 3 pages = 3kB. That
isn't enough to store any keys though.
2019-11-21 11:28:59 +02:00
Veijo Pesonen 458f5f43f3 TDBStore: Adds sanity check for storage size when compiled with debug profile 2019-11-21 11:28:59 +02:00
Kevin Bracey 8811972201 Adjust code for MbedCRC changes
* Make mbed_error use bitwise MbedCRC call rather than local
  implementation.
* Remove use of POLY_32BIT_REV_ANSI from LittleFS.
* Move some MbedCRC instances closer to use - construction cost is
  trivial, and visibility aids compiler optimisation.
2019-11-13 14:31:49 +02:00
Martin Kojtal f079dce02a
Merge pull request #11810 from kyle-cypress/pr/securestore-struct-init
SecureStore: Add member initializers for inc_handle_t
2019-11-07 09:20:43 +01:00
Kyle Kearney db4dafc15a SecureStore: Add member initializers for inc_handle_t
_inc_set_handle is new'd in SecureStore::init(), then its members are
referenced in various functions without being explicitly initialized
first. These pre-existing values can confuse the SecureStore's internal
state and cause various undesired behavior.
2019-11-04 14:49:57 -08:00
Seppo Takalo 168b51c415 Add storage related files to baseline unittest.
* Refactor some headers to use relative path from Mbed OS root.
* Refactor some data types to compile on 64bit machines.
* Refactor some debug traces to use mbed_trace.
2019-11-04 16:12:36 +02:00
Seppo Takalo 7f089ac074 Add empty unittest to generate zero baseline for untested files. 2019-11-04 16:12:36 +02:00
jeromecoutant d7d0d0b8cb STM32H7 FLASH and DEVICE_KEY
- Enable FLASHIAP for all H7 boards
- Use "TDB_INTERNAL" for all H7 boards
- Define specific internal_base_address only for DISCO_H747I_CM7
  (default address is the end of FLASH which is correct for other H7 boards)
- Correct GetSectorBase function with Dual Bank information
2019-10-31 13:04:49 +01:00