From 980119e86c048304c1012621447c405ca1f0f4e7 Mon Sep 17 00:00:00 2001
From: Junior Martinez <67972863+jmartinez-silabs@users.noreply.github.com>
Date: Tue, 6 Aug 2024 14:15:14 -0400
Subject: [PATCH 1/4] Create a separte source_set for the provision storage
 implementation

---
 examples/platform/silabs/SiWx917/BUILD.gn   | 10 +---
 examples/platform/silabs/efr32/BUILD.gn     |  7 +--
 examples/platform/silabs/provision/BUILD.gn | 56 +++++++++++++++++++++
 3 files changed, 58 insertions(+), 15 deletions(-)
 create mode 100644 examples/platform/silabs/provision/BUILD.gn

diff --git a/examples/platform/silabs/SiWx917/BUILD.gn b/examples/platform/silabs/SiWx917/BUILD.gn
index 8acee7c3b9cfcd..b6adabbf8f9495 100644
--- a/examples/platform/silabs/SiWx917/BUILD.gn
+++ b/examples/platform/silabs/SiWx917/BUILD.gn
@@ -115,12 +115,6 @@ source_set("siwx917-matter-shell") {
 
 config("siwx917-common-config") {
   defines = [ "OTA_PERIODIC_TIMEOUT=${ota_periodic_query_timeout_sec}" ]
-  if (sl_si91x_crypto_flavor == "psa") {
-    libs =
-        [ "${sdk_support_root}/matter/provision/lib/libProvisionPSA_si917.a" ]
-  } else {
-    libs = [ "${sdk_support_root}/matter/provision/lib/libProvision_si917.a" ]
-  }
 
   if (!disable_lcd) {
     include_dirs = [ "${silabs_common_plat_dir}/display" ]
@@ -177,7 +171,7 @@ config("silabs-wifi-config") {
 }
 
 source_set("siwx917-common") {
-  deps = [ "${chip_root}/src/platform/silabs/provision:provision-headers" ]
+  deps = [ "${silabs_common_plat_dir}/provision:provision-storage" ]
   defines = []
   public_deps = []
   public_configs = [
@@ -197,8 +191,6 @@ source_set("siwx917-common") {
     "${silabs_common_plat_dir}/LEDWidget.cpp",
     "${silabs_common_plat_dir}/MatterConfig.cpp",
     "${silabs_common_plat_dir}/SoftwareFaultReports.cpp",
-    "${silabs_common_plat_dir}/provision/ProvisionStorageCustom.cpp",
-    "${silabs_common_plat_dir}/provision/ProvisionStorageFlash.cpp",
     "${silabs_common_plat_dir}/silabs_utils.cpp",
     "${silabs_common_plat_dir}/syscalls_stubs.cpp",
     "${silabs_plat_si91x_wifi_dir}/dhcp_client.cpp",
diff --git a/examples/platform/silabs/efr32/BUILD.gn b/examples/platform/silabs/efr32/BUILD.gn
index 6cf43897f43b10..5ff17504787614 100644
--- a/examples/platform/silabs/efr32/BUILD.gn
+++ b/examples/platform/silabs/efr32/BUILD.gn
@@ -148,9 +148,6 @@ source_set("efr-matter-shell") {
 
 config("efr32-common-config") {
   defines = [ "OTA_PERIODIC_TIMEOUT=${ota_periodic_query_timeout_sec}" ]
-  libs = [
-    "${sdk_support_root}/matter/provision/lib/libProvision_${silabs_family}.a",
-  ]
 
   if (!disable_lcd) {
     include_dirs = [ "${silabs_common_plat_dir}/display" ]
@@ -212,7 +209,7 @@ config("silabs-wifi-config") {
 }
 
 source_set("efr32-common") {
-  deps = [ "${chip_root}/src/platform/silabs/provision:provision-headers" ]
+  deps = [ "${silabs_common_plat_dir}/provision:provision-storage" ]
   defines = []
   public_deps = []
   public_configs = [
@@ -241,8 +238,6 @@ source_set("efr32-common") {
     "${silabs_common_plat_dir}/LEDWidget.cpp",
     "${silabs_common_plat_dir}/MatterConfig.cpp",
     "${silabs_common_plat_dir}/SoftwareFaultReports.cpp",
-    "${silabs_common_plat_dir}/provision/ProvisionStorageCustom.cpp",
-    "${silabs_common_plat_dir}/provision/ProvisionStorageDefault.cpp",
     "${silabs_common_plat_dir}/silabs_utils.cpp",
     "${silabs_common_plat_dir}/syscalls_stubs.cpp",
   ]
diff --git a/examples/platform/silabs/provision/BUILD.gn b/examples/platform/silabs/provision/BUILD.gn
new file mode 100644
index 00000000000000..2090bdd682e1ad
--- /dev/null
+++ b/examples/platform/silabs/provision/BUILD.gn
@@ -0,0 +1,56 @@
+# Copyright (c) 2020 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import("//build_overrides/chip.gni")
+import("//build_overrides/efr32_sdk.gni")
+import("${efr32_sdk_build_root}/silabs_board.gni")
+
+if (wifi_soc) {
+  import("${efr32_sdk_build_root}/SiWx917_sdk.gni")
+} else {
+  import("${efr32_sdk_build_root}/efr32_sdk.gni")
+}
+
+declare_args() {
+  use_flash_storage = wifi_soc
+}
+
+source_set("provision-storage") {
+  sources = [ "ProvisionStorageCustom.cpp" ]
+
+  if (use_flash_storage) {
+    sources += [ "ProvisionStorageFlash.cpp" ]
+  } else {
+    sources += [ "ProvisionStorageDefault.cpp" ]
+  }
+
+  if (wifi_soc) {
+    if (sl_si91x_crypto_flavor == "psa") {
+      libs =
+          [ "${sdk_support_root}/matter/provision/lib/libProvisionPSA_si917.a" ]
+    } else {
+      libs = [ "${sdk_support_root}/matter/provision/lib/libProvision_si917.a" ]
+    }
+  } else {
+    if (use_flash_storage) {
+      libs = [ "${sdk_support_root}/matter/provision/lib/libProvisionFlash_${silabs_family}.a" ]
+    } else {
+      libs = [ "${sdk_support_root}/matter/provision/lib/libProvision_${silabs_family}.a" ]
+    }
+  }
+
+  deps = [ "${chip_root}/src/lib" ]
+  public_deps =
+      [ "${chip_root}/src/platform/silabs/provision:provision-headers" ]
+}

From 8b78a083f4d6aa4fe709467f22f538788b5eaa34 Mon Sep 17 00:00:00 2001
From: Junior Martinez <67972863+jmartinez-silabs@users.noreply.github.com>
Date: Mon, 12 Aug 2024 11:11:53 -0400
Subject: [PATCH 2/4] Fix efr32 build using provision flash storage

---
 examples/platform/silabs/provision/BUILD.gn           | 6 +-----
 src/platform/silabs/efr32/efr32-chip-mbedtls-config.h | 6 ++++++
 third_party/silabs/SiWx917_sdk.gni                    | 3 +++
 third_party/silabs/efr32_sdk.gni                      | 9 +++++++++
 4 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/examples/platform/silabs/provision/BUILD.gn b/examples/platform/silabs/provision/BUILD.gn
index 2090bdd682e1ad..c5a487f3c88705 100644
--- a/examples/platform/silabs/provision/BUILD.gn
+++ b/examples/platform/silabs/provision/BUILD.gn
@@ -1,4 +1,4 @@
-# Copyright (c) 2020 Project CHIP Authors
+# Copyright (c) 2024 Project CHIP Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -22,10 +22,6 @@ if (wifi_soc) {
   import("${efr32_sdk_build_root}/efr32_sdk.gni")
 }
 
-declare_args() {
-  use_flash_storage = wifi_soc
-}
-
 source_set("provision-storage") {
   sources = [ "ProvisionStorageCustom.cpp" ]
 
diff --git a/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h b/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h
index 6ecfae7d3e4476..b6cea53dec9b8b 100644
--- a/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h
+++ b/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h
@@ -87,6 +87,12 @@
 #define PSA_WANT_ALG_SOME_PAKE
 #endif // SL_USE_COAP_CONFIG
 
+#if SL_PROVISION_FLASH
+#define MBEDTLS_SHA256_C
+#define MBEDTLS_HMAC_DRBG_C
+#define MBEDTLS_ECDSA_DETERMINISTIC
+#endif
+
 #define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf
 
 #define MBEDTLS_AES_ROM_TABLES
diff --git a/third_party/silabs/SiWx917_sdk.gni b/third_party/silabs/SiWx917_sdk.gni
index 5faba08acd3d3b..e9e46cd1bb4c39 100644
--- a/third_party/silabs/SiWx917_sdk.gni
+++ b/third_party/silabs/SiWx917_sdk.gni
@@ -38,6 +38,9 @@ declare_args() {
 
   # enable 917 SoC M4 sleep wakeup
   si917_m4_sleep_enabled = false
+
+  # Factory Provision storage
+  use_flash_storage = true
 }
 
 # Defines an siwx917 SDK build target.
diff --git a/third_party/silabs/efr32_sdk.gni b/third_party/silabs/efr32_sdk.gni
index ccbae7f1ec23ff..4fa3562d0ccfe6 100644
--- a/third_party/silabs/efr32_sdk.gni
+++ b/third_party/silabs/efr32_sdk.gni
@@ -82,6 +82,9 @@ declare_args() {
   chip_enable_multi_ota_requestor = false
   chip_enable_multi_ota_encryption = false
   chip_enable_ota_custom_tlv_testing = false
+
+  # Factory Provision storage
+  use_flash_storage = false
 }
 
 examples_plat_dir = "${chip_root}/examples/platform/silabs/efr32"
@@ -469,6 +472,12 @@ template("efr32_sdk") {
       defines += [ "SL_USE_COAP_CONFIG=0" ]
     }
 
+    if (use_flash_storage) {
+      defines += [ "SL_PROVISION_FLASH=1" ]
+    } else {
+      defines += [ "SL_PROVISION_FLASH=0" ]
+    }
+
     if (chip_enable_ble_rs911x) {
       defines += [
         "RSI_BLE_ENABLE=1",

From 37d15c3d2323714a312204d2657db6ccab4c7c51 Mon Sep 17 00:00:00 2001
From: Junior Martinez <67972863+jmartinez-silabs@users.noreply.github.com>
Date: Mon, 12 Aug 2024 14:10:57 -0400
Subject: [PATCH 3/4] fix argument duplication which is not needed.

---
 third_party/silabs/SiWx917_sdk.gni | 3 ---
 third_party/silabs/efr32_sdk.gni   | 2 +-
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/third_party/silabs/SiWx917_sdk.gni b/third_party/silabs/SiWx917_sdk.gni
index e9e46cd1bb4c39..5faba08acd3d3b 100644
--- a/third_party/silabs/SiWx917_sdk.gni
+++ b/third_party/silabs/SiWx917_sdk.gni
@@ -38,9 +38,6 @@ declare_args() {
 
   # enable 917 SoC M4 sleep wakeup
   si917_m4_sleep_enabled = false
-
-  # Factory Provision storage
-  use_flash_storage = true
 }
 
 # Defines an siwx917 SDK build target.
diff --git a/third_party/silabs/efr32_sdk.gni b/third_party/silabs/efr32_sdk.gni
index 4fa3562d0ccfe6..68f313f6398d28 100644
--- a/third_party/silabs/efr32_sdk.gni
+++ b/third_party/silabs/efr32_sdk.gni
@@ -84,7 +84,7 @@ declare_args() {
   chip_enable_ota_custom_tlv_testing = false
 
   # Factory Provision storage
-  use_flash_storage = false
+  use_flash_storage = wifi_soc
 }
 
 examples_plat_dir = "${chip_root}/examples/platform/silabs/efr32"

From 61d2873e988f5e09f9e71ec114d56e67b9c20fda Mon Sep 17 00:00:00 2001
From: Junior Martinez <67972863+jmartinez-silabs@users.noreply.github.com>
Date: Tue, 13 Aug 2024 09:26:56 -0400
Subject: [PATCH 4/4] apply suggested renames

---
 examples/platform/silabs/SiWx917/BUILD.gn             | 2 +-
 examples/platform/silabs/efr32/BUILD.gn               | 2 +-
 examples/platform/silabs/provision/BUILD.gn           | 6 +++---
 src/platform/silabs/efr32/efr32-chip-mbedtls-config.h | 4 ++--
 third_party/silabs/efr32_sdk.gni                      | 8 ++++----
 5 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/examples/platform/silabs/SiWx917/BUILD.gn b/examples/platform/silabs/SiWx917/BUILD.gn
index b6adabbf8f9495..b21eb08fa8ab74 100644
--- a/examples/platform/silabs/SiWx917/BUILD.gn
+++ b/examples/platform/silabs/SiWx917/BUILD.gn
@@ -171,7 +171,7 @@ config("silabs-wifi-config") {
 }
 
 source_set("siwx917-common") {
-  deps = [ "${silabs_common_plat_dir}/provision:provision-storage" ]
+  deps = [ "${silabs_common_plat_dir}/provision:storage" ]
   defines = []
   public_deps = []
   public_configs = [
diff --git a/examples/platform/silabs/efr32/BUILD.gn b/examples/platform/silabs/efr32/BUILD.gn
index 5ff17504787614..18a68fbe1f2031 100644
--- a/examples/platform/silabs/efr32/BUILD.gn
+++ b/examples/platform/silabs/efr32/BUILD.gn
@@ -209,7 +209,7 @@ config("silabs-wifi-config") {
 }
 
 source_set("efr32-common") {
-  deps = [ "${silabs_common_plat_dir}/provision:provision-storage" ]
+  deps = [ "${silabs_common_plat_dir}/provision:storage" ]
   defines = []
   public_deps = []
   public_configs = [
diff --git a/examples/platform/silabs/provision/BUILD.gn b/examples/platform/silabs/provision/BUILD.gn
index c5a487f3c88705..ccd5b919bc0379 100644
--- a/examples/platform/silabs/provision/BUILD.gn
+++ b/examples/platform/silabs/provision/BUILD.gn
@@ -22,10 +22,10 @@ if (wifi_soc) {
   import("${efr32_sdk_build_root}/efr32_sdk.gni")
 }
 
-source_set("provision-storage") {
+source_set("storage") {
   sources = [ "ProvisionStorageCustom.cpp" ]
 
-  if (use_flash_storage) {
+  if (use_provision_flash_storage) {
     sources += [ "ProvisionStorageFlash.cpp" ]
   } else {
     sources += [ "ProvisionStorageDefault.cpp" ]
@@ -39,7 +39,7 @@ source_set("provision-storage") {
       libs = [ "${sdk_support_root}/matter/provision/lib/libProvision_si917.a" ]
     }
   } else {
-    if (use_flash_storage) {
+    if (use_provision_flash_storage) {
       libs = [ "${sdk_support_root}/matter/provision/lib/libProvisionFlash_${silabs_family}.a" ]
     } else {
       libs = [ "${sdk_support_root}/matter/provision/lib/libProvision_${silabs_family}.a" ]
diff --git a/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h b/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h
index b6cea53dec9b8b..c707fe9e9ff323 100644
--- a/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h
+++ b/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h
@@ -87,11 +87,11 @@
 #define PSA_WANT_ALG_SOME_PAKE
 #endif // SL_USE_COAP_CONFIG
 
-#if SL_PROVISION_FLASH
+#if SL_MATTER_PROVISION_FLASH
 #define MBEDTLS_SHA256_C
 #define MBEDTLS_HMAC_DRBG_C
 #define MBEDTLS_ECDSA_DETERMINISTIC
-#endif
+#endif // SL_MATTER_PROVISION_FLASH
 
 #define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf
 
diff --git a/third_party/silabs/efr32_sdk.gni b/third_party/silabs/efr32_sdk.gni
index 68f313f6398d28..c9126d02e43a9f 100644
--- a/third_party/silabs/efr32_sdk.gni
+++ b/third_party/silabs/efr32_sdk.gni
@@ -84,7 +84,7 @@ declare_args() {
   chip_enable_ota_custom_tlv_testing = false
 
   # Factory Provision storage
-  use_flash_storage = wifi_soc
+  use_provision_flash_storage = wifi_soc
 }
 
 examples_plat_dir = "${chip_root}/examples/platform/silabs/efr32"
@@ -472,10 +472,10 @@ template("efr32_sdk") {
       defines += [ "SL_USE_COAP_CONFIG=0" ]
     }
 
-    if (use_flash_storage) {
-      defines += [ "SL_PROVISION_FLASH=1" ]
+    if (use_provision_flash_storage) {
+      defines += [ "SL_MATTER_PROVISION_FLASH=1" ]
     } else {
-      defines += [ "SL_PROVISION_FLASH=0" ]
+      defines += [ "SL_MATTER_PROVISION_FLASH=0" ]
     }
 
     if (chip_enable_ble_rs911x) {