Skip to content

Commit d6ad867

Browse files
[SL-UP] Bugfix: Hardware version persistence. (project-chip#223) (project-chip#37556)
1 parent ccbc1f2 commit d6ad867

File tree

5 files changed

+45
-27
lines changed

5 files changed

+45
-27
lines changed

examples/platform/silabs/provision/ProvisionStorageDefault.cpp

-23
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
#include <nvm3_default.h>
2626
#include <nvm3_hal_flash.h>
2727
#include <platform/CHIPDeviceConfig.h>
28-
#include <platform/silabs/MigrationManager.h>
2928
#include <platform/silabs/SilabsConfig.h>
3029
#include <platform/silabs/platformAbstraction/SilabsPlatform.h>
3130
#include <silabs_creds.h>
@@ -708,28 +707,6 @@ CHIP_ERROR Storage::GetTestEventTriggerKey(MutableByteSpan & keySpan)
708707
}
709708

710709
} // namespace Provision
711-
712-
void MigrateDacProvider(void)
713-
{
714-
constexpr uint32_t kOldKey_Creds_KeyId = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x21);
715-
constexpr uint32_t kOldKey_Creds_Base_Addr = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x22);
716-
constexpr uint32_t kOldKey_Creds_DAC_Offset = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x23);
717-
constexpr uint32_t kOldKey_Creds_DAC_Size = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x24);
718-
constexpr uint32_t kOldKey_Creds_PAI_Size = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x26);
719-
constexpr uint32_t kOldKey_Creds_PAI_Offset = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x25);
720-
constexpr uint32_t kOldKey_Creds_CD_Offset = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x27);
721-
constexpr uint32_t kOldKey_Creds_CD_Size = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x28);
722-
723-
MigrationManager::MigrateUint32(kOldKey_Creds_KeyId, SilabsConfig::kConfigKey_Creds_KeyId);
724-
MigrationManager::MigrateUint32(kOldKey_Creds_Base_Addr, SilabsConfig::kConfigKey_Creds_Base_Addr);
725-
MigrationManager::MigrateUint32(kOldKey_Creds_DAC_Offset, SilabsConfig::kConfigKey_Creds_DAC_Offset);
726-
MigrationManager::MigrateUint32(kOldKey_Creds_DAC_Size, SilabsConfig::kConfigKey_Creds_DAC_Size);
727-
MigrationManager::MigrateUint32(kOldKey_Creds_PAI_Offset, SilabsConfig::kConfigKey_Creds_PAI_Offset);
728-
MigrationManager::MigrateUint32(kOldKey_Creds_PAI_Size, SilabsConfig::kConfigKey_Creds_PAI_Size);
729-
MigrationManager::MigrateUint32(kOldKey_Creds_CD_Offset, SilabsConfig::kConfigKey_Creds_CD_Offset);
730-
MigrationManager::MigrateUint32(kOldKey_Creds_CD_Size, SilabsConfig::kConfigKey_Creds_CD_Size);
731-
}
732-
733710
} // namespace Silabs
734711
} // namespace DeviceLayer
735712
} // namespace chip

examples/platform/silabs/provision/ProvisionStorageFlash.cpp

-3
Original file line numberDiff line numberDiff line change
@@ -738,9 +738,6 @@ CHIP_ERROR Storage::GetTestEventTriggerKey(MutableByteSpan & keySpan)
738738
}
739739

740740
} // namespace Provision
741-
742-
void MigrateDacProvider(void) {}
743-
744741
} // namespace Silabs
745742
} // namespace DeviceLayer
746743
} // namespace chip

src/platform/silabs/MigrationManager.cpp

+42
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ static migrationData_t migrationTable[] = {
4040
{ .migrationGroup = 1, .migrationFunc = MigrateKvsMap },
4141
{ .migrationGroup = 2, .migrationFunc = MigrateDacProvider },
4242
{ .migrationGroup = 3, .migrationFunc = MigrateCounterConfigs },
43+
{ .migrationGroup = 4, .migrationFunc = MigrateHardwareVersion },
4344
// add any additional migration neccesary. migrationGroup should stay equal if done in the same commit or increment by 1 for
4445
// each new entry.
4546
};
@@ -62,6 +63,20 @@ void MigrationManager::applyMigrations()
6263
}
6364
SilabsConfig::WriteConfigValue(SilabsConfig::kConfigKey_MigrationCounter, completedMigrationGroup);
6465
}
66+
67+
void MigrationManager::MigrateUint16(uint32_t old_key, uint32_t new_key)
68+
{
69+
uint16_t value = 0;
70+
if (SilabsConfig::ConfigValueExists(old_key) && (CHIP_NO_ERROR == SilabsConfig::ReadConfigValue(old_key, value)))
71+
{
72+
if (CHIP_NO_ERROR == SilabsConfig::WriteConfigValue(new_key, value))
73+
{
74+
// Free memory of old key location
75+
SilabsConfig::ClearConfigValue(old_key);
76+
}
77+
}
78+
}
79+
6580
void MigrationManager::MigrateUint32(uint32_t old_key, uint32_t new_key)
6681
{
6782
uint32_t value = 0;
@@ -90,6 +105,33 @@ MigrationManager & MigrationManager::GetMigrationInstance()
90105
return sMigrationManager;
91106
}
92107

