[EFR32] Rework NVM3 instances and refactor our KVS implementation to use nvm3 (#16877)
* Merge chip_nvm3 section into silabs default nvm3 section. Rework the efr32Config nvm3 driver, tweaks to linkerfile for the nvm3 section
* Refactore efr32 kvs implementation to use silabs nvm3 driver
* Fix some return codes for KVS
* Update ldscript for mg24. Add verifications in kvs implementation. Regroup nvm3 and kvs init. Set ble default connection params
* Delay keymap commit to nvm, Build argument for kvs entry count, Clean up
* Add build option in efr32_sdk.gni and detail in build script
* add info in read me
* Fix typo, add NVM to wordlist
* undo unwanted change to zap and pigweed submodule.
* remove mv command
diff --git a/src/platform/EFR32/EFR32Config.cpp b/src/platform/EFR32/EFR32Config.cpp
index da1734e..f78797c 100644
--- a/src/platform/EFR32/EFR32Config.cpp
+++ b/src/platform/EFR32/EFR32Config.cpp
@@ -31,55 +31,38 @@
#include "FreeRTOS.h"
#include "nvm3.h"
+#include "nvm3_default.h"
#include "nvm3_hal_flash.h"
+// Substitute the GSDK weak nvm3_lockBegin and nvm3_lockEnd
+// for an application controlled re-entrance protection
+#define EFR32_SEM_TIMEOUT_ms 5
+static SemaphoreHandle_t nvm3_Sem;
+static StaticSemaphore_t nvm3_SemStruct;
+
+void nvm3_lockBegin(void)
+{
+ VerifyOrDie(nvm3_Sem != NULL);
+ xSemaphoreTake(nvm3_Sem, EFR32_SEM_TIMEOUT_ms);
+}
+
+void nvm3_lockEnd(void)
+{
+ VerifyOrDie(nvm3_Sem != NULL);
+ xSemaphoreGive(nvm3_Sem);
+}
+
namespace chip {
namespace DeviceLayer {
namespace Internal {
-// Two macros are provided to support the creation of the Silicon Labs NVM3 area and
-// initialization data- NVM3_DEFINE_SECTION_STATIC_DATA() and NVM3_DEFINE_SECTION_INIT_DATA().
-// A linker section called 'name'_section is defined by NVM3_DEFINE_SECTION_STATIC_DATA().
-// The NVM3 area is placed at the top of the device FLASH section by the linker
-// script file: chip-efr32-bringup-MG12P.ld. An error is returned
-// by nvm3_open() on alignment or size violation.
-
-// Local version of SDK macro (avoids uninitialized var compile error).
-#define CHIP_NVM3_DEFINE_SECTION_STATIC_DATA(name, nvmSize, cacheSize) \
- static nvm3_CacheEntry_t name##_cache[cacheSize]; \
- static uint8_t name##_nvm[nvmSize] SL_ATTRIBUTE_SECTION(STRINGIZE(name##_section))
-
-// Local version of SDK macro (allows CHIP to configure the maximum nvm3 object size and headroom).
-#define CHIP_NVM3_DEFINE_SECTION_INIT_DATA(name, maxObjectSize, repackHeadroom) \
- static nvm3_Init_t name = { \
- (nvm3_HalPtr_t) name##_nvm, \
- sizeof(name##_nvm), \
- name##_cache, \
- sizeof(name##_cache) / sizeof(nvm3_CacheEntry_t), \
- maxObjectSize, \
- repackHeadroom, \
- &nvm3_halFlashHandle, \
- }
-
-#define CHIP_NVM3_REPACK_HEADROOM 64 // Threshold for User non-forced nvm3 flash repacking.
-
-#define EFR32_SEM_TIMEOUT_ms 5
-
-static nvm3_Handle_t handle;
-static SemaphoreHandle_t nvm3_Sem;
-static StaticSemaphore_t nvm3_SemStruct;
-
-// Declare NVM3 data area and cache.
-
-CHIP_NVM3_DEFINE_SECTION_STATIC_DATA(chipNvm3, CHIP_DEVICE_CONFIG_NVM3_NUM_FLASH_PAGES_FOR_STORAGE * FLASH_PAGE_SIZE,
- CHIP_DEVICE_CONFIG_NVM3_MAX_NUM_OBJECTS);
-
-CHIP_NVM3_DEFINE_SECTION_INIT_DATA(chipNvm3, CHIP_DEVICE_CONFIG_NVM3_MAX_OBJECT_SIZE, CHIP_NVM3_REPACK_HEADROOM);
+// Matter NVM3 space is placed in the silabs default nvm3 section shared with other stack.
+// 'kMatterNvm3KeyDomain' identify the matter nvm3 domain.
+// The NVM3 default section is placed at end of Flash minus 1 page byt the linker file
+// See examples/platform/efr32/ldscripts/efr32mgXX.ld
CHIP_ERROR EFR32Config::Init()
{
- CHIP_ERROR err;
-
nvm3_Sem = xSemaphoreCreateBinaryStatic(&nvm3_SemStruct);
if (nvm3_Sem == NULL)
@@ -87,12 +70,13 @@
return CHIP_ERROR_NO_MEMORY;
}
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
+ return MapNvm3Error(nvm3_open(nvm3_defaultHandle, nvm3_defaultInit));
+}
-exit:
- OnExit();
- return err;
+void EFR32Config::DeInit()
+{
+ vSemaphoreDelete(nvm3_Sem);
+ nvm3_close(nvm3_defaultHandle);
}
CHIP_ERROR EFR32Config::ReadConfigValue(Key key, bool & val)
@@ -102,28 +86,18 @@
size_t dataLen;
bool tmpVal;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
// Get nvm3 object info.
- err = MapNvm3Error(nvm3_getObjectInfo(&handle, key, &objectType, &dataLen));
+ err = MapNvm3Error(nvm3_getObjectInfo(nvm3_defaultHandle, key, &objectType, &dataLen));
SuccessOrExit(err);
// Read nvm3 bytes into tmp.
- err = MapNvm3Error(nvm3_readData(&handle, key, &tmpVal, dataLen));
+ err = MapNvm3Error(nvm3_readData(nvm3_defaultHandle, key, &tmpVal, dataLen));
SuccessOrExit(err);
val = tmpVal;
exit:
- OnExit();
return err;
}
@@ -134,27 +108,18 @@
size_t dataLen;
uint32_t tmpVal;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
// Get nvm3 object info.
- err = MapNvm3Error(nvm3_getObjectInfo(&handle, key, &objectType, &dataLen));
+ err = MapNvm3Error(nvm3_getObjectInfo(nvm3_defaultHandle, key, &objectType, &dataLen));
SuccessOrExit(err);
// Read nvm3 bytes into tmp.
- err = MapNvm3Error(nvm3_readData(&handle, key, &tmpVal, dataLen));
+ err = MapNvm3Error(nvm3_readData(nvm3_defaultHandle, key, &tmpVal, dataLen));
SuccessOrExit(err);
val = tmpVal;
exit:
- OnExit();
return err;
}
@@ -165,28 +130,18 @@
size_t dataLen;
uint64_t tmpVal;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
// Get nvm3 object info.
- err = MapNvm3Error(nvm3_getObjectInfo(&handle, key, &objectType, &dataLen));
+ err = MapNvm3Error(nvm3_getObjectInfo(nvm3_defaultHandle, key, &objectType, &dataLen));
SuccessOrExit(err);
// Read nvm3 bytes into tmp.
- err = MapNvm3Error(nvm3_readData(&handle, key, &tmpVal, dataLen));
+ err = MapNvm3Error(nvm3_readData(nvm3_defaultHandle, key, &tmpVal, dataLen));
SuccessOrExit(err);
val = tmpVal;
exit:
- OnExit();
return err;
}
@@ -198,19 +153,10 @@
outLen = 0;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
// Get nvm3 object info.
- err = MapNvm3Error(nvm3_getObjectInfo(&handle, key, &objectType, &dataLen));
+ err = MapNvm3Error(nvm3_getObjectInfo(nvm3_defaultHandle, key, &objectType, &dataLen));
SuccessOrExit(err);
VerifyOrExit(dataLen > 0, err = CHIP_ERROR_INVALID_STRING_LENGTH);
@@ -221,7 +167,7 @@
// terminator char).
VerifyOrExit((bufSize > dataLen), err = CHIP_ERROR_BUFFER_TOO_SMALL);
- err = MapNvm3Error(nvm3_readData(&handle, key, buf, dataLen));
+ err = MapNvm3Error(nvm3_readData(nvm3_defaultHandle, key, buf, dataLen));
SuccessOrExit(err);
outLen = ((dataLen == 1) && (buf[0] == 0)) ? 0 : dataLen;
@@ -237,7 +183,7 @@
{
// Read the first byte of the nvm3 string into a tmp var.
char firstByte;
- err = MapNvm3Error(nvm3_readData(&handle, key, &firstByte, 1));
+ err = MapNvm3Error(nvm3_readData(nvm3_defaultHandle, key, &firstByte, 1));
SuccessOrExit(err);
outLen = (firstByte == 0) ? 0 : dataLen;
@@ -245,7 +191,6 @@
}
exit:
- OnExit();
return err;
}
@@ -256,19 +201,10 @@
size_t dataLen;
outLen = 0;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
// Get nvm3 object info.
- err = MapNvm3Error(nvm3_getObjectInfo(&handle, key, &objectType, &dataLen));
+ err = MapNvm3Error(nvm3_getObjectInfo(nvm3_defaultHandle, key, &objectType, &dataLen));
SuccessOrExit(err);
VerifyOrExit(dataLen > 0, err = CHIP_ERROR_INVALID_STRING_LENGTH);
@@ -278,14 +214,51 @@
// enough to take the data.
VerifyOrExit((bufSize >= dataLen), err = CHIP_ERROR_BUFFER_TOO_SMALL);
- err = MapNvm3Error(nvm3_readData(&handle, key, buf, dataLen));
+ err = MapNvm3Error(nvm3_readData(nvm3_defaultHandle, key, buf, dataLen));
SuccessOrExit(err);
+
+ outLen = dataLen;
}
- outLen = dataLen;
-
exit:
- OnExit();
+ return err;
+}
+
+CHIP_ERROR EFR32Config::ReadConfigValueBin(Key key, uint8_t * buf, size_t bufSize, size_t & outLen, size_t offset)
+{
+ CHIP_ERROR err;
+ uint32_t objectType;
+ size_t dataLen;
+
+ outLen = 0;
+ VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
+
+ // Get nvm3 object info.
+ err = MapNvm3Error(nvm3_getObjectInfo(nvm3_defaultHandle, key, &objectType, &dataLen));
+ SuccessOrExit(err);
+ VerifyOrExit(dataLen > 0, err = CHIP_ERROR_INVALID_STRING_LENGTH);
+
+ if (buf != NULL)
+ {
+ // Read nvm3 bytes directly into output buffer- check buffer is long enough to take the data
+ // else read what we can but return CHIP_ERROR_BUFFER_TOO_SMALL.
+ size_t maxReadLength = dataLen - offset;
+ if (bufSize >= maxReadLength)
+ {
+ err = MapNvm3Error(nvm3_readPartialData(nvm3_defaultHandle, key, buf, offset, maxReadLength));
+ SuccessOrExit(err);
+ outLen = maxReadLength;
+ }
+ else
+ {
+ err = MapNvm3Error(nvm3_readPartialData(nvm3_defaultHandle, key, buf, offset, bufSize));
+ SuccessOrExit(err);
+ // read was successful, but we did not read all the data from the object.
+ err = CHIP_ERROR_BUFFER_TOO_SMALL;
+ outLen = bufSize;
+ }
+ }
+exit:
return err;
}
@@ -293,26 +266,16 @@
{
CHIP_ERROR err;
uint32_t tmpVal;
- Key key = kMinConfigKey_ChipCounter + counterIdx;
-
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
+ Key key = kMinConfigKey_MatterCounter + counterIdx;
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
// Read bytes into tmp.
- err = MapNvm3Error(nvm3_readCounter(&handle, key, &tmpVal));
+ err = MapNvm3Error(nvm3_readCounter(nvm3_defaultHandle, key, &tmpVal));
SuccessOrExit(err);
val = tmpVal;
exit:
- OnExit();
return err;
}
@@ -320,22 +283,12 @@
{
CHIP_ERROR err;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
VerifyOrExit(ValidConfigKey(key), err = CHIP_ERROR_INVALID_ARGUMENT); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
- err = MapNvm3Error(nvm3_writeData(&handle, key, &val, sizeof(val)));
+ err = MapNvm3Error(nvm3_writeData(nvm3_defaultHandle, key, &val, sizeof(val)));
SuccessOrExit(err);
exit:
- OnExit();
return err;
}
@@ -343,22 +296,12 @@
{
CHIP_ERROR err;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
- err = MapNvm3Error(nvm3_writeData(&handle, key, &val, sizeof(val)));
+ err = MapNvm3Error(nvm3_writeData(nvm3_defaultHandle, key, &val, sizeof(val)));
SuccessOrExit(err);
exit:
- OnExit();
return err;
}
@@ -366,22 +309,12 @@
{
CHIP_ERROR err;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
- err = MapNvm3Error(nvm3_writeData(&handle, key, &val, sizeof(val)));
+ err = MapNvm3Error(nvm3_writeData(nvm3_defaultHandle, key, &val, sizeof(val)));
SuccessOrExit(err);
exit:
- OnExit();
return err;
}
@@ -394,31 +327,21 @@
{
CHIP_ERROR err;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
if (str != NULL)
{
// Write the string to nvm3 without the terminator char (apart from
// empty strings where only the terminator char is stored in nvm3).
- err = MapNvm3Error(nvm3_writeData(&handle, key, str, (strLen > 0) ? strLen : 1));
+ err = MapNvm3Error(nvm3_writeData(nvm3_defaultHandle, key, str, (strLen > 0) ? strLen : 1));
SuccessOrExit(err);
}
else
{
- nvm3_deleteObject(&handle, key); // no error checking here.
+ nvm3_deleteObject(nvm3_defaultHandle, key); // no error checking here.
}
exit:
- OnExit();
return err;
}
@@ -426,57 +349,37 @@
{
CHIP_ERROR err;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
if (data != NULL)
{
if (dataLen > 0)
{
// Write the binary data to nvm3.
- err = MapNvm3Error(nvm3_writeData(&handle, key, data, dataLen));
+ err = MapNvm3Error(nvm3_writeData(nvm3_defaultHandle, key, data, dataLen));
SuccessOrExit(err);
}
}
else
{
- nvm3_deleteObject(&handle, key); // no error checking here.
+ nvm3_deleteObject(nvm3_defaultHandle, key); // no error checking here.
}
exit:
- OnExit();
return err;
}
CHIP_ERROR EFR32Config::WriteConfigValueCounter(uint8_t counterIdx, uint32_t val)
{
CHIP_ERROR err;
- Key key = kMinConfigKey_ChipCounter + counterIdx;
-
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
+ Key key = kMinConfigKey_MatterCounter + counterIdx;
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
- err = MapNvm3Error(nvm3_writeCounter(&handle, key, val));
+ err = MapNvm3Error(nvm3_writeCounter(nvm3_defaultHandle, key, val));
SuccessOrExit(err);
exit:
- OnExit();
return err;
}
@@ -484,44 +387,21 @@
{
CHIP_ERROR err;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
// Delete the nvm3 object with the given key id.
- err = MapNvm3Error(nvm3_deleteObject(&handle, key));
+ err = MapNvm3Error(nvm3_deleteObject(nvm3_defaultHandle, key));
SuccessOrExit(err);
exit:
- OnExit();
return err;
}
bool EFR32Config::ConfigValueExists(Key key)
{
- CHIP_ERROR err;
uint32_t objectType;
size_t dataLen;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
-
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
// Find object with key id.
- err = MapNvm3Error(nvm3_getObjectInfo(&handle, key, &objectType, &dataLen));
-
-exit:
- OnExit();
+ CHIP_ERROR err = MapNvm3Error(nvm3_getObjectInfo(nvm3_defaultHandle, key, &objectType, &dataLen));
return (err == CHIP_NO_ERROR);
}
@@ -533,15 +413,14 @@
CHIP_ERROR err;
// Iterate over all the CHIP Config nvm3 records and delete each one...
- err = ForEachRecord(kMinConfigKey_ChipConfig, kMaxConfigKey_ChipConfig, false,
+ err = ForEachRecord(kMinConfigKey_MatterConfig, kMaxConfigKey_MatterConfig, false,
[](const Key & nvm3Key, const size_t & length) -> CHIP_ERROR {
CHIP_ERROR err2;
// Delete the nvm3 object with the given key id.
- err2 = MapNvm3Error(nvm3_deleteObject(&handle, nvm3Key));
+ err2 = ClearConfigValue(nvm3Key);
SuccessOrExit(err2);
exit:
- nvm3_close(&handle);
return err2;
});
@@ -580,11 +459,6 @@
// Invokes the callers CB function when appropriate.
CHIP_ERROR err = CHIP_NO_ERROR;
- if (pdFALSE == xSemaphoreTake(nvm3_Sem, pdMS_TO_TICKS(EFR32_SEM_TIMEOUT_ms)))
- {
- err = CHIP_ERROR_TIMEOUT;
- SuccessOrExit(err);
- }
for (Key nvm3Key = firstNvm3Key; nvm3Key <= lastNvm3Key; ++nvm3Key)
{
@@ -592,12 +466,8 @@
uint32_t objectType;
size_t dataLen;
- // Open nvm3 handle for reading on each iteration.
- err = MapNvm3Error(nvm3_open(&handle, &chipNvm3));
- SuccessOrExit(err);
-
// Find nvm3 object with current nvm3 iteration key.
- nvm3Res = nvm3_getObjectInfo(&handle, nvm3Key, &objectType, &dataLen);
+ nvm3Res = nvm3_getObjectInfo(nvm3_defaultHandle, nvm3Key, &objectType, &dataLen);
switch (nvm3Res)
{
case ECODE_NVM3_OK:
@@ -624,16 +494,14 @@
SuccessOrExit(err);
}
-exit:
- OnExit();
+exit:;
return err;
}
bool EFR32Config::ValidConfigKey(Key key)
{
- // Returns true if the key is in the valid CHIP Config nvm3 key range.
-
- if ((key >= kMinConfigKey_ChipFactory) && (key <= kMaxConfigKey_ChipCounter))
+ // Returns true if the key is in the valid Matter Config nvm3 key range.
+ if ((key >= kMinConfigKey_MatterFactory) && (key <= kMaxConfigKey_MatterKvs))
{
return true;
}
@@ -652,13 +520,7 @@
// Repack nvm3 flash if nvm3 space < headroom threshold.
// Note- checking periodically during idle periods should prevent
// forced repack events on any write operation.
- nvm3_repack(&handle);
-}
-
-void EFR32Config::OnExit()
-{
- xSemaphoreGive(nvm3_Sem);
- nvm3_close(&handle);
+ nvm3_repack(nvm3_defaultHandle);
}
} // namespace Internal