108+
void MigrateDacProvider(void)
109+
{
110+
constexpr uint32_t kOldKey_Creds_KeyId = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x21);
111+
constexpr uint32_t kOldKey_Creds_Base_Addr = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x22);
112+
constexpr uint32_t kOldKey_Creds_DAC_Offset = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x23);
113+
constexpr uint32_t kOldKey_Creds_DAC_Size = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x24);
114+
constexpr uint32_t kOldKey_Creds_PAI_Size = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x26);
115+
constexpr uint32_t kOldKey_Creds_PAI_Offset = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x25);
116+
constexpr uint32_t kOldKey_Creds_CD_Offset = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x27);
117+
constexpr uint32_t kOldKey_Creds_CD_Size = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x28);
118+
119+
MigrationManager::MigrateUint32(kOldKey_Creds_KeyId, SilabsConfig::kConfigKey_Creds_KeyId);
120+
MigrationManager::MigrateUint32(kOldKey_Creds_Base_Addr, SilabsConfig::kConfigKey_Creds_Base_Addr);
121+
MigrationManager::MigrateUint32(kOldKey_Creds_DAC_Offset, SilabsConfig::kConfigKey_Creds_DAC_Offset);
122+
MigrationManager::MigrateUint32(kOldKey_Creds_DAC_Size, SilabsConfig::kConfigKey_Creds_DAC_Size);
123+
MigrationManager::MigrateUint32(kOldKey_Creds_PAI_Offset, SilabsConfig::kConfigKey_Creds_PAI_Offset);
124+
MigrationManager::MigrateUint32(kOldKey_Creds_PAI_Size, SilabsConfig::kConfigKey_Creds_PAI_Size);
125+
MigrationManager::MigrateUint32(kOldKey_Creds_CD_Offset, SilabsConfig::kConfigKey_Creds_CD_Offset);
126+
MigrationManager::MigrateUint32(kOldKey_Creds_CD_Size, SilabsConfig::kConfigKey_Creds_CD_Size);
127+
}
128+
129+
void MigrateHardwareVersion(void)
130+
{
131+
constexpr uint32_t kOldKey_HardwareVersion = SilabsConfigKey(SilabsConfig::kMatterConfig_KeyBase, 0x08);
132+
MigrationManager::MigrateUint16(kOldKey_HardwareVersion, SilabsConfig::kConfigKey_HardwareVersion);
133+
}
134+
93135
} // namespace Silabs
94136
} // namespace DeviceLayer
95137
} // namespace chip

src/platform/silabs/MigrationManager.h

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class MigrationManager
3131
*/
3232
static MigrationManager & GetMigrationInstance();
3333
static void applyMigrations();
34+
static void MigrateUint16(uint32_t old_key, uint32_t new_key);
3435
static void MigrateUint32(uint32_t old_key, uint32_t new_key);
3536

3637
private:
@@ -45,6 +46,7 @@ class MigrationManager
4546
void MigrateKvsMap(void);
4647
void MigrateDacProvider(void);
4748
void MigrateCounterConfigs(void);
49+
void MigrateHardwareVersion(void);
4850

4951
} // namespace Silabs
5052
} // namespace DeviceLayer

src/platform/silabs/SilabsConfig.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ class SilabsConfig
120120
static constexpr Key kConfigKey_hostname = SilabsConfigKey(kMatterFactory_KeyBase, 0x15);
121121
static constexpr Key kConfigKey_clientid = SilabsConfigKey(kMatterFactory_KeyBase, 0x16);
122122
static constexpr Key kConfigKey_Test_Event_Trigger_Key = SilabsConfigKey(kMatterFactory_KeyBase, 0x17);
123+
static constexpr Key kConfigKey_HardwareVersion = SilabsConfigKey(kMatterFactory_KeyBase, 0x18);
123124
// kConfigKey_PersistentUniqueId is the inputkey in the generating of the Rotating Device ID
124125
// SHALL NOT be the same as the UniqueID attribute exposed in the Basic Information cluster.
125126
static constexpr Key kConfigKey_PersistentUniqueId = SilabsConfigKey(kMatterFactory_KeyBase, 0x1F);
@@ -142,7 +143,6 @@ class SilabsConfig
142143
static constexpr Key kConfigKey_LastUsedEpochKeyId = SilabsConfigKey(kMatterConfig_KeyBase, 0x05);
143144
static constexpr Key kConfigKey_FailSafeArmed = SilabsConfigKey(kMatterConfig_KeyBase, 0x06);
144145
static constexpr Key kConfigKey_GroupKey = SilabsConfigKey(kMatterConfig_KeyBase, 0x07);
145-
static constexpr Key kConfigKey_HardwareVersion = SilabsConfigKey(kMatterConfig_KeyBase, 0x08);
146146
static constexpr Key kConfigKey_RegulatoryLocation = SilabsConfigKey(kMatterConfig_KeyBase, 0x09);
147147
static constexpr Key kConfigKey_CountryCode = SilabsConfigKey(kMatterConfig_KeyBase, 0x0A);
148148
static constexpr Key kConfigKey_WiFiSSID = SilabsConfigKey(kMatterConfig_KeyBase, 0x0C);

0 commit comments

Comments
 (0)