diff --git a/.gitignore b/.gitignore
index 0ed0a12..fcb2574 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,8 +13,10 @@
 **/build/**/*
 
 #Eclipse project files
-.cproject
-.project
+*.project
+*.cproject
+.pydevproject
+.settings/
 
 # Compiled python modules.
 *.pyc
@@ -30,3 +32,6 @@
 /target/
 boot/cypress/platforms/memory/memorymap.c
 boot/cypress/platforms/memory/memorymap.h
+
+# Visual Studio Code
+.vscode/
\ No newline at end of file
diff --git a/boot/bootutil/include/bootutil/bootutil.h b/boot/bootutil/include/bootutil/bootutil.h
index 4e9fc38..51ec64e 100644
--- a/boot/bootutil/include/bootutil/bootutil.h
+++ b/boot/bootutil/include/bootutil/bootutil.h
@@ -31,6 +31,7 @@
 #include <inttypes.h>
 #include "bootutil/fault_injection_hardening.h"
 #include "bootutil/bootutil_public.h"
+#include "bootutil/image.h"
 
 #ifdef MCUBOOT_ENC_IMAGES_XIP
 #include "bootutil/enc_key.h"
@@ -74,6 +75,10 @@
  * when attempting to read/write a trailer.
  */
 struct image_trailer {
+#if defined(MCUBOOT_DIRECT_XIP)
+    uint8_t image_inactive;
+    uint8_t pad0[BOOT_MAX_ALIGN - 1];
+#endif
     uint8_t swap_type;
     uint8_t pad1[BOOT_MAX_ALIGN - 1];
     uint8_t copy_done;
@@ -86,15 +91,184 @@
     uint8_t magic[BOOT_MAGIC_SZ];
 };
 
+typedef enum
+{
+    MCUBOOT_SLOT_STATE_NO_IMAGE = 0,
+    MCUBOOT_SLOT_STATE_ACTIVE,
+    MCUBOOT_SLOT_STATE_PENDING,
+    MCUBOOT_SLOT_STATE_VERIFYING,
+    MCUBOOT_SLOT_STATE_INACTIVE
+} boot_slot_state_t;
+
 /* you must have pre-allocated all the entries within this structure */
 fih_int boot_go(struct boot_rsp *rsp);
 fih_int boot_go_for_image_id(struct boot_rsp *rsp, uint32_t image_id);
 
+/**
+ * @brief Performs slot validation without performing boot
+ *
+ * @param image_id - Image number, starting from 0
+ * 
+ * @param slot_id - Slot index: 0 - primary slot, 1 - secondary slot
+ *
+ * @retval FIH_SUCCESS on success
+ */
+fih_int
+boot_validate_slot_for_image_id(uint32_t image_id, uint32_t slot_id);
+
+/**
+ * @brief Reads image version fields from the image header area
+ *
+ * @param image_id - Image number, starting from 0
+ * 
+ * @param slot_id - Slot index: 0 - primary slot, 1 - secondary slot
+ * 
+ * @param ver - Version structure output
+ *
+ * @retval 0 on success
+ */
+int
+boot_get_image_version(uint32_t image_id, uint32_t slot_id, struct image_version* ver);
+
+#if defined(MCUBOOT_DIRECT_XIP)
+/**
+ * @brief Marks the slot as inactive.
+ *
+ * @param image_id - Image number, starting from 0.
+ * 
+ * @param slot_id - Slot index: 0 - primary slot, 1 - secondary slot.
+ *
+ * @retval 0 on success
+ */
+int 
+boot_set_inactive_slot(uint32_t image_id, uint32_t slot_id);
+
+/**
+ * @brief Checks if the slot is inactive.
+ *
+ * @param image_id - Image number, starting from 0.
+ * 
+ * @param slot_id - Slot index: 0 - primary slot, 1 - secondary slot.
+ *
+ * @retval 1 The slot is set as inactive
+ *         0 The slot is not set as inactive
+ *        -1 On error
+ */
+int 
+boot_is_slot_inactive(uint32_t image_id, uint32_t slot_id);
+
+/**
+ * @brief Restores slot from inactive state to make it able to boot.
+ *
+ * @param image_id - Image number, starting from 0
+ * 
+ * @param slot_id - Slot index: 0 - primary slot, 1 - secondary slot
+ *
+ * @retval 0 on success
+ * 
+ */
+int
+boot_set_pending_slot(uint32_t image_id, uint32_t slot_id);
+
+
+/**
+ * @brief Sets the revert state to the slot. Image will be erased on next reboot
+ *
+ * @param image_id - Image number, starting from 0
+ * 
+ * @param slot_id - Slot index: 0 - primary slot, 1 - secondary slot
+ *
+ * @retval 0 on success
+ * 
+ */
+int
+boot_set_revert_slot(uint32_t image_id, uint32_t slot_id);
+
+/**
+ * @brief Finds the TLV (Type-Length-Value) metadata information for a specific image and slot.
+ *
+ * Retrieves offset and length information for the requested TLV entry.
+ *
+ * @param image_id Image identifier (starting from 0).
+ * 
+ * @param slot_id  Slot index (0 for primary slot, 1 for secondary slot).
+ * 
+ * @param type     TLV type identifier.
+ * 
+ * @param len      Output pointer for storing TLV length.
+ * 
+ * @param off      Output pointer for storing TLV offset.
+ *
+ * @retval 0 Success.
+ * @retval Non-zero Error occurred or TLV not found.
+ */
+int
+boot_find_image_tlv_info(uint32_t image_id, uint32_t slot_id, uint16_t type, uint16_t* len, uint32_t* off);
+
+/**
+ * @brief Reads the TLV metadata value from a specified image slot.
+ *
+ * Fetches the actual data associated with the specified TLV type.
+ *
+ * @param image_id Image identifier (starting from 0).
+ * 
+ * @param slot_id  Slot index (0 for primary slot, 1 for secondary slot).
+ * 
+ * @param type     TLV type identifier.
+ * 
+ * @param buf      Buffer pointer to store the retrieved TLV value.
+ * 
+ * @param buf_len  Length of provided buffer.
+ * 
+ * @param read_len Output pointer for storing the actual number of bytes read.
+ *
+ * @retval 0 Success.
+ * @retval Non-zero Error occurred or insufficient buffer length.
+ */
+int
+boot_read_image_tlv_value(uint32_t image_id, uint32_t slot_id, uint16_t type, uint8_t* buf, uint32_t buf_len, uint32_t* read_len);
+
+/**
+ * @brief Retrieves the current state of the specified slot.
+ *
+ * Provides details about the current slot status without image verification.
+ *
+ * @param image_id Image identifier (starting from 0).
+ * 
+ * @param slot_id  Slot index (0 for primary slot, 1 for secondary slot).
+ * 
+ * @param state    Output pointer to store the slot state information.
+ *
+ * @retval 0 Success.
+ * @retval Non-zero Error occurred.
+ */
+int
+boot_get_slot_state(uint32_t image_id, uint32_t slot_id, boot_slot_state_t* state);
+
+/**
+ * @brief Retrieves the current state of the specified image slot.
+ *
+ * Provides details about the current status (active, inactive, pending, etc.) of the specified slot.
+ *
+ * @param image_id Image identifier (starting from 0).
+ * 
+ * @param slot_id  Slot index (0 for primary slot, 1 for secondary slot).
+ * 
+ * @param state    Output pointer to store the slot state information.
+ *
+ * @retval 0 Success.
+ * @retval Non-zero Error occurred.
+ */
+int
+boot_get_image_state(uint32_t image_id, uint32_t slot_id, boot_slot_state_t* state);
+
+#endif
+
 struct boot_loader_state;
 void boot_state_clear(struct boot_loader_state *state);
 fih_int context_boot_go_flash(struct boot_loader_state *state, struct boot_rsp *rsp);
 
-#if defined(MCUBOOT_RAM_LOAD)
+#if defined(MCUBOOT_RAM_LOAD) || defined(MCUBOOT_DIRECT_XIP)
 fih_int context_boot_go_ram(struct boot_loader_state *state, struct boot_rsp *rsp);
 fih_int boot_go_for_image_id_ram(struct boot_rsp *rsp, uint32_t image_id);
 #endif
diff --git a/boot/bootutil/include/bootutil/bootutil_public.h b/boot/bootutil/include/bootutil/bootutil_public.h
index 2c303d8..e8e1fb5 100644
--- a/boot/bootutil/include/bootutil/bootutil_public.h
+++ b/boot/bootutil/include/bootutil/bootutil_public.h
@@ -147,6 +147,9 @@
     uint8_t copy_done;  /* One of the BOOT_FLAG_[...] values. */
     uint8_t image_ok;   /* One of the BOOT_FLAG_[...] values. */
     uint8_t image_num;  /* Boot status belongs to this image */
+#if defined(MCUBOOT_DIRECT_XIP)
+    uint8_t image_inactive;    /* One of the BOOT_FLAG_[...] values. */
+#endif
 };
 
 /**
@@ -230,6 +233,18 @@
  */
 uint32_t boot_swap_info_off(const struct flash_area *fap);
 
+#if defined(MCUBOOT_DIRECT_XIP)
+/**
+ * @brief Get offset of the image invalidation field in the image trailer.
+ *
+ * @param fap Flash are for which offset is determined.
+ *
+ * @retval offset of the image invalidation field.
+ */
+uint32_t
+boot_image_inactive_off(const struct flash_area *fap);
+#endif
+
 /**
  * @brief Get value of image-ok flag of the image.
  *
diff --git a/boot/bootutil/include/bootutil/crypto/aes_ctr.h b/boot/bootutil/include/bootutil/crypto/aes_ctr.h
index 90727f1..5c0796a 100644
--- a/boot/bootutil/include/bootutil/crypto/aes_ctr.h
+++ b/boot/bootutil/include/bootutil/crypto/aes_ctr.h
@@ -137,7 +137,7 @@
     }
 
     if (status == PSA_SUCCESS) {
-        status = psa_cipher_finish(&ctx->operation, c + out_sz, sizeof(mlen) - out_sz, &f_sz);
+        status = psa_cipher_finish(&ctx->operation, c + out_sz, mlen - out_sz, &f_sz);
     }
 
     if ((status != PSA_SUCCESS) || ((out_sz + f_sz) != mlen)) {
@@ -168,7 +168,7 @@
     }
 
     if (status == PSA_SUCCESS) {
-        status = psa_cipher_finish(&ctx->operation, m + out_sz, sizeof(clen) - out_sz, &f_sz);
+        status = psa_cipher_finish(&ctx->operation, m + out_sz, clen - out_sz, &f_sz);
     }
 
     if ((status != PSA_SUCCESS) || ((out_sz + f_sz) != clen)) {
diff --git a/boot/bootutil/include/bootutil/security_cnt.h b/boot/bootutil/include/bootutil/security_cnt.h
index 515041e..d66c296 100644
--- a/boot/bootutil/include/bootutil/security_cnt.h
+++ b/boot/bootutil/include/bootutil/security_cnt.h
@@ -1,6 +1,6 @@
 /*
  *  Copyright (c) 2019-2020, Arm Limited. All rights reserved.
- *  Copyright (c) 2021 Infineon Technologies AG
+ *  Copyright (c) 2025 Infineon Technologies AG
  *
  *  SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/bootutil/src/bootutil_priv.h b/boot/bootutil/src/bootutil_priv.h
index 04c61f9..97841c3 100644
--- a/boot/bootutil/src/bootutil_priv.h
+++ b/boot/bootutil/src/bootutil_priv.h
@@ -266,6 +266,7 @@
 #elif defined(MCUBOOT_DIRECT_XIP_REVERT)
         /* Swap status for the active slot */
         struct boot_swap_state swap_state;
+        bool slot_validated[BOOT_NUM_SLOTS];
 #endif
     } slot_usage[BOOT_IMAGE_NUMBER];
 #endif /* MCUBOOT_DIRECT_XIP || MCUBOOT_RAM_LOAD */
@@ -290,6 +291,9 @@
 int boot_write_swap_info(const struct flash_area *fap, uint8_t swap_type,
                          uint8_t image_num);
 int boot_write_swap_size(const struct flash_area *fap, uint32_t swap_size);
+int boot_write_image_inv(const struct flash_area *fap);
+int boot_read_copy_done(const struct flash_area *fap, uint8_t *copy_done);
+int boot_read_image_inactive(const struct flash_area *fap, uint8_t *image_inactive);
 int boot_write_trailer(const struct flash_area *fap, uint32_t off,
                        const uint8_t *inbuf, uint8_t inlen);
 int boot_write_trailer_flag(const struct flash_area *fap, uint32_t off,
diff --git a/boot/bootutil/src/bootutil_public.c b/boot/bootutil/src/bootutil_public.c
index 38b2bd1..c1af9a5 100644
--- a/boot/bootutil/src/bootutil_public.c
+++ b/boot/bootutil/src/bootutil_public.c
@@ -143,7 +143,7 @@
 }
 #endif /* !MCUBOOT_SWAP_USING_STATUS */
 
-static int
+int
 boot_flag_decode(uint8_t flag)
 {
     if (flag != BOOT_FLAG_SET) {
@@ -160,7 +160,7 @@
     return ALIGN_DOWN(boot_magic_off(fap) - BOOT_MAX_ALIGN, BOOT_MAX_ALIGN);
 }
 
-static inline uint32_t
+uint32_t
 boot_copy_done_off(const struct flash_area *fap)
 {
     return boot_image_ok_off(fap) - BOOT_MAX_ALIGN;
@@ -171,6 +171,13 @@
 {
     return boot_copy_done_off(fap) - BOOT_MAX_ALIGN;
 }
+
+uint32_t
+boot_image_inactive_off(const struct flash_area *fap)
+{
+    return boot_swap_info_off(fap) - BOOT_MAX_ALIGN;
+}
+
 #endif /* !MCUBOOT_SWAP_USING_STATUS */
 
 /**
@@ -232,16 +239,35 @@
 static int
 boot_read_flag(const struct flash_area *fap, uint8_t *flag, uint32_t off)
 {
+    uint8_t buf[BOOT_MAX_ALIGN];
     int rc;
 
-    rc = flash_area_read(fap, off, flag, sizeof *flag);
+    rc = flash_area_read(fap, off, buf, BOOT_MAX_ALIGN);
+
     if (rc != 0) {
         return BOOT_EFLASH;
     }
-    if (*flag == flash_area_erased_val(fap)) {
+
+    if (bootutil_buffer_is_erased(fap, buf, BOOT_MAX_ALIGN))
+    {
         *flag = BOOT_FLAG_UNSET;
-    } else {
-        *flag = boot_flag_decode(*flag);
+    }
+    else
+    {
+        bool erased = bootutil_buffer_is_erased(fap, buf+1U, BOOT_MAX_ALIGN-1U);
+
+        if ((*buf == BOOT_FLAG_SET) && erased)
+        {
+            *flag = BOOT_FLAG_SET;
+        }
+        else if ((*buf != BOOT_FLAG_SET) && erased)
+        {
+            *flag = BOOT_FLAG_BAD;
+        }
+        else
+        {
+            *flag = BOOT_FLAG_UNSET;
+        }
     }
 
     return 0;
@@ -249,12 +275,27 @@
 
 #ifndef MCUBOOT_SWAP_USING_STATUS
 
-static inline int
+int
 boot_read_copy_done(const struct flash_area *fap, uint8_t *copy_done)
 {
     return boot_read_flag(fap, copy_done, boot_copy_done_off(fap));
 }
 
+int
+boot_read_image_inactive(const struct flash_area *fap, uint8_t *image_inactive)
+{
+    return boot_read_flag(fap, image_inactive, boot_image_inactive_off(fap));
+}
+
+int
+boot_write_image_inv(const struct flash_area *fap)
+{
+    uint32_t off;
+
+    off = boot_image_inactive_off(fap);
+
+    return boot_write_trailer_flag(fap, off, BOOT_FLAG_SET);
+}
 
 int
 boot_read_swap_state(const struct flash_area *fap,
@@ -297,6 +338,13 @@
         return BOOT_EFLASH;
     }
 
+#if defined(MCUBOOT_DIRECT_XIP)
+    rc = boot_read_image_inactive(fap, &state->image_inactive);
+    if (rc != 0) {
+        return BOOT_EFLASH;
+    }
+#endif
+
     return boot_read_image_ok(fap, &state->image_ok);
 }
 
@@ -406,14 +454,8 @@
     uint8_t erased_val;
     uint32_t align;
     int rc;
-
-    align = flash_area_align(fap);
-
-    if (align == 0u) {
-        return BOOT_EFLASH;
-    }
     
-    align = ALIGN_UP(inlen, align);
+    align = ALIGN_UP(inlen, BOOT_MAX_ALIGN);
     if (align > BOOT_MAX_ALIGN) {
         return -1;
     }
diff --git a/boot/bootutil/src/crc32c.c b/boot/bootutil/src/crc32c.c
index d298a1f..dd0ccb2 100644
--- a/boot/bootutil/src/crc32c.c
+++ b/boot/bootutil/src/crc32c.c
@@ -1,7 +1,7 @@
 /*
  * SPDX-License-Identifier: Apache-2.0
  *
- * Copyright (c) 2020 Cypress Semiconductors
+ * Copyright (c) 2025 Cypress Semiconductors
  *
  * Original license:
  *
diff --git a/boot/bootutil/src/crc32c.h b/boot/bootutil/src/crc32c.h
index 3a45663..ca48dd7 100644
--- a/boot/bootutil/src/crc32c.h
+++ b/boot/bootutil/src/crc32c.h
@@ -1,7 +1,7 @@
 /*
  * SPDX-License-Identifier: Apache-2.0
  *
- * Copyright (c) 2020 Cypress Semiconductors
+ * Copyright (c) 2025 Cypress Semiconductors
  *
  * Original license:
  *
diff --git a/boot/bootutil/src/encrypted.c b/boot/bootutil/src/encrypted.c
index 6d37ecb..322d71b 100644
--- a/boot/bootutil/src/encrypted.c
+++ b/boot/bootutil/src/encrypted.c
@@ -202,12 +202,12 @@
     }
 
 #if !defined(MCUBOOT_USE_PSA_CRYPTO)
-    if (alg.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_pubkey_oid) - 1 ||
-        memcmp(alg.MBEDTLS_CONTEXT_MEMBER(p), ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
+    if (alg.len != sizeof(ec_pubkey_oid) - 1 ||
+        memcmp(alg.p, ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
         return -6;
     }
-    if (param.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_secp256r1_oid) - 1 ||
-        memcmp(param.MBEDTLS_CONTEXT_MEMBER(p), ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
+    if (param.len != sizeof(ec_secp256r1_oid) - 1 ||
+        memcmp(param.p, ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
         return -7;
     }
 #endif
@@ -283,8 +283,8 @@
     }
 
 #if !defined(MCUBOOT_USE_PSA_CRYPTO)
-    if (alg.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_pubkey_oid) - 1 ||
-        memcmp(alg.MBEDTLS_CONTEXT_MEMBER(p), ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
+    if (alg.len != sizeof(ec_pubkey_oid) - 1 ||
+        memcmp(alg.p, ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
         return -5;
     }
 #endif
diff --git a/boot/bootutil/src/image_ec256.c b/boot/bootutil/src/image_ec256.c
index 4d67063..07172e6 100644
--- a/boot/bootutil/src/image_ec256.c
+++ b/boot/bootutil/src/image_ec256.c
@@ -70,33 +70,35 @@
     if (mbedtls_asn1_get_alg(p, end, &alg, &param)) {
         return -2;
     }
-    if (alg.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_pubkey_oid) - 1 ||
-      memcmp(alg.MBEDTLS_CONTEXT_MEMBER(p), ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
+
+    else if (alg.len != sizeof(ec_pubkey_oid) - 1 ||
+      memcmp(alg.p, ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
         return -3;
     }
-    if (param.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_secp256r1_oid) - 1 ||
-      memcmp(param.MBEDTLS_CONTEXT_MEMBER(p), ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
+
+    else if (param.len != sizeof(ec_secp256r1_oid) - 1 ||
+      memcmp(param.p, ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
         return -4;
     }
 
-    if (mbedtls_ecp_group_load(&ctx->MBEDTLS_CONTEXT_MEMBER(grp), MBEDTLS_ECP_DP_SECP256R1)) {
+    else if (mbedtls_ecp_group_load(&ctx->MBEDTLS_CONTEXT_MEMBER(grp), MBEDTLS_ECP_DP_SECP256R1)) {
         return -5;
     }
 
-    if (mbedtls_asn1_get_bitstring_null(p, end, &len)) {
+    else if (mbedtls_asn1_get_bitstring_null(p, end, &len)) {
         return -6;
     }
-    if (*p + len != end) {
+    else if (*p + len != end) {
         return -7;
     }
 
-    if (mbedtls_ecp_point_read_binary(&ctx->MBEDTLS_CONTEXT_MEMBER(grp),
+    else if (mbedtls_ecp_point_read_binary(&ctx->MBEDTLS_CONTEXT_MEMBER(grp),
                                       &ctx->MBEDTLS_CONTEXT_MEMBER(Q),
                                       *p, end - *p)) {
         return -8;
     }
 
-    if (mbedtls_ecp_check_pubkey(&ctx->MBEDTLS_CONTEXT_MEMBER(grp),
+    else if (mbedtls_ecp_check_pubkey(&ctx->MBEDTLS_CONTEXT_MEMBER(grp),
                                  &ctx->MBEDTLS_CONTEXT_MEMBER(Q))) {
         return -9;
     }
@@ -120,17 +122,28 @@
     if (mbedtls_asn1_get_alg(cp, end, &alg, &param)) {
         return -2;
     }
-
-    if (alg.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_pubkey_oid) - 1 ||
-        memcmp(alg.MBEDTLS_CONTEXT_MEMBER(p), ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
+#ifdef PSE84
+    /* id-ecPublicKey (RFC5480) */
+    if (alg.len != sizeof(ec_pubkey_oid) - 1 ||
+        memcmp(alg.p, ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
         return -3;
     }
     /* namedCurve (RFC5480) */
-    if (param.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_secp256r1_oid) - 1 ||
-        memcmp(param.MBEDTLS_CONTEXT_MEMBER(p), ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
+    if (param.len != sizeof(ec_secp256r1_oid) - 1 ||
+        memcmp(param.p, ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
         return -4;
     }
-
+#else
+    if (alg.len != sizeof(ec_pubkey_oid) - 1 ||
+        memcmp(alg.p, ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
+        return -3;
+    }
+    /* namedCurve (RFC5480) */
+    if (param.len != sizeof(ec_secp256r1_oid) - 1 ||
+        memcmp(param.p, ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
+        return -4;
+    }
+#endif
     /* ECPoint (RFC5480) */
     if (mbedtls_asn1_get_bitstring_null(cp, end, &len)) {
         return -6;
diff --git a/boot/bootutil/src/image_ed25519.c b/boot/bootutil/src/image_ed25519.c
index 47fd5ba..2eb2774 100644
--- a/boot/bootutil/src/image_ed25519.c
+++ b/boot/bootutil/src/image_ed25519.c
@@ -45,8 +45,8 @@
         return -2;
     }
 
-    if (alg.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ed25519_pubkey_oid) - 1 ||
-        memcmp(alg.MBEDTLS_CONTEXT_MEMBER(p), ed25519_pubkey_oid, sizeof(ed25519_pubkey_oid) - 1)) {
+    if (alg.len != sizeof(ed25519_pubkey_oid) - 1 ||
+        memcmp(alg.p, ed25519_pubkey_oid, sizeof(ed25519_pubkey_oid) - 1)) {
         return -3;
     }
 
diff --git a/boot/bootutil/src/image_validate.c b/boot/bootutil/src/image_validate.c
index 79dc2fd..e95ce61 100644
--- a/boot/bootutil/src/image_validate.c
+++ b/boot/bootutil/src/image_validate.c
@@ -4,7 +4,7 @@
  * Copyright (c) 2017-2019 Linaro LTD
  * Copyright (c) 2016-2019 JUUL Labs
  * Copyright (c) 2019-2020 Arm Limited
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Original license:
  *
diff --git a/boot/bootutil/src/loader.c b/boot/bootutil/src/loader.c
index ba5350e..e441b56 100644
--- a/boot/bootutil/src/loader.c
+++ b/boot/bootutil/src/loader.c
@@ -4,6 +4,7 @@
  * Copyright (c) 2016-2020 Linaro LTD
  * Copyright (c) 2016-2019 JUUL Labs
  * Copyright (c) 2019-2021 Arm Limited
+ * Copyright (c) 2021-2025 Cypress Semiconductor Corporation (an Infineon company)
  *
  * Original license:
  *
@@ -241,12 +242,11 @@
     }
 }
 
-#if !defined(MCUBOOT_DIRECT_XIP)
 /*
  * Compute the total size of the given image.  Includes the size of
  * the TLVs.
  */
-#if !defined(MCUBOOT_OVERWRITE_ONLY) || defined(MCUBOOT_OVERWRITE_ONLY_FAST) || defined(MCUBOOT_RAM_LOAD)
+#if defined(MCUBOOT_DIRECT_XIP) || !defined(MCUBOOT_OVERWRITE_ONLY) || defined(MCUBOOT_OVERWRITE_ONLY_FAST) || defined(MCUBOOT_RAM_LOAD)
 static int
 boot_read_image_size(struct boot_loader_state *state, int slot, uint32_t *size)
 {
@@ -526,7 +526,7 @@
 #endif /* MCUBOOT_SWAP_USING_STATUS */
 
 
-#endif /* !MCUBOOT_DIRECT_XIP */
+
 
 /*
  * Validate image hash/signature and optionally the security counter in a slot.
@@ -558,7 +558,11 @@
 /* In the case of ram loading the image has already been decrypted as it is
  * decrypted when copied in ram */
 #if defined(MCUBOOT_ENC_IMAGES)
+#if defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)
+    if (MUST_DECRYPT(fap, image_index, hdr)) {
+#else
     if (MUST_DECRYPT(fap, image_index, hdr) && !IS_RAM_BOOTABLE(hdr)) {
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
         int rc = flash_area_id_to_multi_image_slot(image_index, fap->fa_id);
         if (rc < 0) {
             FIH_RET(fih_rc);
@@ -796,7 +800,7 @@
     f_off = boot_img_slot_off(state, active_slot);
 
     if (hdr->ih_flags & IMAGE_F_ROM_FIXED && hdr->ih_load_addr != f_off) {
-        BOOT_LOG_WRN("Image in %s slot at 0x%" PRIx32
+        BOOT_LOG_DBG("Image in %s slot at 0x%" PRIx32
                      " has been built for offset 0x%" PRIx32 ", skipping",
                      active_slot == 0 ? "primary" : "secondary", f_off,
                      hdr->ih_load_addr);
@@ -839,7 +843,7 @@
     hdr = boot_img_hdr(state, slot);
 
 #ifdef MCUBOOT_ENC_IMAGES_XIP_MULTI
-/* In the XIP encryption multi image case if XIP encryption is turned on then 
+/* In the XIP encryption multi image case if XIP encryption is turned on then
  * the boot_check_header_erased() can't detect erased header correctly for the second and next images
  * because erased value is not read as 0xFF.
  * So, the bootloader has one option only to detect correctness of image header: it is
@@ -956,6 +960,102 @@
     FIH_RET(fih_rc);
 }
 
+/*
+ * Check that there is a valid image in a slot
+ *
+ * @returns
+ *         FIH_SUCCESS                      if image was successfully validated
+ *         1 (or its fih_int encoded form)  if no bootloable image was found
+ *         FIH_FAILURE                      on any errors
+ */
+static fih_int
+boot_soft_validate_slot(struct boot_loader_state *state, int slot,
+                   struct boot_status *bs)
+{
+    const struct flash_area *fap = NULL;
+    struct image_header *hdr;
+    int area_id;
+    fih_int fih_rc = FIH_FAILURE;
+    int rc;
+
+    area_id = flash_area_id_from_multi_image_slot(BOOT_CURR_IMG(state), slot);
+    rc = flash_area_open(area_id, &fap);
+    if (rc != 0) {
+        FIH_RET(fih_rc);
+    }
+
+    BOOT_LOG_DBG("> boot_validate_slot: fa_id = %u", (unsigned)fap->fa_id);
+
+    hdr = boot_img_hdr(state, slot);
+
+    if (hdr->ih_magic != IMAGE_MAGIC) {
+        FIH_RET(fih_rc);
+    }
+
+#if defined(MCUBOOT_OVERWRITE_ONLY) && defined(MCUBOOT_DOWNGRADE_PREVENTION)
+    if (slot != BOOT_PRIMARY_SLOT) {
+        /* Check if version of secondary slot is sufficient */
+        rc = boot_version_cmp(
+                &boot_img_hdr(state, BOOT_SECONDARY_SLOT)->ih_ver,
+                &boot_img_hdr(state, BOOT_PRIMARY_SLOT)->ih_ver);
+        if (rc < 0 && boot_check_header_erased(state, BOOT_PRIMARY_SLOT)) {
+            BOOT_LOG_ERR("insufficient version in secondary slot");
+            fih_rc = FIH_SWAP_TYPE_NONE;
+            goto out;
+        }
+    }
+#endif
+    BOOT_HOOK_CALL_FIH(boot_image_check_hook, FIH_INT_INIT(BOOT_HOOK_REGULAR),
+                       fih_rc, BOOT_CURR_IMG(state), slot);
+    if (fih_eq(fih_rc, FIH_INT_INIT(BOOT_HOOK_REGULAR)))
+    {
+        FIH_CALL(boot_image_check, fih_rc, state, hdr, fap, bs);
+    }
+    if (!boot_is_header_valid(hdr, fap) || !fih_eq(fih_rc, FIH_SUCCESS)) {
+        if ((slot != BOOT_PRIMARY_SLOT) || ARE_SLOTS_EQUIVALENT()) {
+            BOOT_LOG_DBG(" * Image in the secondary slot is invalid.");
+        }
+#if !defined(__BOOTSIM__)
+        BOOT_LOG_DBG("Image in the %s slot is not valid!",
+                     (slot == BOOT_PRIMARY_SLOT) ? "primary" : "secondary");
+#endif
+        fih_rc = FIH_SWAP_TYPE_NONE;
+        goto out;
+    }
+
+#if MCUBOOT_IMAGE_NUMBER > 1 && !defined(MCUBOOT_ENC_IMAGES) && defined(MCUBOOT_VERIFY_IMG_ADDRESS)
+    /* Verify that the image in the secondary slot has a reset address
+     * located in the primary slot. This is done to avoid users incorrectly
+     * overwriting an application written to the incorrect slot.
+     * This feature is only supported by ARM platforms.
+     */
+    if (area_id == FLASH_AREA_IMAGE_SECONDARY(BOOT_CURR_IMG(state))) {
+        const struct flash_area *pri_fa = BOOT_IMG_AREA(state, BOOT_PRIMARY_SLOT);
+        struct image_header *secondary_hdr = boot_img_hdr(state, slot);
+        uint32_t reset_value = 0;
+        uint32_t reset_addr = secondary_hdr->ih_hdr_size + sizeof(reset_value);
+
+        rc = flash_area_read(fap, reset_addr, &reset_value, sizeof(reset_value));
+        if (rc != 0) {
+            fih_rc = FIH_INT_INIT(1);
+            goto out;
+        }
+
+        if (reset_value < pri_fa->fa_off || reset_value> (pri_fa->fa_off + pri_fa->fa_size)) {
+            BOOT_LOG_ERR("Reset address of image in secondary slot is not in the primary slot");
+
+            fih_rc = FIH_INT_INIT(1);
+            goto out;
+        }
+    }
+#endif
+
+out:
+    flash_area_close(fap);
+    BOOT_LOG_DBG("< boot_validate_slot: fa_id = %u", (unsigned)fap->fa_id);
+    FIH_RET(fih_rc);
+}
+
 #ifdef MCUBOOT_HW_ROLLBACK_PROT
 /**
  * Updates the stored security counter value with the image's security counter
@@ -1579,7 +1679,7 @@
         switch (BOOT_SWAP_TYPE(state)) {
         case BOOT_SWAP_TYPE_TEST:
         case BOOT_SWAP_TYPE_PERM:
-            /* BOOT_SWAP_TYPE_NONE has been changed to BOOT_SWAP_TYPE_FAIL to avoid 
+            /* BOOT_SWAP_TYPE_NONE has been changed to BOOT_SWAP_TYPE_FAIL to avoid
              * reversion again after device reset */
             BOOT_SWAP_TYPE(state) = BOOT_SWAP_TYPE_FAIL;
             break;
@@ -1713,9 +1813,9 @@
              */
             for (int idx = 0; idx < BOOT_IMAGE_NUMBER; idx++) {
                 BOOT_CURR_IMG(state) = idx;
-                /*When dependency is not satisfied, the boot_verify_slot_dependencies_flash 
+                /*When dependency is not satisfied, the boot_verify_slot_dependencies_flash
                 changes swap type to BOOT_SWAP_TYPE_REVERT to have ability of reversion of a
-                dependent image. That's why BOOT_SWAP_TYPE_REVERT must not be changed to 
+                dependent image. That's why BOOT_SWAP_TYPE_REVERT must not be changed to
                 BOOT_SWAP_TYPE_NONE */
                 if (BOOT_SWAP_TYPE(state) != BOOT_SWAP_TYPE_REVERT) {
                     BOOT_SWAP_TYPE(state) = BOOT_SWAP_TYPE_NONE;
@@ -2249,7 +2349,19 @@
             continue;
         }
 #endif
+#else
+    /* Dependency is set and encryption is enabled. In this case we cannot 
+     * reread the first image header because it is encrypted
+     */
+#if defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)
+#if BOOT_IMAGE_NUMBER > 1
+        if ((BOOT_CURR_IMG(state) == 0) && (state->img_mask[BOOT_CURR_IMG(state)] == true)) {
+            continue;
+        }
 #endif
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
+#endif /* !defined(MCUBOOT_DEPENDENCY_CHECK) */
+
 #if defined(MCUBOOT_ENC_IMAGES) && (BOOT_IMAGE_NUMBER > 1)
         /* The keys used for encryption may no longer be valid (could belong to
          * another images). Therefore, mark them as invalid to force their reload
@@ -2410,7 +2522,11 @@
 
 #ifdef MCUBOOT_VALIDATE_PRIMARY_SLOT 
 #if defined(MCUBOOT_RAM_LOAD) /* to fix Rule 14.3 violation */
+#if defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)
+        if (true) {
+#else
         if(IS_RAM_BOOTABLE(boot_img_hdr(state, BOOT_PRIMARY_SLOT)) == false) {
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
 #endif /* defined(MCUBOOT_RAM_LOAD) */
             FIH_CALL(boot_validate_slot, fih_rc, state, BOOT_PRIMARY_SLOT, &bs);
             if (!fih_eq(fih_rc, FIH_SUCCESS)) {
@@ -2598,8 +2714,18 @@
             assert(rc == 0);
         }
 
+#if defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)
+    if (BOOT_CURR_IMG(state) == 0) {
+        SMIF_SET_CRYPTO_MODE(Disable);
+    }
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
         /* Attempt to read an image header from each slot. */
         rc = boot_read_image_headers(state, false, NULL);
+#if defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)
+    if (BOOT_CURR_IMG(state) == 0) {
+        SMIF_SET_CRYPTO_MODE(Enable);
+    }
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
         if (rc != 0) {
             BOOT_LOG_WRN("Failed reading image headers.");
             return rc;
@@ -2698,6 +2824,28 @@
 #endif
 
 #if defined(MCUBOOT_DIRECT_XIP) && defined(MCUBOOT_DIRECT_XIP_REVERT)
+static int
+boot_get_swap_state(struct boot_loader_state *state, uint32_t active_slot, struct boot_swap_state* active_swap_state)
+{
+    (void)state;
+    int rc = -1;
+
+    const struct flash_area *fap;
+    int fa_id;
+
+    fa_id = flash_area_id_from_multi_image_slot(BOOT_CURR_IMG(state), active_slot);
+    rc = flash_area_open(fa_id, &fap);
+
+    if (rc == 0)
+    {
+        (void)memset(active_swap_state, 0, sizeof(struct boot_swap_state));
+        
+        rc = boot_read_swap_state(fap, active_swap_state);
+    }
+
+    return rc;
+}
+
 /**
  * Checks whether the active slot of the current image was previously selected
  * to run. Erases the image if it was selected but its execution failed,
@@ -2720,52 +2868,67 @@
 
     fa_id = flash_area_id_from_multi_image_slot(BOOT_CURR_IMG(state), active_slot);
     rc = flash_area_open(fa_id, &fap);
-    assert(rc == 0);
 
     active_swap_state = &(state->slot_usage[BOOT_CURR_IMG(state)].swap_state);
 
     (void)memset(active_swap_state, 0, sizeof(struct boot_swap_state));
     rc = boot_read_swap_state(fap, active_swap_state);
-    assert(rc == 0);
 
-    if (active_swap_state->magic != BOOT_MAGIC_GOOD ||
-        (active_swap_state->copy_done == BOOT_FLAG_SET &&
-         active_swap_state->image_ok  != BOOT_FLAG_SET)) {
+    if ((active_swap_state->copy_done == BOOT_FLAG_SET &&
+        active_swap_state->image_ok  != BOOT_FLAG_SET)) {
         /*
-         * A reboot happened without the image being confirmed at
-         * runtime or its trailer is corrupted/invalid. Erase the image
-         * to prevent it from being selected again on the next reboot.
-         */
+        * A reboot happened without the image being confirmed at
+        * runtime or its trailer is corrupted/invalid. Erase the image
+        * to prevent it from being selected again on the next reboot.
+        */
         BOOT_LOG_DBG("Erasing faulty image in the %s slot.",
-                     (active_slot == BOOT_PRIMARY_SLOT) ? "primary" : "secondary");
+                    (active_slot == BOOT_PRIMARY_SLOT) ? "primary" : "secondary");
         rc = flash_area_erase(fap, 0, flash_area_get_size(fap));
         assert(rc == 0);
 
-        flash_area_close(fap);
         rc = -1;
     } else {
-        if (active_swap_state->copy_done != BOOT_FLAG_SET) {
-            if (active_swap_state->copy_done == BOOT_FLAG_BAD) {
-                BOOT_LOG_DBG("The copy_done flag had an unexpected value. Its "
-                             "value was neither 'set' nor 'unset', but 'bad'.");
-            }
-            /*
-             * Set the copy_done flag, indicating that the image has been
-             * selected to boot. It can be set in advance, before even
-             * validating the image, because in case the validation fails, the
-             * entire image slot will be erased (including the trailer).
-             */
-            rc = boot_write_copy_done(fap);
-            if (rc != 0) {
-                BOOT_LOG_WRN("Failed to set copy_done flag of the image in "
-                             "the %s slot.", (active_slot == BOOT_PRIMARY_SLOT) ?
-                             "primary" : "secondary");
-                rc = 0;
+        struct image_header *hdr = boot_img_hdr(state, active_slot);
+
+        if (boot_is_header_valid(hdr, fap))
+        {
+            if (active_swap_state->copy_done != BOOT_FLAG_SET) {
+                if (active_swap_state->copy_done == BOOT_FLAG_BAD) {
+                    BOOT_LOG_DBG("The copy_done flag had an unexpected value. Its "
+                                "value was neither 'set' nor 'unset', but 'bad'.");
+                }
+
+                bool img_ok = (active_swap_state->image_ok == BOOT_FLAG_SET);
+
+                uint32_t off = flash_area_get_size(fap) - BOOT_MAX_ALIGN;
+
+                flash_area_erase(fap, off, BOOT_MAX_ALIGN);
+
+                /*
+                * Set the copy_done flag, indicating that the image has been
+                * selected to boot. It can be set in advance, before even
+                * validating the image, because in case the validation fails, the
+                * entire image slot will be erased (including the trailer).
+                */
+                rc = boot_write_copy_done(fap);
+
+                rc |= boot_write_magic(fap);
+
+                if (img_ok) {
+                    rc |= boot_write_image_ok(fap);
+                }
+
+                if (rc != 0) {
+                    BOOT_LOG_WRN("Failed to set copy_done flag of the image in "
+                                "the %s slot.", (active_slot == BOOT_PRIMARY_SLOT) ?
+                                "primary" : "secondary");
+                    rc = 0;
+                }
             }
         }
-        flash_area_close(fap);
     }
-
+    
+    flash_area_close(fap);
     return rc;
 }
 #endif /* MCUBOOT_DIRECT_XIP && MCUBOOT_DIRECT_XIP_REVERT */
@@ -2855,19 +3018,21 @@
      * 4. The image is authenticated in RAM.
      */
     const struct flash_area *fap_src = NULL;
+    uint32_t tlv_off;
+    int area_id;
+    int rc;
+    uint8_t image_index;
+    uint8_t * ram_dst = (void *)(IMAGE_RAM_BASE + img_dst);
+#if !defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)
     struct boot_status bs;
     uint32_t blk_off;
-    uint32_t tlv_off;
     uint32_t blk_sz;
     uint32_t bytes_copied = hdr->ih_hdr_size;
     uint32_t chunk_sz;
     uint32_t max_sz = 1024;
     uint16_t idx;
-    uint8_t image_index;
     uint8_t * cur_dst;
-    int area_id;
-    int rc;
-    uint8_t * ram_dst = (void *)(IMAGE_RAM_BASE + img_dst);
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
 
     image_index = BOOT_CURR_IMG(state);
     area_id = flash_area_id_from_multi_image_slot(BOOT_CURR_IMG(state), slot);
@@ -2883,7 +3048,7 @@
     if (rc != 0) {
         goto done;
     }
-
+#if !defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)
     rc = boot_enc_load(BOOT_CURR_ENC(state), image_index, hdr, fap_src, &bs);
     if (rc < 0) {
         goto done;
@@ -2923,6 +3088,25 @@
 
         bytes_copied += chunk_sz;
     }
+#else
+    (void)image_index;
+    /* Special case for the first image because header and TLV are not encrypted */
+    SMIF_CRYPTO_SECTION(Disable) {
+        /* Copy header to RAM */
+        rc = flash_area_read(fap_src, 0, ram_dst, hdr->ih_hdr_size);
+    }
+    if (0 != rc) {
+        goto done;
+    }
+
+    SMIF_CRYPTO_SECTION(Disable) {
+        /* Copy TLV ro RAM */
+        rc = flash_area_read(fap_src, tlv_off, ram_dst + tlv_off, src_sz - tlv_off);
+    }
+    if (0 != rc) {
+        goto done;
+    }
+#endif /* !defined(MCUBOOT_ENC_IMAGES_XIP_MULTI) */
     rc = 0;
 
 done:
@@ -3067,7 +3251,17 @@
 
         img_dst = hdr->ih_load_addr;
 
+#if defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)
+    if (BOOT_CURR_IMG(state) == 0) {
+        SMIF_SET_CRYPTO_MODE(Disable);
+    }
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
         rc = boot_read_image_size(state, active_slot, &img_sz);
+#if defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)
+    if (BOOT_CURR_IMG(state) == 0) {
+        SMIF_SET_CRYPTO_MODE(Enable);
+    }
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
         if (rc != 0) {
             return rc;
         }
@@ -3174,6 +3368,51 @@
 
     return rc;
 }
+
+/**
+ * Switch to image in SRAM
+ *
+ * @param  state    Boot loader status information.
+ * @param  slot     The flash slot of the image to be erased.
+ *
+ * @return          0 on success; nonzero on failure.
+ */
+static inline int
+boot_switch_to_sram_image(struct boot_loader_state *state, uint32_t slot)
+{
+    int area_id = -1;
+    int rc = -1;
+    struct flash_area *fap = NULL;
+    struct image_header *hdr = NULL;
+
+    (void)state;
+
+    hdr = boot_img_hdr(state, slot);
+    BOOT_LOG_INF("Image %u slot %" PRIu32 " switch to SRAM",
+                 (unsigned)BOOT_CURR_IMG(state), slot);
+    area_id = flash_area_id_from_multi_image_slot(BOOT_CURR_IMG(state), slot);
+    rc = flash_area_open(area_id, (const struct flash_area **)&fap);
+
+    if (rc == 0) {
+        /* Switch to image SRAM */
+        
+        if (IS_RAM_BOOTABLE_SECURE(hdr)) {
+            fap->fa_device_id = INTERNAL_S_SRAM;
+        }
+        else {
+            fap->fa_device_id = INTERNAL_NS_SRAM;
+        }
+
+        if (hdr->ih_load_addr < flash_devices[fap->fa_device_id].address) {
+            return -1;
+        }
+        fap->fa_off = hdr->ih_load_addr - flash_devices[fap->fa_device_id].address;
+        /* Image is already decrepted, so clear encrypted flags in the header */
+        CLEAR_ENCRYPT_FLAGS(hdr);
+    }
+
+    return rc;
+}
 #endif /* MCUBOOT_RAM_LOAD */
 
 #if (BOOT_IMAGE_NUMBER > 1)
@@ -3323,6 +3562,141 @@
 #endif /* (MCUBOOT_DEPENDENCY_CHECK) */
 #endif /* (BOOT_IMAGE_NUMBER > 1) */
 
+static const uint8_t slot_table[] = {BOOT_PRIMARY_SLOT, BOOT_SECONDARY_SLOT};
+
+/**
+ * Tries to load a slot for all the images with validation.
+ *
+ * @param  state        Boot loader status information.
+ *
+ * @return              0 on success; nonzero on failure.
+ */
+fih_int
+boot_load_and_validate_images_xip(struct boot_loader_state *state)
+{
+    uint32_t active_slot = NO_ACTIVE_SLOT;
+    int rc = -1;
+    fih_int fih_rc = FIH_FAILURE;
+
+    struct boot_swap_state swap_state[BOOT_NUM_SLOTS];
+
+    /* Go over all the images and try to load one */
+    IMAGES_ITER(BOOT_CURR_IMG(state))
+    {
+#if BOOT_IMAGE_NUMBER > 1
+        if (state->img_mask[BOOT_CURR_IMG(state)]) {
+            continue;
+        }
+#endif
+
+        for (uint32_t i = 0; i < BOOT_NUM_SLOTS; i++) {
+            active_slot = slot_table[i];
+
+            /* Save the number of the active slot. */
+            state->slot_usage[BOOT_CURR_IMG(state)].active_slot = active_slot;
+
+            rc = boot_rom_address_check(state);
+            if (rc != 0) {
+                /* The image is placed in an unsuitable slot. */
+                state->slot_usage[BOOT_CURR_IMG(state)].slot_available[active_slot] = false;
+                state->slot_usage[BOOT_CURR_IMG(state)].active_slot = NO_ACTIVE_SLOT;
+                continue;
+            }
+
+
+            rc = boot_get_swap_state(state, active_slot, &swap_state[i]);
+
+            if (rc == 0) {
+                /* Proceed with inactive state */
+                if (swap_state[i].image_inactive == BOOT_FLAG_SET) {
+                    state->slot_usage[BOOT_CURR_IMG(state)].slot_available[active_slot] = false;
+                    state->slot_usage[BOOT_CURR_IMG(state)].active_slot = NO_ACTIVE_SLOT;
+
+
+                    if (swap_state[i].copy_done == BOOT_FLAG_SET && swap_state[i].image_ok == BOOT_FLAG_SET)
+                    {
+                        state->slot_usage[BOOT_CURR_IMG(state)].slot_validated[active_slot] = true;
+                    }
+                    else
+                    {
+                        FIH_CALL(boot_validate_slot, fih_rc, state, active_slot, NULL);
+                        if (fih_eq(fih_rc, FIH_SUCCESS)) {
+                            state->slot_usage[BOOT_CURR_IMG(state)].slot_validated[active_slot] = true;
+                        }
+                    }
+                    continue;
+
+                } else {
+                    /* Proceed with revert state */
+                    if (boot_select_or_erase(state) != 0) {
+                        /* The selected image slot has been erased. */
+                        state->slot_usage[BOOT_CURR_IMG(state)].slot_available[active_slot] = false;
+                        state->slot_usage[BOOT_CURR_IMG(state)].active_slot = NO_ACTIVE_SLOT;
+                        continue;
+                    }
+                }
+            }
+        }
+
+        active_slot = NO_ACTIVE_SLOT;
+
+        for (int i = 0; i < BOOT_NUM_SLOTS; i++) {
+            if (state->slot_usage[BOOT_CURR_IMG(state)].slot_available[i] == true) {
+                if (swap_state[i].copy_done == BOOT_FLAG_UNSET)
+                {
+                    active_slot = i;
+                    break;
+                }
+            }
+        }
+
+        if (active_slot == NO_ACTIVE_SLOT)
+        {
+            active_slot = find_slot_with_highest_version(state);
+        }
+
+        if (active_slot != NO_ACTIVE_SLOT)
+        {
+            #ifdef MCUBOOT_VALIDATE_PRIMARY_SLOT
+                FIH_CALL(boot_validate_slot, fih_rc, state, active_slot, NULL);
+            #else
+                fih_rc = FIH_SUCCESS;
+            #endif
+            
+            if (fih_eq(fih_rc, FIH_SUCCESS)) {
+                state->slot_usage[BOOT_CURR_IMG(state)].slot_validated[active_slot] = true;
+                state->slot_usage[BOOT_CURR_IMG(state)].active_slot = active_slot;
+            }
+        }
+        else
+        {
+            bool dead_state = true;
+            for (int i = 0; i < BOOT_NUM_SLOTS; i++) {
+                if (state->slot_usage[BOOT_CURR_IMG(state)].slot_available[i] == false) {
+                    dead_state = false;
+                    break;
+                }
+            }
+        
+            if (dead_state == false) {
+                for (int i = 0; i < BOOT_NUM_SLOTS; i++) {
+                    if (state->slot_usage[BOOT_CURR_IMG(state)].slot_validated[i] == true) {
+                        state->slot_usage[BOOT_CURR_IMG(state)].slot_available[i] = true;
+                        state->slot_usage[BOOT_CURR_IMG(state)].active_slot = i;
+
+                        fih_rc = FIH_SUCCESS;
+        
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+
+    FIH_RET(fih_rc);
+}
+
 /**
  * Tries to load a slot for all the images with validation.
  *
@@ -3335,9 +3709,7 @@
 {
     uint32_t active_slot;
     int rc;
-#ifdef MCUBOOT_VALIDATE_PRIMARY_SLOT
     fih_int fih_rc = FIH_FAILURE;
-#endif
 
     /* Go over all the images and try to load one */
     IMAGES_ITER(BOOT_CURR_IMG(state)) {
@@ -3351,7 +3723,7 @@
                 /* A slot is already active, go to next image. */
                 break;
             }
-            
+
             /* Ram load assumes to find the highest version of available slots
              * and load it. Also dependency check feature verifies version
              * of first slot of dependent image and assumes to load from the
@@ -3400,6 +3772,12 @@
                 /* The selected image slot has been erased. */
                 state->slot_usage[BOOT_CURR_IMG(state)].slot_available[active_slot] = false;
                 state->slot_usage[BOOT_CURR_IMG(state)].active_slot = NO_ACTIVE_SLOT;
+
+                FIH_CALL(boot_validate_slot, fih_rc, state, active_slot, NULL);
+                if (fih_eq(fih_rc, FIH_SUCCESS)) {
+                    state->slot_usage[BOOT_CURR_IMG(state)].slot_validated[active_slot] = true;
+                }
+
                 continue;
             }
 #endif /* MCUBOOT_DIRECT_XIP_REVERT */
@@ -3423,9 +3801,14 @@
                                                           (unsigned)BOOT_CURR_IMG(state));
                 FIH_RET(FIH_FAILURE);
             }
+
+            if (boot_switch_to_sram_image(state, active_slot) != 0) {
+                FIH_RET(FIH_FAILURE);
+            }
 #endif /* MCUBOOT_RAM_LOAD */
 #ifdef MCUBOOT_VALIDATE_PRIMARY_SLOT
             FIH_CALL(boot_validate_slot, fih_rc, state, active_slot, NULL);
+
             if (!fih_eq(fih_rc, FIH_SUCCESS)) {
                 /* Image is invalid. */
 #ifdef MCUBOOT_RAM_LOAD
@@ -3436,10 +3819,10 @@
                 /* Since active_slot is set BOOT_PRIMARY_SLOT only, then after its deletion
                  * no sense to check BOOT_SECONDARY_SLOT. So go outside with an error */
                 BOOT_LOG_ERR("BOOT slot of image %u has been removed from SRAM",
-                                                           (unsigned)BOOT_CURR_IMG(state));
+                                                            (unsigned)BOOT_CURR_IMG(state));
                 FIH_RET(FIH_FAILURE);
             }
-#endif
+#endif /* MCUBOOT_VALIDATE_PRIMARY_SLOT */
             /* Valid image loaded from a slot, go to next image. */
             break;
         }
@@ -3508,7 +3891,12 @@
 #if (BOOT_IMAGE_NUMBER > 1)
     while (true) {
 #endif
+
+#if defined(MCUBOOT_DIRECT_XIP)
+        FIH_CALL(boot_load_and_validate_images_xip, fih_rc, state);
+#else
         FIH_CALL(boot_load_and_validate_images, fih_rc, state);
+#endif
         if (!fih_eq(fih_rc, FIH_SUCCESS)) {
             goto out;
         }
@@ -3580,7 +3968,11 @@
 
     boot_state_clear(NULL);
 
+#if defined(MCUBOOT_DIRECT_XIP) || defined(MCUBOOT_RAM_LOAD)
+    FIH_CALL(context_boot_go_ram, fih_rc, &boot_data, rsp);
+#else
     FIH_CALL(context_boot_go_flash, fih_rc, &boot_data, rsp);
+#endif
     FIH_RET(fih_rc);
 }
 
@@ -3613,7 +4005,7 @@
     FIH_RET(fih_rc);
 }
 
-#if defined(MCUBOOT_RAM_LOAD)
+#if defined(MCUBOOT_RAM_LOAD) || defined(MCUBOOT_DIRECT_XIP)
 /**
  * Prepares the booting process, considering only a single image. This function
  * moves images around in flash as appropriate, and tells you what address to
@@ -3661,3 +4053,343 @@
         (void)memset(&boot_data, 0, sizeof(struct boot_loader_state));
     }
 }
+
+fih_int
+context_validate_slot_flash(struct boot_loader_state *state, int image_slot)
+{
+    fih_int fih_rc = FIH_FAILURE;
+    
+    struct boot_status bs = {0};
+    int rc = boot_read_image_headers(state, false, &bs);
+    
+    if (rc == 0) {
+        FIH_CALL(boot_soft_validate_slot, fih_rc, state, image_slot, &bs);
+    }
+
+    FIH_RET(fih_rc);
+}
+
+/**
+ * Prepares the booting process, considering only a single image. This function
+ * moves images around in flash as appropriate, and tells you what address to
+ * boot from.
+ *
+ * @param rsp                   On success, indicates how booting should occur.
+ *
+ * @param image_id              The image ID to prepare the boot process for.
+ *
+ * @return                      FIH_SUCCESS on success; nonzero on failure.
+ */
+fih_int
+boot_validate_slot_for_image_id(uint32_t image_id, uint32_t slot_id)
+{
+    fih_int fih_rc = FIH_FAILURE;
+
+    if (image_id >= BOOT_IMAGE_NUMBER) {
+        FIH_RET(FIH_FAILURE);
+    }
+
+#if BOOT_IMAGE_NUMBER > 1
+    (void)memset(&boot_data.img_mask, 1, BOOT_IMAGE_NUMBER);
+    boot_data.img_mask[image_id] = 0;
+#endif
+
+    FIH_CALL(context_validate_slot_flash, fih_rc, &boot_data, slot_id);
+    FIH_RET(fih_rc);
+}
+
+int boot_get_image_version(uint32_t image_id, uint32_t slot_id, struct image_version *image_version)
+{
+    int rc = -1;
+    struct boot_status bs = {0};
+
+    if (image_id < BOOT_IMAGE_NUMBER) {
+#if BOOT_IMAGE_NUMBER > 1
+        (void)memset(&boot_data.img_mask, 1, BOOT_IMAGE_NUMBER);
+        boot_data.img_mask[image_id] = 0;
+#endif
+
+        if (boot_read_image_headers(&boot_data, false, &bs) == 0) {
+            struct image_header *hdr = boot_img_hdr(&boot_data, slot_id);
+
+            if (hdr->ih_magic == IMAGE_MAGIC) {
+                *image_version = hdr->ih_ver;
+                rc = 0;
+            } else {
+                /* Image magic is not valid - fill with flash area erase value */
+                const struct flash_area *fa = BOOT_IMG_AREA(&boot_data, slot_id);
+                memset(image_version, flash_area_erased_val(fa), sizeof(struct image_version));
+            }
+        }
+    }
+    return rc;
+}
+
+#if defined(MCUBOOT_DIRECT_XIP)
+
+int boot_read_image_header(struct boot_loader_state *state, int slot,
+                           struct image_header *out_hdr, struct boot_status *bs)
+{
+    (void) bs;
+    (void) state;
+    const struct flash_area *fap = NULL;
+    int rc = -1;
+    int area_id = flash_area_id_from_multi_image_slot(BOOT_CURR_IMG(state), slot);
+
+    do {
+        rc = flash_area_open(area_id, &fap);
+        if (rc != 0) {
+            rc = BOOT_EFLASH;
+            break;
+        }
+
+        rc = flash_area_read(fap, 0, out_hdr, sizeof *out_hdr);
+        if (rc < 0) {
+            rc = BOOT_EFLASH;
+            break;
+        }
+
+        flash_area_close(fap);
+    } while (false);
+
+    return rc;
+}
+
+int 
+boot_set_inactive_slot(uint32_t image_id, uint32_t slot_id)
+{
+    const struct flash_area *fap = NULL;
+    int fa_id = flash_area_id_from_multi_image_slot(image_id, slot_id);
+    int rc = flash_area_open(fa_id, &fap);
+
+    if (rc == 0)
+    {
+        rc = boot_write_image_inv(fap);
+    }
+    flash_area_close(fap);
+
+    return rc;
+}
+
+static
+int boot_read_slot_flag(uint32_t image_id, uint32_t slot_id, int (* fn)(const struct flash_area *, uint8_t *))
+{
+    uint8_t flag = 0U;
+    const struct flash_area *fap = NULL;
+    int fa_id = flash_area_id_from_multi_image_slot(image_id, slot_id);
+    int rc = flash_area_open(fa_id, &fap);
+
+    if (rc == 0)
+    {
+        rc = fn(fap, &flag);
+    }
+
+    if (rc == 0)
+    {
+        rc = -1;
+
+        if (flag == BOOT_FLAG_SET)
+        {
+            rc = 1;
+        }
+        else
+        {
+            rc = 0;
+        }
+    }
+
+    flash_area_close(fap);
+
+    return rc;
+}
+
+int 
+boot_is_slot_inactive(uint32_t image_id, uint32_t slot_id)
+{
+    int rc = boot_read_slot_flag(image_id, slot_id, &boot_read_image_inactive);
+
+    return rc;
+}
+
+int 
+boot_is_slot_booted(uint32_t image_id, uint32_t slot_id)
+{
+    int rc = boot_read_slot_flag(image_id, slot_id, &boot_read_copy_done);
+
+    return rc;
+}
+
+int
+boot_is_slot_confirmed(uint32_t image_id, uint32_t slot_id)
+{
+    int rc = boot_read_slot_flag(image_id, slot_id, &boot_read_image_ok);
+
+    return rc;
+}
+
+int
+boot_set_pending_slot(uint32_t image_id, uint32_t slot_id)
+{
+    const struct flash_area *fap = NULL;
+    int fa_id = flash_area_id_from_multi_image_slot(image_id, slot_id);
+    int rc = flash_area_open(fa_id, &fap);
+
+    uint32_t off;
+
+    off = boot_image_inactive_off(fap);
+
+    if (rc == 0)
+    {
+        rc = flash_area_erase(fap, off, BOOT_MAX_ALIGN);
+    }
+    flash_area_close(fap);
+
+    return rc;
+}
+
+int
+boot_set_revert_slot(uint32_t image_id, uint32_t slot_id)
+{
+    int rc = boot_set_pending_slot(image_id, slot_id);
+
+    if (rc == 0)
+    {
+        const struct flash_area *fap = NULL;
+        int fa_id = flash_area_id_from_multi_image_slot(image_id, slot_id);
+        
+        rc = flash_area_open(fa_id, &fap);
+
+        if (rc == 0)
+        {
+            rc = boot_write_copy_done(fap);
+        }
+
+        flash_area_close(fap);
+    }
+
+    return rc;
+}
+
+int
+boot_find_image_tlv_info(uint32_t image_id, uint32_t slot_id, uint16_t type, uint16_t* len, uint32_t* off)
+{
+    struct boot_loader_state *state = &boot_data;
+    struct boot_status bs = {0};
+    struct image_tlv_iter it = {0};
+    int rc = -1;
+
+    if (image_id < BOOT_IMAGE_NUMBER) {
+#if BOOT_IMAGE_NUMBER > 1
+        (void)memset(state->img_mask, 1, BOOT_IMAGE_NUMBER);
+        state->img_mask[image_id] = 0;
+#endif
+        if (boot_read_image_headers(state, false, &bs) == 0) {
+            int area_id = flash_area_id_from_multi_image_slot(image_id, slot_id);
+            struct image_header* hdr = boot_img_hdr(state, slot_id);
+            const struct flash_area *fap = NULL;
+
+            rc = flash_area_open(area_id, &fap);
+
+            if (rc == 0)
+            {
+                rc = bootutil_tlv_iter_begin(&it, hdr, fap, type, false);
+            }
+
+            if (rc == 0)
+            {
+                rc = bootutil_tlv_iter_next(&it, off, len, NULL);
+            }
+
+            flash_area_close(fap);
+        }
+    }
+
+    return rc;
+}
+
+int boot_read_image_tlv_value(uint32_t image_id, uint32_t slot_id, uint16_t type, uint8_t *buf, uint32_t buf_len, uint32_t *read_len)
+{
+    int rc = -1;
+
+    uint16_t tlv_len = 0;
+    uint32_t tlv_off = 0;
+    uint32_t tmp_len = 0;
+
+    if (buf != NULL && buf_len > 0U) {
+        rc = boot_find_image_tlv_info(image_id, slot_id, type, &tlv_len, &tlv_off);
+
+        if (rc == 0) {
+            int area_id = flash_area_id_from_multi_image_slot(image_id, slot_id);
+            const struct flash_area *fap = NULL;
+
+            tmp_len = tlv_len;
+
+            if (tlv_len > buf_len) {
+                tmp_len = buf_len;
+            }
+
+            rc = flash_area_open(area_id, &fap);
+
+            if (rc == 0) {
+                rc = flash_area_read(fap, tlv_off, buf, tmp_len);
+            }
+
+            if (rc == 0) {
+                if (read_len != NULL) {
+                    *read_len = tmp_len;
+                }
+            }
+
+            flash_area_close(fap);
+        }
+    }
+
+    return rc;
+}
+
+int
+boot_get_slot_state(uint32_t image_id, uint32_t slot_id, boot_slot_state_t* state)
+{
+    int rc = 0;
+
+    if (boot_is_slot_inactive(image_id, slot_id) == 1)
+    {
+        *state = MCUBOOT_SLOT_STATE_INACTIVE;
+    }
+    else if ((boot_is_slot_booted(image_id, slot_id) == 1) && (boot_is_slot_confirmed(image_id, slot_id) == 0))
+    {
+        *state = MCUBOOT_SLOT_STATE_VERIFYING;
+    }
+    else if (boot_is_slot_booted(image_id, slot_id) == 0)
+    {
+        *state = MCUBOOT_SLOT_STATE_PENDING;
+    }
+    else if ((boot_is_slot_booted(image_id, slot_id) == 1) && (boot_is_slot_confirmed(image_id, slot_id) == 1))
+    {
+        *state = MCUBOOT_SLOT_STATE_ACTIVE;
+    }
+
+    return rc;
+}
+
+int
+boot_get_image_state(uint32_t image_id, uint32_t slot_id, boot_slot_state_t* state)
+{
+    int rc = -1;
+    fih_int fih_rc;
+    
+    FIH_CALL(boot_validate_slot_for_image_id, fih_rc, image_id, slot_id);
+
+    if (fih_eq(fih_rc, FIH_SUCCESS)) {
+        rc = boot_get_slot_state(image_id, slot_id, state);
+    }
+    else
+    {
+        rc = 0;
+        *state = MCUBOOT_SLOT_STATE_NO_IMAGE;
+    }
+
+    return rc;
+}
+
+#endif
diff --git a/boot/bootutil/src/swap_scratch.c b/boot/bootutil/src/swap_scratch.c
index 8b55d2a..000f4df 100644
--- a/boot/bootutil/src/swap_scratch.c
+++ b/boot/bootutil/src/swap_scratch.c
@@ -33,7 +33,7 @@
 
 BOOT_LOG_MODULE_DECLARE(mcuboot);
 
-#ifndef MCUBOOT_SWAP_USING_MOVE
+#if !defined(MCUBOOT_SWAP_USING_MOVE) && !defined(MCUBOOT_DIRECT_XIP)
 
 #if defined(MCUBOOT_VALIDATE_PRIMARY_SLOT)
 /*
diff --git a/boot/bootutil/src/swap_status.c b/boot/bootutil/src/swap_status.c
index d5be7c4..5c40754 100644
--- a/boot/bootutil/src/swap_status.c
+++ b/boot/bootutil/src/swap_status.c
@@ -4,7 +4,7 @@
  * Copyright (c) 2017-2019 Linaro LTD
  * Copyright (c) 2016-2019 JUUL Labs
  * Copyright (c) 2019-2020 Arm Limited
- * Copyright (c) 2020 Cypress Semiconductors
+ * Copyright (c) 2025 Cypress Semiconductors
  *
  * Original license:
  *
diff --git a/boot/bootutil/src/swap_status.h b/boot/bootutil/src/swap_status.h
index 9cc8362..ee8ce9b 100644
--- a/boot/bootutil/src/swap_status.h
+++ b/boot/bootutil/src/swap_status.h
@@ -4,7 +4,7 @@
  * Copyright (c) 2017-2019 Linaro LTD
  * Copyright (c) 2016-2019 JUUL Labs
  * Copyright (c) 2019-2020 Arm Limited
- * Copyright (c) 2020 Cypress Semiconductors
+ * Copyright (c) 2025 Cypress Semiconductors
  *
  * Original license:
  *
diff --git a/boot/bootutil/src/swap_status_misc.c b/boot/bootutil/src/swap_status_misc.c
index 2794a6f..aecd353 100644
--- a/boot/bootutil/src/swap_status_misc.c
+++ b/boot/bootutil/src/swap_status_misc.c
@@ -4,7 +4,7 @@
  * Copyright (c) 2017-2019 Linaro LTD
  * Copyright (c) 2016-2019 JUUL Labs
  * Copyright (c) 2019-2020 Arm Limited
- * Copyright (c) 2020 Cypress Semiconductors
+ * Copyright (c) 2025 Cypress Semiconductors
  *
  * Original license:
  *
diff --git a/boot/bootutil/src/swap_status_part.c b/boot/bootutil/src/swap_status_part.c
index 6498787..da516a6 100644
--- a/boot/bootutil/src/swap_status_part.c
+++ b/boot/bootutil/src/swap_status_part.c
@@ -4,7 +4,7 @@
  * Copyright (c) 2017-2019 Linaro LTD
  * Copyright (c) 2016-2019 JUUL Labs
  * Copyright (c) 2019-2020 Arm Limited
- * Copyright (c) 2020 Cypress Semiconductors
+ * Copyright (c) 2025 Cypress Semiconductors
  *
  * Original license:
  *
diff --git a/boot/cypress/BlinkyApp/BlinkyApp.md b/boot/cypress/BlinkyApp/BlinkyApp.md
index 7c7100b..7fec277 100644
--- a/boot/cypress/BlinkyApp/BlinkyApp.md
+++ b/boot/cypress/BlinkyApp/BlinkyApp.md
@@ -4,7 +4,7 @@
 
 Implements a simple Blinky LED application to demonstrate the MCUBootApp bootloader application operation for the boot and upgrade processes.
 
-It is validated and started by MCUBootApp, which is running on the CM0p core of PSoC™ 6 devices, or CM33 core for the CYW20829/CYW89829 devices.
+It is validated and started by MCUBootApp, which is running on the CM0p core of PSoC™ 6 devices, CM7 core for the XMC7100/XMC7200 devices, or CM33 core for the CYW20829/CYW89829 devices.
 
 Functionality:
 
@@ -57,9 +57,9 @@
 
 Toolchain is set by default in `toolchains.mk` file, depending on `COMPILER` makefile variable. MCUBoot is currently support only `GCC_ARM` as compiler. Toolchain path can be redefined, by setting `TOOLCHAIN_PATH` build flag to desired toolchain path. Below is an example on how to set toolchain path from **ModusToolbox™ IDE**:
 
-    make clean_boot app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M BUILDCFG=Debug FLASH_MAP=platforms/memory/PSOC6/flashmap/psoc6_swap_single.json TOOLCHAIN_PATH=c:/Users/${USERNAME}/ModusToolbox/tools_3.2/gcc
+    make clean_boot app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M BUILDCFG=Debug FLASH_MAP=platforms/memory/PSOC6/flashmap/psoc6_swap_single.json TOOLCHAIN_PATH=c:/Users/${USERNAME}/Infineon/Tools/mtb-gcc-arm-eabi/11.3.1/gcc
 
-    make clean_boot app APP_NAME=BlinkyApp PLATFORM=XMC7200 BUILDCFG=Debug FLASH_MAP=platforms/memory/XMC7000/flashmap/xmc7000_overwrite_single.json PLATFORM_CONFIG=platforms/memory/XMC7000/flashmap/xmc7200_platform.json CORE=CM7 APP_CORE=CM7 CORE_ID=0 IMG_TYPE=BOOT IMG_ID=1 TOOLCHAIN_PATH=c:/Users/${USERNAME}/ModusToolbox/tools_3.2/gcc
+    make clean_boot app APP_NAME=BlinkyApp PLATFORM=XMC7200 BUILDCFG=Debug FLASH_MAP=platforms/memory/XMC7000/flashmap/xmc7000_overwrite_single.json PLATFORM_CONFIG=platforms/memory/XMC7000/flashmap/xmc7200_platform.json CORE=CM7 APP_CORE=CM7 CORE_ID=0 IMG_TYPE=BOOT IMG_ID=1 TOOLCHAIN_PATH=c:/Users/${USERNAME}/Infineon/Tools/mtb-gcc-arm-eabi/11.3.1/gcc
 
 The supported platforms:
 
@@ -173,8 +173,8 @@
     - `0x0` - Internal memory.
     - `0xff` - External memory.
 - `TOOLCHAIN_PATH` - The path to the GCC compiler to use for the build.
-    - Example: TOOLCHAIN_PATH=/home/user/ModusToolbox/tools_3.2/gcc
-    - Example: TOOLCHAIN_PATH=C:/ModusToolbox/tools_3.2/gcc
+    - Example: TOOLCHAIN_PATH=/opt/Tools/mtb-gcc-arm-eabi/11.3.1/gcc
+    - Example: TOOLCHAIN_PATH=C:/Infineon/Tools/mtb-gcc-arm-eabi/11.3.1/gcc
 
 Flags are set by pre-build action. Result of pre-build can be found in autogenerated file `BlinkyApp/memorymap.mk`.   
 
@@ -194,7 +194,7 @@
 
 Flags passed to `imgtool` for a signature are defined in the `SIGN_ARGS` variable in BlinkyApp.mk.
 
-For `CYWxx829` and `XMC7x00` platforms, `cysecuretools` is used for the image signing.
+For `CYWxx829` and `XMC7x00` platforms, `edgeprotecttools` is used for the image signing.
 
 ### How to program an application
 
@@ -204,11 +204,11 @@
 
 Connect a board to your computer. Switch Kitprog3 to DAP-BULK mode by clicking the `SW3 MODE` button until `LED2 STATUS` constantly shines.
 
-The OpenOCD package is supplied with ModusToolbox™ IDE and can be found in the ModusToolbox™ installation folder `ModusToolbox/tools_3.2/openocd`.
+The OpenOCD package is supplied with `ModusToolbox™ Programming Tools` and can be found in the `C:\Infineon\Tools\ModusToolboxProgtools-1.4\openocd` folder.
 
-Open the terminal application and execute the following command after substitution of the `PATH_TO_APPLICATION.hex` and `OPENOCD_PATH` paths:
+Open the terminal application and execute the following commands:
 
-        export OPENOCD_PATH=/Applications/ModusToolbox/tools_3.2/openocd 
+        export OPENOCD_PATH=C:/Infineon/Tools/ModusToolboxProgtools-1.4/openocd
 
         ${OPENOCD_PATH}/bin/openocd -s ${OPENOCD_PATH}/scripts \
                             -f ${OPENOCD_PATH}/scripts/interface/kitprog3.cfg \
diff --git a/boot/cypress/BlinkyApp/BlinkyApp.mk b/boot/cypress/BlinkyApp/BlinkyApp.mk
index 735989b..27fe673 100644
--- a/boot/cypress/BlinkyApp/BlinkyApp.mk
+++ b/boot/cypress/BlinkyApp/BlinkyApp.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -57,10 +57,19 @@
 OUT_CFG := $(OUT_TARGET)/$(BUILDCFG)
 
 # Set build directory for BOOT and UPGRADE images
-ifeq ($(IMG_TYPE), UPGRADE)
-    OUT_CFG := $(OUT_CFG)/upgrade
+
+ifeq ($(USE_DIRECT_XIP), 1)
+    ifeq ($(APP_SLOT), 1)
+        OUT_CFG := $(OUT_CFG)/primary
+    else ifeq ($(APP_SLOT), 2)
+        OUT_CFG := $(OUT_CFG)/secondary
+    endif
 else
-    OUT_CFG := $(OUT_CFG)/boot
+    ifeq ($(IMG_TYPE), UPGRADE)
+        OUT_CFG := $(OUT_CFG)/upgrade
+    else
+        OUT_CFG := $(OUT_CFG)/boot
+    endif
 endif
 
 # Set parameters needed for signing
@@ -73,10 +82,10 @@
 ifneq ($(FLASH_MAP), )
 ifeq ($(FAMILY), CYW20829)
 $(CUR_APP_PATH)/memorymap.mk:
-	$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -c $(PRJ_DIR)/policy/policy_secure.json -d $(IMG_ID) -c $(PRJ_DIR)/policy/policy_reprovisioning_secure.json > $(CUR_APP_PATH)/memorymap.mk
+	$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -d $(IMG_ID) -k $(CUR_APP_PATH)/memorymap.mk -c $(PRJ_DIR)/policy/policy_reprovisioning_secure.json
 else ifeq ($(FAMILY), PSOC6)
 $(CUR_APP_PATH)/memorymap.mk:
-	$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -m -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -d $(IMG_ID) > $(CUR_APP_PATH)/memorymap.mk
+	$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -d $(IMG_ID) -k $(CUR_APP_PATH)/memorymap.mk -m
 else
 $(CUR_APP_PATH)/memorymap.mk:
 	$(PYTHON_PATH) scripts/memorymap_rework.py run -p $(PLATFORM_CONFIG) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory -n memorymap -d $(IMG_ID) > $(CUR_APP_PATH)/memorymap.mk
@@ -138,7 +147,9 @@
 DEFINES += -DUSER_APP_RAM_SIZE=$(USER_APP_RAM_SIZE)
 DEFINES += -DUSER_APP_START=$(USER_APP_START)
 DEFINES += -DPRIMARY_IMG_START=$(PRIMARY_IMG_START)
+DEFINES += -DSECONDARY_IMG_START=$(SECONDARY_IMG_START)
 DEFINES += -DUSER_APP_SIZE=$(SLOT_SIZE)
+DEFINES += -DAPP_SLOT=$(APP_SLOT)
 DEFINES += -DAPP_$(APP_CORE)
 DEFINES += -DBOOT_$(APP_CORE)
 
@@ -203,11 +214,21 @@
 # Collect Test Application sources
 C_FILES += $(wildcard $(CUR_APP_PATH)/*.c)
 
-# Set offset for secondary image
-ifeq ($(IMG_TYPE), UPGRADE)
-    HEADER_OFFSET := $(SECONDARY_IMG_START)
+
+ifeq ($(USE_DIRECT_XIP), 1)
+    # Set offset for secondary image
+    ifeq ($(APP_SLOT), 2)
+        HEADER_OFFSET := $(SECONDARY_IMG_START)
+    else
+        HEADER_OFFSET := $(PRIMARY_IMG_START)
+    endif
 else
-    HEADER_OFFSET := $(PRIMARY_IMG_START)
+    # Set offset for secondary image
+    ifeq ($(IMG_TYPE), UPGRADE)
+        HEADER_OFFSET := $(SECONDARY_IMG_START)
+    else
+        HEADER_OFFSET := $(PRIMARY_IMG_START)
+    endif
 endif
 
 # Collect all the sources
@@ -233,6 +254,11 @@
     endif
 endif
 
+ifeq ($(USE_DIRECT_XIP), 1)
+    C_FILES += $(PRJ_DIR)/platforms/img_confirm/$(FAMILY)/set_img_ok.c
+    INCLUDE_DIRS += $(PRJ_DIR)/platforms/img_confirm
+endif
+
 # Overwite path to linker script if custom is required, otherwise default from BSP is used
 
 LINKER_SCRIPT := $(CUR_APP_PATH)/linker/$(APP_NAME).ld
diff --git a/boot/cypress/BlinkyApp/Readme.md b/boot/cypress/BlinkyApp/Readme.md
index 08de778..cc8707e 100644
--- a/boot/cypress/BlinkyApp/Readme.md
+++ b/boot/cypress/BlinkyApp/Readme.md
@@ -44,7 +44,7 @@
 
 The following command will build regular HEX file of a BlinkyApp for BOOT slot. Substitute `PLATFORM=` to a platform name you use in all following commands.
 
-    make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=BOOT
+    make clean_boot app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M BUILDCFG=Debug IMG_TYPE=BOOT FLASH_MAP=platforms/memory/PSOC6/flashmap/psoc6_overwrite_single.json
 
 This have following defaults suggested:
 
@@ -53,59 +53,23 @@
 
 To build UPGRADE image use following command:
 
-    make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x10000
-
-    Note: HEADER_OFFSET=%SLOT_SIZE%
-
-Example command-line for single-image:
-
-    make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=BOOT
-
-**Building Multi-Image**
-
-`BlinkyApp` can be built to use in multi-image bootloader configuration.
-
-To get appropriate artifacts to use with multi image MCUBootApp, makefile flag `HEADER_OFFSET=` can be used.
-
-Example usage:
-
-Considering default config:
-
-* first image BOOT (PRIMARY) slot start `0x10018000`
-* slot size `0x10000`
-* second image BOOT (PRIMARY) slot start `0x10038000`
-
-To get appropriate artifact for second image PRIMARY slot run this command:
-
-    make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=BOOT HEADER_OFFSET=0x20000
-
-*Note:* only 2 images are supported at the moment.
+    make clean_upgrade app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE FLASH_MAP=platforms/memory/PSOC6/flashmap/psoc6_overwrite_single.json
 
 **How to build upgrade image for external memory:**
 
 To prepare MCUBootApp for work with external memory please refer to `MCUBootApp/ExternalMemory.md`.
 
-For build BlinkyApp upgrade image for external memory use command:
+For build BlinkyApp upgrade image for external memory use flashmap with `_smif.json` configuration :
 
-    make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x7FE8000 ERASED_VALUE=0xff
-
-`HEADER_OFFSET` defines the offset from original boot image address. This one in line above suggests secondary slot will start from `0x18000000`.
+    make clean_boot app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M BUILDCFG=Debug IMG_TYPE=BOOT FLASH_MAP=platforms/memory/PSOC6/flashmap/psoc6_overwrite_multi_smif.json
 
 `ERASED_VALUE` defines the memory cell contents in erased state. It is `0x00` for PSoC6's internal Flash and `0xff` for S25FL512S.
 
-In case of using muti-image configuration, upgrade image for second application can be built using next command:
-
-    make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x8028000 ERASED_VALUE=0xff
-
-    Note: for S25FL512S block address should be multiple by 0x40000
-
 **How to build encrypted upgrade image :**
 
-To prepare MCUBootApp for work with encrypted upgrade image please refer to `MCUBootApp/Readme.md`.
+To prepare MCUBootApp for work with encrypted upgrade image please refer to `MCUBootApp/README.md`.
 
-To obtain encrypted upgrade image of BlinkyApp extra flag `ENC_IMG=1` should be passed in command line, for example:
-
-    make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x20000 ENC_IMG=1
+To obtain encrypted upgrade image of BlinkyApp extra flag `ENC_IMG=1` should be passed in command line.
 
 This also suggests user already placed corresponding `*.pem` key in `\keys` folder. The key variables are defined in root `Makefile` as `SIGN_KEY_FILE` and `ENC_KEY_FILE`
 
@@ -146,20 +110,25 @@
 When user application programmed in BOOT slot:
 
     ===========================
-    [BlinkyApp] BlinkyApp v1.0 [CM4]
+    [BlinkyApp] Version: 1.0.0
     ===========================
-    [BlinkyApp] GPIO initialized
-    [BlinkyApp] UART initialized
-    [BlinkyApp] Retarget I/O set to 115200 baudrate
+    [BlinkyApp] GPIO initialized 
+    [BlinkyApp] UART initialized 
+    [BlinkyApp] Retarget I/O set to 115200 baudrate 
     [BlinkyApp] Red led blinks with 1 sec period
+    [BlinkyApp] Image type: BOOT on CM4 core
+    [BlinkyApp] Turn off watchdog timer
 
 When user application programmed in UPRADE slot and upgrade procedure was successful:
 
     ===========================
-    [BlinkyApp] BlinkyApp v2.0 [+]
+    [BlinkyApp] Version: 1.0.0
     ===========================
-
-    [BlinkyApp] GPIO initialized
-    [BlinkyApp] UART initialized
-    [BlinkyApp] Retarget I/O set to 115200 baudrate
+    [BlinkyApp] GPIO initialized 
+    [BlinkyApp] UART initialized 
+    [BlinkyApp] Retarget I/O set to 115200 baudrate 
     [BlinkyApp] Red led blinks with 0.25 sec period
+    [BlinkyApp] Try to set img_ok to confirm upgrade image
+    [BlinkyApp] SWAP Status : Image OK was set at 0x10027fe8.
+    [BlinkyApp] Image type: UPGRADE on CM4 core
+    [BlinkyApp] Turn off watchdog timer
diff --git a/boot/cypress/BlinkyApp/libs.mk b/boot/cypress/BlinkyApp/libs.mk
index 54bc8d8..c930531 100644
--- a/boot/cypress/BlinkyApp/libs.mk
+++ b/boot/cypress/BlinkyApp/libs.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM0P_template.ld b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM0P_template.ld
index b7044a7..a423014 100644
--- a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM0P_template.ld
+++ b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM0P_template.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2022 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2016-2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM0P_template_xip.ld b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM0P_template_xip.ld
index dea9ce6..dcee795 100644
--- a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM0P_template_xip.ld
+++ b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM0P_template_xip.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2022 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2016-2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
@@ -133,7 +133,7 @@
 
         EXCLUDE_FILE(*cy_smif.o *cy_smif_memslot.o *cy_smif_sfdp.o
                 *cy_sysclk.o *cy_smif_hybrid_sect.o *flash_qspi.o
-                *cy_syslib.o *cy_syslib_ext.o *system_psoc6_cm0plus.o, *libgcc.a) *(.text)
+                *cy_syslib.o *cy_syslib_ext.o *system_psoc6_cm0plus.o, *libgcc.a, *libc.a, *libc_a-memset.o, *libc_a-memcpy-stub.o, *libc.a:memcpy.o, *cyhal_system.o) *(.text)
 
         KEEP(*(.init))
         KEEP(*(.fini))
@@ -252,6 +252,10 @@
         KEEP(*(.cy_ramfunc*))
         . = ALIGN(4);
 
+        *libc.a(.text*)
+        *libc_a-memset.o(.text*)
+        *libc_a-memcpy-stub.o(.text*)
+        *cyhal_system.o(.text*)
         *libgcc.a(.text*)
         *cy_smif.o(.text*)
         *cy_smif_memslot.o(.text*)
@@ -262,6 +266,9 @@
         *cy_syslib.o(.text*)
         *cy_syslib_ext.o(.text*)
 
+        KEEP(*libc.a:memset.o(.text*))
+        KEEP(*libc.a:memcpy.o(.text*))
+
         __data_end__ = .;
 
     } > ram AT>flash
diff --git a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM33_template_xip.ld b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM33_template_xip.ld
index 704c3b4..b5e8f70 100644
--- a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM33_template_xip.ld
+++ b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM33_template_xip.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright (c) (2020-2022), Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright (c) (2020-2025), Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM4_template.ld b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM4_template.ld
index 4324012..9c602d0 100644
--- a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM4_template.ld
+++ b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM4_template.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2021 Cypress Semiconductor Corporation
+* Copyright 2016-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM4_template_xip.ld b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM4_template_xip.ld
index c99131c..29c99b2 100644
--- a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM4_template_xip.ld
+++ b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM4_template_xip.ld
@@ -19,8 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2021 Cypress Semiconductor Corporation
-* Copyright 2022 Infineon Technologies AG
+* Copyright 2025 Infineon Technologies AG
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -43,7 +42,7 @@
 ENTRY(Reset_Handler)
 
 /* Size of the stack section at the end of CM4 SRAM */
-STACK_SIZE = 0x1000;
+STACK_SIZE = 0x2000;
 /* The size of the MCU boot header area at the start of FLASH */
 BOOT_HEADER_SIZE = 0x400;
 
@@ -132,7 +131,7 @@
 
         EXCLUDE_FILE(*cy_smif.o *cy_smif_memslot.o *cy_smif_sfdp.o
                 *cy_sysclk.o *cy_smif_hybrid_sect.o *flash_qspi.o
-                *cy_syslib.o *cy_syslib_ext.o *system_psoc6_cm4.o *libgcc.a) *(.text)
+                *cy_syslib.o *cy_syslib_ext.o *system_psoc6_cm4.o *libgcc.a, *libc.a, *libc_a-memset.o, *libc_a-memcpy-stub.o, *libc.a:memcpy.o, *cyhal_system.o) *(.text)
 
         KEEP(*(.init))
         KEEP(*(.fini))
@@ -251,6 +250,10 @@
         KEEP(*(.cy_ramfunc*))
         . = ALIGN(4);
 
+        *libc.a(.text*)
+        *libc_a-memset.o(.text*)
+        *libc_a-memcpy-stub.o(.text*)
+        *cyhal_system.o(.text*)
         *libgcc.a(.text*)
         *cy_smif.o(.text*)
         *cy_smif_memslot.o(.text*)
@@ -261,6 +264,9 @@
         *cy_syslib.o(.text*)
         *cy_syslib_ext.o(.text*)
 
+        KEEP(*libc.a:memset.o(.text*))
+        KEEP(*libc.a:memcpy.o(.text*))
+
         __data_end__ = .;
 
     } > ram AT>flash
diff --git a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM7_template.ld b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM7_template.ld
index 3767ba8..2a450fa 100644
--- a/boot/cypress/BlinkyApp/linker/BlinkyApp_CM7_template.ld
+++ b/boot/cypress/BlinkyApp/linker/BlinkyApp_CM7_template.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2021 Cypress Semiconductor Corporation
+* Copyright 2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/BlinkyApp/main.c b/boot/cypress/BlinkyApp/main.c
index 22abb36..8f1a872 100644
--- a/boot/cypress/BlinkyApp/main.c
+++ b/boot/cypress/BlinkyApp/main.c
@@ -1,6 +1,5 @@
 /*
- * Copyright (c) 2020 Cypress Semiconductor Corporation
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * SPDX-License-Identifier: Apache-2.0
  */
@@ -25,7 +24,7 @@
 
 #include "platform.h"
 
-#if !(SWAP_DISABLED) && defined(UPGRADE_IMAGE)
+#if !(SWAP_DISABLED) && defined(UPGRADE_IMAGE) || defined(MCUBOOT_DIRECT_XIP)
 #include "set_img_ok.h"
 #endif
 
@@ -35,10 +34,10 @@
 
     printf(GREETING_MESSAGE_INFO);
 
-#if !(SWAP_DISABLED) && defined(UPGRADE_IMAGE)
+#if !(SWAP_DISABLED) && defined(UPGRADE_IMAGE) || defined(MCUBOOT_DIRECT_XIP)
     int rc = -1;
 
-    printf("[BlinkyApp] Try to set img_ok to confirm upgrade image\r\n");
+    printf("[BlinkyApp] Try to set img_ok to confirm that the image is valid\r\n");
 
     /* Write Image OK flag to the slot trailer, so MCUBoot-loader
      * will not revert new image
@@ -51,6 +50,7 @@
         printf("[BlinkyApp] SWAP Status : Image OK was set at 0x%08x.\r\n", IMG_OK_ADDR);
     } else {
         printf("[BlinkyApp] SWAP Status : Failed to set Image OK.\r\n");
+        for (;;);
     }
 
 #endif /* !(SWAP_DISABLED) && defined(UPGRADE_IMAGE) */
diff --git a/boot/cypress/BlinkyApp/main.h b/boot/cypress/BlinkyApp/main.h
index 4fafb4e..a9e084c 100644
--- a/boot/cypress/BlinkyApp/main.h
+++ b/boot/cypress/BlinkyApp/main.h
@@ -1,6 +1,6 @@
 /*
 \copyright
-* Copyright 2017-2019 Cypress Semiconductor Corporation
+* Copyright 2017-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/BlinkyApp/platform.h b/boot/cypress/BlinkyApp/platform.h
index b2a0a50..5435d97 100644
--- a/boot/cypress/BlinkyApp/platform.h
+++ b/boot/cypress/BlinkyApp/platform.h
@@ -1,3 +1,23 @@
+/********************************************************************************
+* \copyright
+* (c) 2025, Cypress Semiconductor Corporation (an Infineon company) or
+* an affiliate of Cypress Semiconductor Corporation.
+*
+* SPDX-License-Identifier: Apache-2.0
+*
+* 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.
+*******************************************************************************/
+
 #ifndef PLATFORM_H
 #define PLATFORM_H
 
@@ -28,6 +48,15 @@
 #error "[BlinkyApp] Please specify type of image: -DBOOT_IMAGE or -DUPGRADE_IMAGE\r\n"
 #endif /* BOOT_IMAGE */
 
+#if defined(MCUBOOT_DIRECT_XIP)
+ #undef IMAGE_TYPE
+ #if APP_SLOT == 1
+  #define IMAGE_TYPE "Primary slot"
+ #else
+  #define IMAGE_TYPE "Secondary slot"
+ #endif
+#endif
+
 #define GREETING_MESSAGE_VER "[BlinkyApp] Version:"
 
 #define WATCHDOG_FREE_MESSAGE "[BlinkyApp] Turn off watchdog timer\r\n"
diff --git a/boot/cypress/CC.mk b/boot/cypress/CC.mk
index 75e97a3..050b12b 100644
--- a/boot/cypress/CC.mk
+++ b/boot/cypress/CC.mk
@@ -1,3 +1,21 @@
+################################################################################
+# \copyright
+# Copyright 2025 Cypress Semiconductor Corporation
+# SPDX-License-Identifier: Apache-2.0
+#
+# 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.
+################################################################################
+
 ASM_FILES :=
 
 C_FILES :=
diff --git a/boot/cypress/MCUBootApp/ExternalMemory.md b/boot/cypress/MCUBootApp/ExternalMemory.md
index 07598cb..72e435f 100644
--- a/boot/cypress/MCUBootApp/ExternalMemory.md
+++ b/boot/cypress/MCUBootApp/ExternalMemory.md
@@ -74,7 +74,7 @@
 
 When XIP mode is used primary slot of an image can be placed in external memory.
 
-This repository provides default flash map files with suffix _xip_ to be used for XIP mode in `platforms/memory/flash_%platform_name%/flashmap`.
+This repository provides default flash map files with suffix _xip_ to be used for XIP mode in `platforms/memory/<PLATFORM_NAME>/flashmap`.
 
 #### How to enable external memory support
 
@@ -100,11 +100,11 @@
 
 The MCUBootApp can be programmed similarly to described in the [MCUBootApp.md](MCUBootApp.md) file:
 
-        export OPENOCD=/Applications/ModusToolbox/tools_3.2/openocd
+        export OPENOCD_PATH=C:/Infineon/Tools/ModusToolboxProgtools-1.4/openocd
 
-        ${OPENOCD}/bin/openocd -s ${OPENOCD}/scripts \
-                            -f ${OPENOCD}/scripts/interface/kitprog3.cfg \
-                            -f ${OPENOCD}/scripts/target/psoc6_2m.cfg \
+        ${OPENOCD_PATH}/bin/openocd -s ${OPENOCD_PATH}/scripts \
+                            -f ${OPENOCD_PATH}/scripts/interface/kitprog3.cfg \
+                            -f ${OPENOCD_PATH}/scripts/target/psoc6_2m.cfg \
                             -c "init; psoc6 sflash_restrictions 1" \
                             -c "init; reset init; program PATH_TO_APPLICATION.hex" \
                             -c "resume; reset; exit" 
diff --git a/boot/cypress/MCUBootApp/MCUBootApp.md b/boot/cypress/MCUBootApp/MCUBootApp.md
index 2bdcbaf..883b8a3 100644
--- a/boot/cypress/MCUBootApp/MCUBootApp.md
+++ b/boot/cypress/MCUBootApp/MCUBootApp.md
@@ -33,7 +33,7 @@
 
 The flash map of the bootloader is defined at compile-time and cannot be changed dynamically. Flash map is prepared in the industry-accepted JSON (JavaScript Object Notation) format. It should follow the rules described in section **How to modify the flash map**.
 
-`MCUBootApp` contains JSON templates for flash maps with commonly used configurations. They can be found in `platforms/memory/flash_%platform_name%/flashmap` The slots' sizes are defined per platform to be compatible with all supported device families.
+`MCUBootApp` contains JSON templates for flash maps with commonly used configurations. They can be found in `platforms/memory/<PLATFORM_NAME>/flashmap` The slots' sizes are defined per platform to be compatible with all supported device families.
 
 The actual addresses are provided in corresponding platform doc files:
 
@@ -641,9 +641,9 @@
 
 Folder `boot/cypress` contains make-files infrastructure for building MCUBootApp bootloader applications. Example build commands are provided later in this document for different build configurations.
 
-Toolchain is set by default in `toolchains.mk` file, depending on `COMPILER` makefile variable. MCUBoot is currently support only `GCC_ARM` as compiler. Toolchain path can be redefined, by setting `TOOLCHAIN_PATH` build flag to desired toolchain path. Below is an example on how to set toolchain path from **ModusToolbox™ IDE**:
+Toolchain is set by default in `toolchains.mk` file, depending on `COMPILER` makefile variable. MCUBoot is currently support only `GCC_ARM` as compiler. Toolchain path can be redefined, by setting `TOOLCHAIN_PATH` build flag to desired toolchain path. Below is an example on how to set toolchain path from **ModusToolbox™ Programming Tools**:
 
-    make clean app APP_NAME=MCUBootApp PLATFORM=PSOC_062_2M BUILDCFG=Debug FLASH_MAP=platforms/memory/PSOC6/flashmap/psoc6_swap_single.json TOOLCHAIN_PATH=c:/Users/${USERNAME}/ModusToolbox/tools_3.2/gcc
+    make clean app APP_NAME=MCUBootApp PLATFORM=PSOC_062_2M BUILDCFG=Debug FLASH_MAP=platforms/memory/PSOC6/flashmap/psoc6_swap_single.json TOOLCHAIN_PATH=c:/Users/${USERNAME}/Infineon/Tools/mtb-gcc-arm-eabi/11.3.1/gcc
 
 * Build MCUBootApp in the `Debug` configuration for Single-image mode with swap upgrade.
 
@@ -741,9 +741,7 @@
 
 1. The direct usage of OpenOCD.
 
-The OpenOCD package is supplied with ModusToolbox™ IDE and can be found in the installation folder `ModusToolbox/tools_3.2/openocd`.
-
-Set environment variable `OPENOCD` to the path to the openocd folder in ModusToolbox™. Exact commands for programming images are provided in the corresponding platform readme files.
+The OpenOCD package is supplied with `ModusToolbox™ Programming Tools` and can be found in the `C:\Infineon\Tools\ModusToolboxProgtools-1.4\openocd` folder. Commands for programming images are provided in the corresponding platform readme files.
 
 2. Using the GUI tool `Cypress Programmer`
 
@@ -773,4 +771,4 @@
 
 *Python/Python3* - ensure that you have the correct path referenced in `PATH`.
 
-*Msys2* - To use the systems path, navigate to the msys2 folder, open `msys2_shell.cmd`, uncomment set `MSYS2_PATH_TYPE=inherit`, and restart the MSYS2 shell. This will inherit the system's path and find `python` installed in the regular way as well as `imgtool` and its dependencies.
+*Msys2* - To use the systems path, navigate to the msys2 folder, open `msys2_shell.cmd`, uncomment set `MSYS2_PATH_TYPE=inherit`, and restart the MSYS2 shell. This will inherit the system's path and find `Python` installed in the regular way as well as `imgtool` and its dependencies.
diff --git a/boot/cypress/MCUBootApp/MCUBootApp.mk b/boot/cypress/MCUBootApp/MCUBootApp.mk
index d1c93d1..f8f7ede 100644
--- a/boot/cypress/MCUBootApp/MCUBootApp.mk
+++ b/boot/cypress/MCUBootApp/MCUBootApp.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -43,6 +43,7 @@
 FIH_PROFILE_LEVEL_LIST := OFF LOW MEDIUM HIGH
 FIH_PROFILE_LEVEL ?= MEDIUM
 MCUBOOT_SWAP_STATUS_FAST_BOOT ?= 0
+USE_LOG_TIMESTAMP ?= 1
 
 ifeq ($(BUILDCFG), Release)
     MCUBOOT_LOG_LEVEL ?= MCUBOOT_LOG_LEVEL_INFO
@@ -77,10 +78,10 @@
 
 ifeq ($(FAMILY), CYW20829)
 $(CUR_APP_PATH)/memorymap.mk:
-	$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -c $(PRJ_DIR)/policy/policy_secure.json > $(CUR_APP_PATH)/memorymap.mk
+	$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -c $(APP_DEFAULT_POLICY) -k $(CUR_APP_PATH)/memorymap.mk -n $(OUT_CFG)/$(APP_NAME).signed_nonce.bin
 else ifeq ($(FAMILY), PSOC6)
 $(CUR_APP_PATH)/memorymap.mk:
-	$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -m -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h > $(CUR_APP_PATH)/memorymap.mk
+	$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -m -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -k $(CUR_APP_PATH)/memorymap.mk
 else
 $(CUR_APP_PATH)/memorymap.mk:
 	$(PYTHON_PATH) scripts/memorymap_rework.py run -p $(PLATFORM_CONFIG) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory -n memorymap > $(CUR_APP_PATH)/memorymap.mk
@@ -170,6 +171,15 @@
 
 endif
 
+ifeq ($(MCUBOOT_SKIP_VALIDATE_PRIMARY_SLOT), 1)
+    DEFINES += -DMCUBOOT_SKIP_VALIDATE_PRIMARY_SLOT
+endif
+
+ifeq ($(MCUBOOT_SKIP_VALIDATE), 1)
+    DEFINES += -DMCUBOOT_SKIP_VALIDATE_PRIMARY_SLOT
+    DEFINES += -DMCUBOOT_SKIP_VALIDATE_SECONDARY_SLOT
+endif
+
 ifneq ($(MCUBOOT_IMAGE_NUMBER), 1)
     ifeq ($(MCUBOOT_DEPENDENCY_CHECK), 1)
         DEFINES += -DMCUBOOT_DEPENDENCY_CHECK
@@ -197,15 +207,6 @@
     ifeq ($(FAMILY), CYW20829)
         DEFINES += -DMCUBOOT_ENC_IMAGES_XIP
     endif
-# Use maximum optimization level for PSOC6 encrypted image with
-# external flash so it would fit into 0x18000 size of MCUBootApp
-    ifneq ($(FAMILY), CYW20829)
-        ifeq ($(BUILDCFG), Debug)
-            ifeq ($(USE_EXTERNAL_FLASH), 1)
-                CFLAGS_OPTIMIZATION := -Os -g3
-            endif
-        endif
-    endif
 endif
 
 ifeq ($(USE_MEASURED_BOOT), 1)
diff --git a/boot/cypress/MCUBootApp/MCUBootApp_CM0P.ld b/boot/cypress/MCUBootApp/MCUBootApp_CM0P.ld
index f80e9da..0ecd0b1 100644
--- a/boot/cypress/MCUBootApp/MCUBootApp_CM0P.ld
+++ b/boot/cypress/MCUBootApp/MCUBootApp_CM0P.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2021 Cypress Semiconductor Corporation
+* Copyright 2016-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/MCUBootApp/MCUBootApp_CM33.ld b/boot/cypress/MCUBootApp/MCUBootApp_CM33.ld
index 83be8e4..1c2478d 100644
--- a/boot/cypress/MCUBootApp/MCUBootApp_CM33.ld
+++ b/boot/cypress/MCUBootApp/MCUBootApp_CM33.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2020 Cypress Semiconductor Corporation
+* Copyright 2016-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/MCUBootApp/MCUBootApp_CM4.ld b/boot/cypress/MCUBootApp/MCUBootApp_CM4.ld
index 06a074b..e37b4ae 100644
--- a/boot/cypress/MCUBootApp/MCUBootApp_CM4.ld
+++ b/boot/cypress/MCUBootApp/MCUBootApp_CM4.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2021 Cypress Semiconductor Corporation
+* Copyright 2016-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/MCUBootApp/MCUBootApp_CM7.ld b/boot/cypress/MCUBootApp/MCUBootApp_CM7.ld
index 6b6de37..b2aa608 100644
--- a/boot/cypress/MCUBootApp/MCUBootApp_CM7.ld
+++ b/boot/cypress/MCUBootApp/MCUBootApp_CM7.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2021 Cypress Semiconductor Corporation
+* Copyright 2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/MCUBootApp/README.md b/boot/cypress/MCUBootApp/README.md
index b58f87e..59e6e87 100644
--- a/boot/cypress/MCUBootApp/README.md
+++ b/boot/cypress/MCUBootApp/README.md
@@ -172,16 +172,18 @@
 There are couple ways of programming hex of MCUBootApp and BlinkyApp. Following instructions assume one of Cypress development kits, for example `CY8CPROTO_062_4343W`.
 
 1. Direct usage of OpenOCD.
-OpenOCD package is supplied with ModuToolbox IDE and can be found in installation folder under `./tools_3.2/openocd`.
-Open terminal application -  and execute following command after substitution `PATH_TO_APPLICATION.hex` and `OPENOCD` paths.
 
 Connect a board to your computer. Switch Kitprog3 to DAP-BULK mode by pressing `SW3 MODE` button until `LED2 STATUS` constantly shines.
 
-        export OPENOCD=/Applications/ModusToolbox/tools_3.2/openocd 
+The OpenOCD package is supplied with `ModusToolbox™ Programming Tools` and can be found in the `C:\Infineon\Tools\ModusToolboxProgtools-1.4\openocd` folder.
 
-        ${OPENOCD}/bin/openocd -s ${OPENOCD}/scripts \
-                            -f ${OPENOCD}/scripts/interface/kitprog3.cfg \
-                            -f ${OPENOCD}/scripts/target/psoc6_2m.cfg \
+Open the terminal application and execute the following commands:
+
+        export OPENOCD_PATH=C:/Infineon/Tools/ModusToolboxProgtools-1.4/openocd
+
+        ${OPENOCD_PATH}/bin/openocd -s ${OPENOCD_PATH}/scripts \
+                            -f ${OPENOCD_PATH}/scripts/interface/kitprog3.cfg \
+                            -f ${OPENOCD_PATH}/scripts/target/psoc6_2m.cfg \
                             -c "init; reset init; program PATH_TO_APPLICATION.hex" \
                             -c "resume; reset; exit" 
 
@@ -209,7 +211,7 @@
 * Msys2
 
 Also IDE may be used:
-* Eclipse / ModusToolbox ("makefile project from existing source")
+* Eclipse / ModusToolbox™ ("makefile project from existing source")
 
 *Make* - make sure it is added to system's `PATH` variable and correct path is first in the list;
 
@@ -217,5 +219,5 @@
 
 *Msys2* - to use systems PATH navigate to msys2 folder, open `msys2_shell.cmd`, uncomment set `MSYS2_PATH_TYPE=inherit`, restart MSYS2 shell.
 
-This will inherit system's PATH so should find `python3.7` installed in regular way as well as imgtool and its dependencies.
+This will inherit system's PATH so should find `Python` installed in regular way as well as imgtool and its dependencies.
 
diff --git a/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_assert.h b/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_assert.h
index 5c07711..2e55eef 100644
--- a/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_assert.h
+++ b/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_assert.h
@@ -4,6 +4,25 @@
  * Cypress-specific assert() macro redefinition
  *
  */
+/********************************************************************************
+* \copyright
+* (c) 2025, Cypress Semiconductor Corporation (an Infineon company) or
+* an affiliate of Cypress Semiconductor Corporation.
+*
+* SPDX-License-Identifier: Apache-2.0
+*
+* 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.
+*******************************************************************************/
 
 #ifndef MCUBOOT_ASSERT_H
 #define MCUBOOT_ASSERT_H
diff --git a/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_config.h b/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_config.h
index 819cd20..59f573e 100644
--- a/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_config.h
+++ b/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_config.h
@@ -1,4 +1,4 @@
-/* Copyright 2019 Cypress Semiconductor Corporation
+/* Copyright 2025 Cypress Semiconductor Corporation
  *
  * Copyright (c) 2018 Open Source Foundries Limited
  *
@@ -48,18 +48,20 @@
  * simpler code path, which only supports overwriting the
  * existing image with the update image, is also available.
  */
-#ifdef MCUBOOT_OVERWRITE_ONLY
+#if !defined (MCUBOOT_DIRECT_XIP)
+# ifdef MCUBOOT_OVERWRITE_ONLY
 /* Uncomment to only erase and overwrite those slot 0 sectors needed
  * to install the new image, rather than the entire image slot. */
 /* #define MCUBOOT_OVERWRITE_ONLY_FAST */
-#else
+# else
 /* Using SWAP w Scratch by default.
  * Uncomment which is needed. */
-#define MCUBOOT_SWAP_USING_SCRATCH  1
+#  define MCUBOOT_SWAP_USING_SCRATCH  1
 /* #define MCUBOOT_SWAP_USING_MOVE     1 */
-#ifdef USE_SWAP_STATUS
-#define MCUBOOT_SWAP_USING_STATUS   1
-#endif
+#  ifdef USE_SWAP_STATUS
+#   define MCUBOOT_SWAP_USING_STATUS   1
+#  endif
+# endif
 #endif
 
 /* This definition is used in boot_copy_region function to define 
diff --git a/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_logging.h b/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_logging.h
index c2d97d8..0389a4a 100644
--- a/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_logging.h
+++ b/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_logging.h
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2018 Nordic Semiconductor ASA
  * Copyright (c) 2015 Runtime Inc
- * Copyright (c) 2020 Cypress Semiconductor Corporation
+ * Copyright (c) 2025 Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/cypress/MCUBootApp/config/mcuboot_crypto_acc_config.h b/boot/cypress/MCUBootApp/config/mcuboot_crypto_acc_config.h
index 307c6be..f1217fa 100644
--- a/boot/cypress/MCUBootApp/config/mcuboot_crypto_acc_config.h
+++ b/boot/cypress/MCUBootApp/config/mcuboot_crypto_acc_config.h
@@ -1,6 +1,6 @@
 /*
  * mbed Microcontroller Library
- * Copyright (c) 2019 Cypress Semiconductor Corporation
+ * Copyright (c) 2025 Cypress Semiconductor Corporation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/boot/cypress/MCUBootApp/cy_serial_flash_prog.c b/boot/cypress/MCUBootApp/cy_serial_flash_prog.c
index 84197e1..14da828 100644
--- a/boot/cypress/MCUBootApp/cy_serial_flash_prog.c
+++ b/boot/cypress/MCUBootApp/cy_serial_flash_prog.c
@@ -10,7 +10,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2018-2019 Cypress Semiconductor Corporation
+* Copyright 2018-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/MCUBootApp/libs.mk b/boot/cypress/MCUBootApp/libs.mk
index 4be1c07..bbfa77d 100644
--- a/boot/cypress/MCUBootApp/libs.mk
+++ b/boot/cypress/MCUBootApp/libs.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/MCUBootApp/misc/exec_time_check.h b/boot/cypress/MCUBootApp/misc/exec_time_check.h
index 55d71f2..d0f595c 100644
--- a/boot/cypress/MCUBootApp/misc/exec_time_check.h
+++ b/boot/cypress/MCUBootApp/misc/exec_time_check.h
@@ -1,4 +1,4 @@
-/* Copyright 2022, Infineon Technologies AG.  All rights reserved.
+/* Copyright 2025, Infineon Technologies AG.  All rights reserved.
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
diff --git a/boot/cypress/MCUBootApp/misc/timebase_us.c b/boot/cypress/MCUBootApp/misc/timebase_us.c
index dfe2ffd..5d4efdc 100644
--- a/boot/cypress/MCUBootApp/misc/timebase_us.c
+++ b/boot/cypress/MCUBootApp/misc/timebase_us.c
@@ -1,4 +1,4 @@
-/* Copyright 2022, Infineon Technologies AG.  All rights reserved.
+/* Copyright 2025, Infineon Technologies AG.  All rights reserved.
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
diff --git a/boot/cypress/MCUBootApp/misc/timebase_us.h b/boot/cypress/MCUBootApp/misc/timebase_us.h
index 79d1482..9689aba 100644
--- a/boot/cypress/MCUBootApp/misc/timebase_us.h
+++ b/boot/cypress/MCUBootApp/misc/timebase_us.h
@@ -1,4 +1,4 @@
-/* Copyright 2022, Infineon Technologies AG.  All rights reserved.
+/* Copyright 2025, Infineon Technologies AG.  All rights reserved.
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
diff --git a/boot/cypress/MCUBootApp/os/os.h b/boot/cypress/MCUBootApp/os/os.h
index 8d581ca..d6067e4 100644
--- a/boot/cypress/MCUBootApp/os/os.h
+++ b/boot/cypress/MCUBootApp/os/os.h
@@ -8,7 +8,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2017-2018, Cypress Semiconductor Corporation. All rights reserved.
+* Copyright 2017-2025, Cypress Semiconductor Corporation. All rights reserved.
 * You may use this file only in accordance with the license, terms, conditions,
 * disclaimers, and limitations in the end user license agreement accompanying
 * the software package with which this file was provided.
diff --git a/boot/cypress/MCUBootApp/timestamp.h b/boot/cypress/MCUBootApp/timestamp.h
index afd6460..6a6b4df 100644
--- a/boot/cypress/MCUBootApp/timestamp.h
+++ b/boot/cypress/MCUBootApp/timestamp.h
@@ -1,4 +1,4 @@
-/* Copyright 2022, Infineon Technologies AG.  All rights reserved.
+/* Copyright 2025, Infineon Technologies AG.  All rights reserved.
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
diff --git a/boot/cypress/Makefile b/boot/cypress/Makefile
index 1e32ec8..3efa1ad 100644
--- a/boot/cypress/Makefile
+++ b/boot/cypress/Makefile
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2021 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/README.md b/boot/cypress/README.md
index a659281..9c78f6b 100644
--- a/boot/cypress/README.md
+++ b/boot/cypress/README.md
@@ -1,12 +1,12 @@
-### Port of MCUBoot library for evaluation with Cypress PSoC 6 chips
+### Port of MCUBoot library for evaluation with Cypress (Infineon) chips
 
 ### Disclaimer
 
-Given solution is included in `MCUboot` repository with purpose to demonstrate basic concepts and features of MCUboot library on Cypress PSoC 6 device. Applications are created per MCUboot library maintainers requirements. Implementation differs from conventional and recommended by Cypress Semiconductors development flow for PSoC 6 devices. These applications are not recommended as a starting point for development and should not be considered as supported examples for PSoC 6 devices.
+Given solution is included in `MCUboot` repository with purpose to demonstrate basic concepts and features of MCUboot library on Cypress (Infineon) devices. Applications are created per MCUboot library maintainers requirements. Implementation differs from conventional and recommended by Cypress Semiconductors development flow. These applications are not recommended as a starting point for development and should not be considered as supported examples.
 
-Examples provided to use with **ModusToolbox® Software Environment** are a recommended reference point to start development of MCUboot based bootloaders for PSoC 6 devices.
+Examples provided to use with **ModusToolbox™ Software Environment** are a recommended reference point to start development of MCUboot based bootloaders for Cypress (Infineon) devices.
 
-Refer to **Cypress Semiconductors** [github](https://github.com/cypresssemiconductorco) page to find examples.
+Refer to **Cypress (Infineon)** [github](https://github.com/Infineon) page to find examples.
 
 1. MCUboot-Based Basic Bootloader [mtb-example-psoc6-mcuboot-basic](https://github.com/cypresssemiconductorco/mtb-example-psoc6-mcuboot-basic)
 2. MCUboot-Based Bootloader with Rollback to Factory App in External Flash [mtb-example-anycloud-mcuboot-rollback](https://github.com/cypresssemiconductorco/mtb-example-anycloud-mcuboot-rollback)
@@ -14,20 +14,20 @@
 ### Solution description
 
 There are two applications implemented:
-* MCUBootApp - PSoC6 MCUboot-based bootloading application;
-* BlinkyApp - simple PSoC6 blinking LED application which is a target of BOOT/UPGRADE;
+* MCUBootApp - MCUboot-based bootloading application;
+* BlinkyApp - simple blinking LED application which is a target for primary or secondary slot;
 
-The default flash map for MCUBootApp implemented is next:
+The default flash map for PSOC6 MCUBootApp implemented is next:
 
 * [0x10000000, 0x10018000] - MCUBootApp (bootloader) area;
 * [0x10018000, 0x10028000] - primary slot for BlinkyApp;
 * [0x10028000, 0x10038000] - secondary slot for BlinkyApp;
 * [0x10038000, 0x10039000] - scratch area;
 
-The flash map is defined through sysflash.h and memory.c.
+The flash map can be defined in boot/cypress/platforms/memory/<PLATFORM>/flashmap/<CONFIGURATION>.json
 
 It is also possible to place secondary (upgrade) slots in external memory module. In this case primary slot can be doubled in size.
-For more details about External Memory usage, please refer to separate guiding document `MCUBootApp/ExternalMemory.md`.
+For more details about External Memory usage, please refer to separate guiding document [ExternalMemory.md](MCUBootApp/ExternalMemory.md).
 
 MCUBootApp checks image integrity with SHA256, image authenticity with EC256 digital signature verification and uses either completely software implementation of cryptographic functions or accelerated by hardware - both based on Mbed TLS Library.
 
@@ -54,25 +54,19 @@
 
 ### Building solution
 
-Root directory for build is **boot/cypress.**
+Root directory for build is **boot/cypress**
 
 This folder contains make files infrastructure for building both MCUboot Bootloader and sample BlinkyApp application used for Bootloader demo functionality.
 
-Instructions on how to build and upload MCUBootApp bootloader application and sample user application are located in `Readme.md` files in corresponding folders.
+Instructions on how to build and upload MCUBootApp bootloader application and sample user application are located in corresponding `Readme` files of the `platforms` folder.
 
-Supported platforms for `MCUboot`, `BlinkyApp`:
+**GCC_ARM** is only supported GCC compiler. It is included with [ModusToolbox™ Programming Tools](https://softwaretools.infineon.com/tools/com.ifx.tb.tool.modustoolboxprogtools). The recommended version of the GCC_ARM compiler is 11.3.1.
 
-**GCC_ARM** is only supported (built and verified on GCC 9.3.1).
+The default installation folder is expected by the makefile build system.To use another installation folder, version of **ModusToolbox™ Programming Tools** or another GCC Compiler, specify the path to a toolchain using the **TOOLCHAIN_PATH** parameter.
 
-It is included with [ModusToolbox™ Software Environment](https://www.cypress.com/products/modustoolbox).
+Below is an example on how to set toolchain path:
 
-The default installation folder is expected by the makefile build system.
-
-To use another installation folder, version of **ModusToolbox™ IDE** or another GCC Compiler, specify the path to a toolchain using the **TOOLCHAIN_PATH** parameter.
-
-Below is an example on how to set toolchain path to the latest include with **ModusToolbox™ IDE 3.2**:
-
-    make clean app APP_NAME=MCUBootApp PLATFORM=PSOC_062_2M BUILDCFG=Debug FLASH_MAP=platforms/memory/PSOC6/flashmap/psoc6_swap_single.json TOOLCHAIN_PATH=c:/Users/${USERNAME}/ModusToolbox/tools_3.2/gcc
+    make clean app APP_NAME=MCUBootApp PLATFORM=PSOC_062_2M BUILDCFG=Debug FLASH_MAP=platforms/memory/PSOC6/flashmap/psoc6_swap_single.json TOOLCHAIN_PATH=c:/Users/${USERNAME}/Infineon/Tools/mtb-gcc-arm-eabi/11.3.1/gcc
 
 ### Build environment troubleshooting
 
@@ -80,7 +74,7 @@
 
 * Cygwin on Windows systems
 * unix style shells on *nix systems
-* Eclipse / ModusToolbox ("makefile project from existing source")
+* Eclipse / ModusToolbox™ ("makefile project from existing source")
 
 *Make* - make sure it is added to system's `PATH` variable and correct path is first in the list;
 
@@ -88,5 +82,5 @@
 
 *Msys2* - to use systems PATH navigate to msys2 folder, open `msys2_shell.cmd`, uncomment set `MSYS2_PATH_TYPE=inherit`, restart MSYS2 shell.
 
-This will inherit system's PATH so should find `python3.7` installed in regular way as well as imgtool and its dependencies.
+This will inherit system's PATH so should find `Python` installed in regular way as well as imgtool and its dependencies.
 
diff --git a/boot/cypress/build_config.mk b/boot/cypress/build_config.mk
index 966bd3f..b6f86b5 100644
--- a/boot/cypress/build_config.mk
+++ b/boot/cypress/build_config.mk
@@ -1,3 +1,21 @@
+################################################################################
+# \copyright
+# Copyright 2025 Cypress Semiconductor Corporation
+# SPDX-License-Identifier: Apache-2.0
+#
+# 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.
+################################################################################
+
 # Defines whether or not show verbose build output
 VERBOSE ?= 0
 
diff --git a/boot/cypress/common_libs.mk b/boot/cypress/common_libs.mk
index 240ce8c..5abd167 100644
--- a/boot/cypress/common_libs.mk
+++ b/boot/cypress/common_libs.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2021 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/host.mk b/boot/cypress/host.mk
index 6b6851e..660801c 100644
--- a/boot/cypress/host.mk
+++ b/boot/cypress/host.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2021 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/libs/cy-mbedtls-acceleration b/boot/cypress/libs/cy-mbedtls-acceleration
index f4f9de4..4ff35d0 160000
--- a/boot/cypress/libs/cy-mbedtls-acceleration
+++ b/boot/cypress/libs/cy-mbedtls-acceleration
@@ -1 +1 @@
-Subproject commit f4f9de4be6ebd2effc30f2b82eb6b4327555d89e
+Subproject commit 4ff35d09e3339d2d476e5972daa4576bdf2588e1
diff --git a/boot/cypress/libs/mtb-pdl-cat1 b/boot/cypress/libs/mtb-pdl-cat1
index baab436..6e1d7a3 160000
--- a/boot/cypress/libs/mtb-pdl-cat1
+++ b/boot/cypress/libs/mtb-pdl-cat1
@@ -1 +1 @@
-Subproject commit baab4365d2afc0df4c852ecc4df885775b15479f
+Subproject commit 6e1d7a397f61702aa1a56cb18750927e6a839528
diff --git a/boot/cypress/libs/retarget-io/cy_retarget_io.c b/boot/cypress/libs/retarget-io/cy_retarget_io.c
index c508666..4f2f8ff 100644
--- a/boot/cypress/libs/retarget-io/cy_retarget_io.c
+++ b/boot/cypress/libs/retarget-io/cy_retarget_io.c
@@ -7,7 +7,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/libs/retarget-io/cy_retarget_io.h b/boot/cypress/libs/retarget-io/cy_retarget_io.h
index fe2330d..7316ea9 100644
--- a/boot/cypress/libs/retarget-io/cy_retarget_io.h
+++ b/boot/cypress/libs/retarget-io/cy_retarget_io.h
@@ -14,7 +14,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms.mk b/boot/cypress/platforms.mk
index cab13d0..8e45bf1 100644
--- a/boot/cypress/platforms.mk
+++ b/boot/cypress/platforms.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/CYW20829/bluetooth/cybsp_bt_config.c b/boot/cypress/platforms/BSP/CYW20829/bluetooth/cybsp_bt_config.c
index f5e92f9..6726fb2 100644
--- a/boot/cypress/platforms/BSP/CYW20829/bluetooth/cybsp_bt_config.c
+++ b/boot/cypress/platforms/BSP/CYW20829/bluetooth/cybsp_bt_config.c
@@ -1,6 +1,6 @@
 /***********************************************************************************************//**
  * \copyright
- * Copyright 2020-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2020-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/bluetooth/cybsp_bt_config.h b/boot/cypress/platforms/BSP/CYW20829/bluetooth/cybsp_bt_config.h
index 75c8a49..ad26e70 100644
--- a/boot/cypress/platforms/BSP/CYW20829/bluetooth/cybsp_bt_config.h
+++ b/boot/cypress/platforms/BSP/CYW20829/bluetooth/cybsp_bt_config.h
@@ -1,6 +1,6 @@
 /***********************************************************************************************//**
  * \copyright
- * Copyright 2020-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2020-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp.c b/boot/cypress/platforms/BSP/CYW20829/cybsp.c
index e8407b7..bc97940 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp.c
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp.c
@@ -7,7 +7,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2018-2021 Cypress Semiconductor Corporation
+* Copyright 2018-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp.h b/boot/cypress/platforms/BSP/CYW20829/cybsp.h
index 6d5d663..7449625 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp.h
@@ -8,7 +8,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2021 Cypress Semiconductor Corporation
+ * Copyright 2018-2025 Cypress Semiconductor Corporation
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_doc.h b/boot/cypress/platforms/BSP/CYW20829/cybsp_doc.h
index 02bc2f0..cd6c8a0 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_doc.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_doc.h
@@ -1,6 +1,6 @@
 /***********************************************************************************************//**
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_dsram.c b/boot/cypress/platforms/BSP/CYW20829/cybsp_dsram.c
index b20862f..89b0fe5 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_dsram.c
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_dsram.c
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_dsram.h b/boot/cypress/platforms/BSP/CYW20829/cybsp_dsram.h
index a3e5137..f3012a6 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_dsram.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_dsram.h
@@ -6,7 +6,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2021 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_hw_config.h b/boot/cypress/platforms/BSP/CYW20829/cybsp_hw_config.h
index f4ff295..6aabdb3 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_hw_config.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_hw_config.h
@@ -7,7 +7,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_pm.c b/boot/cypress/platforms/BSP/CYW20829/cybsp_pm.c
index 254dc51..f35523b 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_pm.c
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_pm.c
@@ -7,7 +7,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_pm.h b/boot/cypress/platforms/BSP/CYW20829/cybsp_pm.h
index 27b12f3..5fe6182 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_pm.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_pm.h
@@ -6,7 +6,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_pm_callbacks.c b/boot/cypress/platforms/BSP/CYW20829/cybsp_pm_callbacks.c
index ed5f0af..3ce8145 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_pm_callbacks.c
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_pm_callbacks.c
@@ -7,7 +7,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_pm_callbacks.h b/boot/cypress/platforms/BSP/CYW20829/cybsp_pm_callbacks.h
index 4a41792..c5f6243 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_pm_callbacks.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_pm_callbacks.h
@@ -6,7 +6,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_smif_init.c b/boot/cypress/platforms/BSP/CYW20829/cybsp_smif_init.c
index 410be64..5885431 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_smif_init.c
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_smif_init.c
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_smif_init.h b/boot/cypress/platforms/BSP/CYW20829/cybsp_smif_init.h
index f4968c4..74be1f5 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_smif_init.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_smif_init.h
@@ -6,7 +6,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cybsp_types.h b/boot/cypress/platforms/BSP/CYW20829/cybsp_types.h
index aeb7023..c20d555 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cybsp_types.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cybsp_types.h
@@ -1,6 +1,6 @@
 /***********************************************************************************************//**
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg.c b/boot/cypress/platforms/BSP/CYW20829/cycfg.c
index 86c7e6a..8798d50 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg.c
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg.c
@@ -9,7 +9,7 @@
 * mtb-pdl-cat1 3.9.0.29592
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg.h b/boot/cypress/platforms/BSP/CYW20829/cycfg.h
index d2cf33f..3831527 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg.h
@@ -9,7 +9,7 @@
 * mtb-pdl-cat1 3.9.0.29592
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg_notices.h b/boot/cypress/platforms/BSP/CYW20829/cycfg_notices.h
index fc94cf2..218aeed 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg_notices.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg_notices.h
@@ -10,7 +10,7 @@
 * mtb-pdl-cat1 3.9.0.29592
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg_peripherals.c b/boot/cypress/platforms/BSP/CYW20829/cycfg_peripherals.c
index 0d1a34a..4679211 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg_peripherals.c
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg_peripherals.c
@@ -9,7 +9,7 @@
 * mtb-pdl-cat1 3.9.0.29592
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg_peripherals.h b/boot/cypress/platforms/BSP/CYW20829/cycfg_peripherals.h
index f625a9a..a1a38c9 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg_peripherals.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg_peripherals.h
@@ -9,7 +9,7 @@
 * mtb-pdl-cat1 3.9.0.29592
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg_pins.c b/boot/cypress/platforms/BSP/CYW20829/cycfg_pins.c
index 4ba698b..7727a1a 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg_pins.c
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg_pins.c
@@ -9,7 +9,7 @@
 * mtb-pdl-cat1 3.9.0.29592
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg_pins.h b/boot/cypress/platforms/BSP/CYW20829/cycfg_pins.h
index 60a717d..f220fcf 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg_pins.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg_pins.h
@@ -9,7 +9,7 @@
 * mtb-pdl-cat1 3.9.0.29592
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg_qspi_memslot.c b/boot/cypress/platforms/BSP/CYW20829/cycfg_qspi_memslot.c
index c1d6c4c..a74c843 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg_qspi_memslot.c
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg_qspi_memslot.c
@@ -7,7 +7,7 @@
 * QSPI Configurator 4.10.0.1343
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg_qspi_memslot.h b/boot/cypress/platforms/BSP/CYW20829/cycfg_qspi_memslot.h
index 422fb49..d2e7be3 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg_qspi_memslot.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg_qspi_memslot.h
@@ -7,7 +7,7 @@
 * QSPI Configurator 4.10.0.1343
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg_routing.h b/boot/cypress/platforms/BSP/CYW20829/cycfg_routing.h
index 1ced646..0340c87 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg_routing.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg_routing.h
@@ -9,7 +9,7 @@
 * mtb-pdl-cat1 3.9.0.29592
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg_system.c b/boot/cypress/platforms/BSP/CYW20829/cycfg_system.c
index f04cde5..65b0a71 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg_system.c
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg_system.c
@@ -9,7 +9,7 @@
 * mtb-pdl-cat1 3.9.0.29592
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/cycfg_system.h b/boot/cypress/platforms/BSP/CYW20829/cycfg_system.h
index 6395d20..7a31a13 100644
--- a/boot/cypress/platforms/BSP/CYW20829/cycfg_system.h
+++ b/boot/cypress/platforms/BSP/CYW20829/cycfg_system.h
@@ -9,7 +9,7 @@
 * mtb-pdl-cat1 3.9.0.29592
 *
 ********************************************************************************
-* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/system/COMPONENT_CM33/ns_start_cyw20829.c b/boot/cypress/platforms/BSP/CYW20829/system/COMPONENT_CM33/ns_start_cyw20829.c
index c77911d..1c9abe1 100644
--- a/boot/cypress/platforms/BSP/CYW20829/system/COMPONENT_CM33/ns_start_cyw20829.c
+++ b/boot/cypress/platforms/BSP/CYW20829/system/COMPONENT_CM33/ns_start_cyw20829.c
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright (c) (2020-2022), Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright (c) (2020-2025), Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/CYW20829/system/COMPONENT_CM33/ns_system_cyw20829.c b/boot/cypress/platforms/BSP/CYW20829/system/COMPONENT_CM33/ns_system_cyw20829.c
index 9adf3d7..b2f2a3a 100644
--- a/boot/cypress/platforms/BSP/CYW20829/system/COMPONENT_CM33/ns_system_cyw20829.c
+++ b/boot/cypress/platforms/BSP/CYW20829/system/COMPONENT_CM33/ns_system_cyw20829.c
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright (c) (2020-2022), Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright (c) (2020-2025), Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
@@ -128,7 +128,7 @@
     (void)Cy_SystemInit(); /* typecast void to suppress a compiler warning about unused return value */
 
     /* Unlock and disable WDT */
-#if !defined(DISABLE_WDT_FREE)
+#if defined(BSP_DISABLE_WDT)
     Cy_WDT_Unlock();
     Cy_WDT_Disable();
 #endif
diff --git a/boot/cypress/platforms/BSP/CYW20829/system/startup_cat1b.h b/boot/cypress/platforms/BSP/CYW20829/system/startup_cat1b.h
index 862b5b5..f2d0c49 100644
--- a/boot/cypress/platforms/BSP/CYW20829/system/startup_cat1b.h
+++ b/boot/cypress/platforms/BSP/CYW20829/system/startup_cat1b.h
@@ -7,7 +7,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2021 Cypress Semiconductor Corporation
+* Copyright 2016-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/CYW20829/system/system_cat1b.h b/boot/cypress/platforms/BSP/CYW20829/system/system_cat1b.h
index 81c48fd..b9a1b26 100644
--- a/boot/cypress/platforms/BSP/CYW20829/system/system_cat1b.h
+++ b/boot/cypress/platforms/BSP/CYW20829/system/system_cat1b.h
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2021 Cypress Semiconductor Corporation
+* Copyright 2016-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/CYW20829/system/system_cyw20829.h b/boot/cypress/platforms/BSP/CYW20829/system/system_cyw20829.h
index f136e81..9421a66 100644
--- a/boot/cypress/platforms/BSP/CYW20829/system/system_cyw20829.h
+++ b/boot/cypress/platforms/BSP/CYW20829/system/system_cyw20829.h
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright (c) (2020-2022), Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright (c) (2020-2025), Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/BSP/PSOC6/cybsp.c b/boot/cypress/platforms/BSP/PSOC6/cybsp.c
index d20fa97..d5f13c2 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cybsp.c
+++ b/boot/cypress/platforms/BSP/PSOC6/cybsp.c
@@ -7,7 +7,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
@@ -117,11 +117,11 @@
     // the CM4 if necessary.
     #if defined(CORE_NAME_CM0P_0) || !(__CM0P_PRESENT) || (defined(CORE_NAME_CM4_0) && \
     defined(CY_USING_PREBUILT_CM0P_IMAGE))
-    //cycfg_config_init();
+    cycfg_config_init();
     #endif
 
     // Do any additional configuration reservations that are needed on all cores.
-    //cycfg_config_reservations();
+    cycfg_config_reservations();
 
     if (CY_RSLT_SUCCESS == result)
     {
diff --git a/boot/cypress/platforms/BSP/PSOC6/cybsp.h b/boot/cypress/platforms/BSP/PSOC6/cybsp.h
index cd27cf6..7ba085f 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cybsp.h
+++ b/boot/cypress/platforms/BSP/PSOC6/cybsp.h
@@ -6,7 +6,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/PSOC6/cybsp_doc.h b/boot/cypress/platforms/BSP/PSOC6/cybsp_doc.h
index 1f9f0d6..cd6c8a0 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cybsp_doc.h
+++ b/boot/cypress/platforms/BSP/PSOC6/cybsp_doc.h
@@ -1,6 +1,6 @@
 /***********************************************************************************************//**
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
@@ -24,7 +24,7 @@
 #include "cyhal_pin_package.h"
 #endif
 /* CAT4 and CAT5 do not have configurators so the BSP defines pins in a non-generated header */
-#if defined(COMPONENT_CAT4) || defined(COMPONENT_CAT5)
+#if defined(COMPONENT_CAT4)
 #include "cybsp_pins.h"
 #else
 #include "cycfg.h"
diff --git a/boot/cypress/platforms/BSP/PSOC6/cybsp_hw_config.h b/boot/cypress/platforms/BSP/PSOC6/cybsp_hw_config.h
index 580d49c..b8f3546 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cybsp_hw_config.h
+++ b/boot/cypress/platforms/BSP/PSOC6/cybsp_hw_config.h
@@ -7,7 +7,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
@@ -28,6 +28,7 @@
 
 #include "cy_result.h"
 #include "cybsp_types.h"
+#include "cycfg_pins.h"
 
 #if defined(__cplusplus)
 extern "C" {
@@ -37,6 +38,13 @@
 #define CYBSP_USER_BTN_DRIVE          (CYHAL_GPIO_DRIVE_PULLUP)
 #endif
 
+#ifndef CYBSP_DEBUG_UART_CTS
+#define CYBSP_DEBUG_UART_CTS (NC)
+#endif
+#ifndef CYBSP_DEBUG_UART_RTS
+#define CYBSP_DEBUG_UART_RTS (NC)
+#endif
+
 #if defined(__cplusplus)
 }
 #endif
diff --git a/boot/cypress/platforms/BSP/PSOC6/cybsp_types.h b/boot/cypress/platforms/BSP/PSOC6/cybsp_types.h
index aeb7023..c20d555 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cybsp_types.h
+++ b/boot/cypress/platforms/BSP/PSOC6/cybsp_types.h
@@ -1,6 +1,6 @@
 /***********************************************************************************************//**
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg.c b/boot/cypress/platforms/BSP/PSOC6/cycfg.c
index ede3da0..12ba07f 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg.c
+++ b/boot/cypress/platforms/BSP/PSOC6/cycfg.c
@@ -1,33 +1,47 @@
 /*******************************************************************************
-* File Name: cycfg.c
-*
-* Description:
-* Wrapper function to initialize all generated code.
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../../output/libs/COMPONENT_PSOC6/psoc6pdl): 1.5.0.1837
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
+ * File Name: cycfg.c
+ *
+ * Description:
+ * Simple wrapper containing all generated files and function to initialize
+ * all generated code.
+ * This file was automatically generated and should not be modified.
+ * Configurator Backend 3.30.0
+ * device-db 4.5.20.7163
+ * mtb-pdl-cat1 3.100.0.38033
+ *
+ *******************************************************************************
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ******************************************************************************/
 
 #include "cycfg.h"
 
+/* This function is provided for compatibility with older 2.X style projects. */
 void init_cycfg_all(void)
 {
-	init_cycfg_system();
-	init_cycfg_clocks();
+    cycfg_config_init();
+    cycfg_config_reservations();
+}
+void cycfg_config_init(void)
+{
+    init_cycfg_system();
+    init_cycfg_routing();
+    init_cycfg_pins();
+}
+void cycfg_config_reservations(void)
+{
+    reserve_cycfg_pins();
 }
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg.h b/boot/cypress/platforms/BSP/PSOC6/cycfg.h
index 9b74187..bb1d9c6 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg.h
+++ b/boot/cypress/platforms/BSP/PSOC6/cycfg.h
@@ -1,45 +1,52 @@
 /*******************************************************************************
-* File Name: cycfg.h
-*
-* Description:
-* Simple wrapper header containing all generated files.
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../../output/libs/COMPONENT_PSOC6/psoc6pdl): 1.5.0.1837
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
+ * File Name: cycfg.h
+ *
+ * Description:
+ * Simple wrapper containing all generated files and function to initialize
+ * all generated code.
+ * This file was automatically generated and should not be modified.
+ * Configurator Backend 3.30.0
+ * device-db 4.5.20.7163
+ * mtb-pdl-cat1 3.100.0.38033
+ *
+ *******************************************************************************
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ******************************************************************************/
 
 #if !defined(CYCFG_H)
 #define CYCFG_H
 
+#include "cycfg_notices.h"
+#include "cycfg_system.h"
+#include "cycfg_routing.h"
+#include "cycfg_peripherals.h"
+#include "cycfg_pins.h"
+#include "cycfg_security.h"
+
 #if defined(__cplusplus)
 extern "C" {
-#endif
-
-#include "cycfg_system.h"
-#include "cycfg_clocks.h"
+#endif /* defined(__cplusplus) */
 
 void init_cycfg_all(void);
-
+void cycfg_config_init(void);
+void cycfg_config_reservations(void);
 
 #if defined(__cplusplus)
 }
-#endif
-
+#endif /* defined(__cplusplus) */
 
 #endif /* CYCFG_H */
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_clocks.c b/boot/cypress/platforms/BSP/PSOC6/cycfg_clocks.c
deleted file mode 100644
index 48c1497..0000000
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg_clocks.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
-* File Name: cycfg_clocks.c
-*
-* Description:
-* Clock configuration
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../../output/libs/COMPONENT_PSOC6/psoc6pdl): 1.5.0.1837
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
-
-#include "cycfg_clocks.h"
-
-#if defined (CY_USING_HAL)
-    const cyhal_resource_inst_t CYBSP_CSD_CLK_DIV_obj =
-    {
-        .type = CYHAL_RSC_CLOCK,
-        .block_num = CYBSP_CSD_CLK_DIV_HW,
-        .channel_num = CYBSP_CSD_CLK_DIV_NUM,
-    };
-#endif //defined (CY_USING_HAL)
-
-
-void init_cycfg_clocks(void)
-{
-    (void)Cy_SysClk_PeriphDisableDivider(CY_SYSCLK_DIV_8_BIT, 0U);
-    (void)Cy_SysClk_PeriphSetDivider(CY_SYSCLK_DIV_8_BIT, 0U, 0U);
-    (void)Cy_SysClk_PeriphEnableDivider(CY_SYSCLK_DIV_8_BIT, 0U);
-#if defined (CY_USING_HAL)
-    cyhal_hwmgr_reserve(&CYBSP_CSD_CLK_DIV_obj);
-#endif //defined (CY_USING_HAL)
-}
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_clocks.h b/boot/cypress/platforms/BSP/PSOC6/cycfg_clocks.h
deleted file mode 100644
index 5766ab5..0000000
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg_clocks.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
-* File Name: cycfg_clocks.h
-*
-* Description:
-* Clock configuration
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../../output/libs/COMPONENT_PSOC6/psoc6pdl): 1.5.0.1837
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
-
-#if !defined(CYCFG_CLOCKS_H)
-#define CYCFG_CLOCKS_H
-
-#include "cy_sysclk.h"
-#if defined (CY_USING_HAL)
-	#include "cyhal_hwmgr.h"
-#endif //defined (CY_USING_HAL)
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-#define CYBSP_CSD_CLK_DIV_ENABLED 1U
-#define CYBSP_CSD_CLK_DIV_HW CY_SYSCLK_DIV_8_BIT
-#define CYBSP_CSD_CLK_DIV_NUM 0U
-
-#if defined (CY_USING_HAL)
-	extern const cyhal_resource_inst_t CYBSP_CSD_CLK_DIV_obj;
-#endif //defined (CY_USING_HAL)
-
-void init_cycfg_clocks(void);
-
-#if defined(__cplusplus)
-}
-#endif
-
-
-#endif /* CYCFG_CLOCKS_H */
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_notices.h b/boot/cypress/platforms/BSP/PSOC6/cycfg_notices.h
new file mode 100644
index 0000000..6b5ba8b
--- /dev/null
+++ b/boot/cypress/platforms/BSP/PSOC6/cycfg_notices.h
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * File Name: cycfg_notices.h
+ *
+ * Description:
+ * Contains warnings and errors that occurred while generating code for the
+ * design.
+ * This file was automatically generated and should not be modified.
+ * Configurator Backend 3.30.0
+ * device-db 4.5.20.7163
+ * mtb-pdl-cat1 3.100.0.38033
+ *
+ *******************************************************************************
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ******************************************************************************/
+
+#if !defined(CYCFG_NOTICES_H)
+#define CYCFG_NOTICES_H
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#if defined(CY_SUPPORTS_DEVICE_VALIDATION)
+#if !defined(CYBLE_416045_02_device)
+#error "Unexpected MPN; expected DEVICE:=CYBLE-416045-02-device. There may be an inconsistency between the *.modus file and the makefile target configuration device sets."
+#endif /* !defined(CYBLE_416045_02_device) */
+#endif /* defined(CY_SUPPORTS_DEVICE_VALIDATION) */
+
+#if defined(CY_SUPPORTS_COMPLETE_DEVICE_VALIDATION)
+#if !defined(CYBLE_416045_02_device)
+#error "Unexpected MPN; expected DEVICE:=CYBLE-416045-02-device. There may be an inconsistency between the *.modus file and the makefile target configuration device sets."
+#endif /* !defined(CYBLE_416045_02_device) */
+#endif /* defined(CY_SUPPORTS_COMPLETE_DEVICE_VALIDATION) */
+
+#if defined(__cplusplus)
+}
+#endif /* defined(__cplusplus) */
+
+#endif /* CYCFG_NOTICES_H */
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_peripherals.c b/boot/cypress/platforms/BSP/PSOC6/cycfg_peripherals.c
deleted file mode 100644
index a694256..0000000
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg_peripherals.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
-* File Name: cycfg_peripherals.c
-*
-* Description:
-* Peripheral Hardware Block configuration
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../psoc6pdl): 1.3.1.1499
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
-
-#include "cycfg_peripherals.h"
-
-void init_cycfg_peripherals(void)
-{
-
-}
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_peripherals.h b/boot/cypress/platforms/BSP/PSOC6/cycfg_peripherals.h
index f4133a8..7da72e7 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg_peripherals.h
+++ b/boot/cypress/platforms/BSP/PSOC6/cycfg_peripherals.h
@@ -1,48 +1,42 @@
 /*******************************************************************************
-* File Name: cycfg_peripherals.h
-*
-* Description:
-* Peripheral Hardware Block configuration
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../psoc6pdl): 1.3.1.1499
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
+ * File Name: cycfg_peripherals.h
+ *
+ * Description:
+ * Peripheral Hardware Block configuration
+ * This file was automatically generated and should not be modified.
+ * Configurator Backend 3.30.0
+ * device-db 4.5.20.7163
+ * mtb-pdl-cat1 3.100.0.38033
+ *
+ *******************************************************************************
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ******************************************************************************/
 
 #if !defined(CYCFG_PERIPHERALS_H)
 #define CYCFG_PERIPHERALS_H
 
-// #include "cycfg_notices.h"
-#include "cy_scb_uart.h"
-#include "cy_sysclk.h"
-#if defined (CY_USING_HAL)
-    #include "cyhal_hwmgr.h"
-#endif //defined (CY_USING_HAL)
+#include "cycfg_notices.h"
 
 #if defined(__cplusplus)
 extern "C" {
-#endif
-
-void init_cycfg_peripherals(void);
+#endif /* defined(__cplusplus) */
 
 #if defined(__cplusplus)
 }
-#endif
-
+#endif /* defined(__cplusplus) */
 
 #endif /* CYCFG_PERIPHERALS_H */
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_pins.c b/boot/cypress/platforms/BSP/PSOC6/cycfg_pins.c
index 0ba461d..4752cdd 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg_pins.c
+++ b/boot/cypress/platforms/BSP/PSOC6/cycfg_pins.c
@@ -1,32 +1,148 @@
 /*******************************************************************************
-* File Name: cycfg_pins.c
-*
-* Description:
-* Pin configuration
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../psoc6pdl): 1.3.1.1499
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
+ * File Name: cycfg_pins.c
+ *
+ * Description:
+ * Pin configuration
+ * This file was automatically generated and should not be modified.
+ * Configurator Backend 3.30.0
+ * device-db 4.5.20.7163
+ * mtb-pdl-cat1 3.100.0.38033
+ *
+ *******************************************************************************
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ******************************************************************************/
 
 #include "cycfg_pins.h"
 
+const cy_stc_gpio_pin_config_t WCO_IN_config =
+{
+    .outVal = 1,
+    .driveMode = CY_GPIO_DM_ANALOG,
+    .hsiom = WCO_IN_HSIOM,
+    .intEdge = CY_GPIO_INTR_DISABLE,
+    .intMask = 0UL,
+    .vtrip = CY_GPIO_VTRIP_CMOS,
+    .slewRate = CY_GPIO_SLEW_FAST,
+    .driveSel = CY_GPIO_DRIVE_1_2,
+    .vregEn = 0UL,
+    .ibufMode = 0UL,
+    .vtripSel = 0UL,
+    .vrefSel = 0UL,
+    .vohSel = 0UL,
+};
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+const cyhal_resource_inst_t WCO_IN_obj =
+{
+    .type = CYHAL_RSC_GPIO,
+    .block_num = WCO_IN_PORT_NUM,
+    .channel_num = WCO_IN_PIN,
+};
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
+const cy_stc_gpio_pin_config_t WCO_OUT_config =
+{
+    .outVal = 1,
+    .driveMode = CY_GPIO_DM_ANALOG,
+    .hsiom = WCO_OUT_HSIOM,
+    .intEdge = CY_GPIO_INTR_DISABLE,
+    .intMask = 0UL,
+    .vtrip = CY_GPIO_VTRIP_CMOS,
+    .slewRate = CY_GPIO_SLEW_FAST,
+    .driveSel = CY_GPIO_DRIVE_1_2,
+    .vregEn = 0UL,
+    .ibufMode = 0UL,
+    .vtripSel = 0UL,
+    .vrefSel = 0UL,
+    .vohSel = 0UL,
+};
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+const cyhal_resource_inst_t WCO_OUT_obj =
+{
+    .type = CYHAL_RSC_GPIO,
+    .block_num = WCO_OUT_PORT_NUM,
+    .channel_num = WCO_OUT_PIN,
+};
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
+const cy_stc_gpio_pin_config_t SWDIO_config =
+{
+    .outVal = 1,
+    .driveMode = CY_GPIO_DM_PULLUP,
+    .hsiom = SWDIO_HSIOM,
+    .intEdge = CY_GPIO_INTR_DISABLE,
+    .intMask = 0UL,
+    .vtrip = CY_GPIO_VTRIP_CMOS,
+    .slewRate = CY_GPIO_SLEW_FAST,
+    .driveSel = CY_GPIO_DRIVE_1_2,
+    .vregEn = 0UL,
+    .ibufMode = 0UL,
+    .vtripSel = 0UL,
+    .vrefSel = 0UL,
+    .vohSel = 0UL,
+};
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+const cyhal_resource_inst_t SWDIO_obj =
+{
+    .type = CYHAL_RSC_GPIO,
+    .block_num = SWDIO_PORT_NUM,
+    .channel_num = SWDIO_PIN,
+};
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
+const cy_stc_gpio_pin_config_t SWCLK_config =
+{
+    .outVal = 1,
+    .driveMode = CY_GPIO_DM_PULLDOWN,
+    .hsiom = SWCLK_HSIOM,
+    .intEdge = CY_GPIO_INTR_DISABLE,
+    .intMask = 0UL,
+    .vtrip = CY_GPIO_VTRIP_CMOS,
+    .slewRate = CY_GPIO_SLEW_FAST,
+    .driveSel = CY_GPIO_DRIVE_1_2,
+    .vregEn = 0UL,
+    .ibufMode = 0UL,
+    .vtripSel = 0UL,
+    .vrefSel = 0UL,
+    .vohSel = 0UL,
+};
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+const cyhal_resource_inst_t SWCLK_obj =
+{
+    .type = CYHAL_RSC_GPIO,
+    .block_num = SWCLK_PORT_NUM,
+    .channel_num = SWCLK_PIN,
+};
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
 void init_cycfg_pins(void)
 {
-    
+    Cy_GPIO_Pin_Init(SWDIO_PORT, SWDIO_PIN, &SWDIO_config);
+    Cy_GPIO_Pin_Init(SWCLK_PORT, SWCLK_PIN, &SWCLK_config);
+}
+void reserve_cycfg_pins(void)
+{
+#if defined (CY_USING_HAL)
+    cyhal_hwmgr_reserve(&WCO_IN_obj);
+    cyhal_hwmgr_reserve(&WCO_OUT_obj);
+    cyhal_hwmgr_reserve(&SWDIO_obj);
+    cyhal_hwmgr_reserve(&SWCLK_obj);
+#endif /* defined (CY_USING_HAL) */
 }
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_pins.h b/boot/cypress/platforms/BSP/PSOC6/cycfg_pins.h
index 9adea11..a0111fc 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg_pins.h
+++ b/boot/cypress/platforms/BSP/PSOC6/cycfg_pins.h
@@ -1,47 +1,197 @@
 /*******************************************************************************
-* File Name: cycfg_pins.h
-*
-* Description:
-* Pin configuration
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../psoc6pdl): 1.3.1.1499
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
+ * File Name: cycfg_pins.h
+ *
+ * Description:
+ * Pin configuration
+ * This file was automatically generated and should not be modified.
+ * Configurator Backend 3.30.0
+ * device-db 4.5.20.7163
+ * mtb-pdl-cat1 3.100.0.38033
+ *
+ *******************************************************************************
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ******************************************************************************/
 
 #if !defined(CYCFG_PINS_H)
 #define CYCFG_PINS_H
 
+#include "cycfg_notices.h"
 #include "cy_gpio.h"
-#if defined (CY_USING_HAL)
-    #include "cyhal_hwmgr.h"
-#endif //defined (CY_USING_HAL)
 #include "cycfg_routing.h"
 
+#if defined (CY_USING_HAL)
+#include "cyhal_hwmgr.h"
+#endif /* defined (CY_USING_HAL) */
+
+#if defined (CY_USING_HAL_LITE)
+#include "cyhal_hw_types.h"
+#endif /* defined (CY_USING_HAL_LITE) */
+
 #if defined(__cplusplus)
 extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define WCO_IN_ENABLED 1U
+#define WCO_IN_PORT GPIO_PRT0
+#define WCO_IN_PORT_NUM 0U
+#define WCO_IN_PIN 0U
+#define WCO_IN_NUM 0U
+#define WCO_IN_DRIVEMODE CY_GPIO_DM_ANALOG
+#define WCO_IN_INIT_DRIVESTATE 1
+#ifndef ioss_0_port_0_pin_0_HSIOM
+    #define ioss_0_port_0_pin_0_HSIOM HSIOM_SEL_GPIO
 #endif
+#define WCO_IN_HSIOM ioss_0_port_0_pin_0_HSIOM
+#define WCO_IN_IRQ ioss_interrupts_gpio_0_IRQn
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+#define WCO_IN_HAL_PORT_PIN P0_0
+#define WCO_IN P0_0
+#define WCO_IN_HAL_IRQ CYHAL_GPIO_IRQ_NONE
+#define WCO_IN_HAL_DIR CYHAL_GPIO_DIR_INPUT 
+#define WCO_IN_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
+#define WCO_OUT_ENABLED 1U
+#define WCO_OUT_PORT GPIO_PRT0
+#define WCO_OUT_PORT_NUM 0U
+#define WCO_OUT_PIN 1U
+#define WCO_OUT_NUM 1U
+#define WCO_OUT_DRIVEMODE CY_GPIO_DM_ANALOG
+#define WCO_OUT_INIT_DRIVESTATE 1
+#ifndef ioss_0_port_0_pin_1_HSIOM
+    #define ioss_0_port_0_pin_1_HSIOM HSIOM_SEL_GPIO
+#endif
+#define WCO_OUT_HSIOM ioss_0_port_0_pin_1_HSIOM
+#define WCO_OUT_IRQ ioss_interrupts_gpio_0_IRQn
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+#define WCO_OUT_HAL_PORT_PIN P0_1
+#define WCO_OUT P0_1
+#define WCO_OUT_HAL_IRQ CYHAL_GPIO_IRQ_NONE
+#define WCO_OUT_HAL_DIR CYHAL_GPIO_DIR_INPUT 
+#define WCO_OUT_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
+#define SWDIO_ENABLED 1U
+#define CYBSP_SWDIO_ENABLED SWDIO_ENABLED
+#define SWDIO_PORT GPIO_PRT6
+#define CYBSP_SWDIO_PORT SWDIO_PORT
+#define SWDIO_PORT_NUM 6U
+#define CYBSP_SWDIO_PORT_NUM SWDIO_PORT_NUM
+#define SWDIO_PIN 6U
+#define CYBSP_SWDIO_PIN SWDIO_PIN
+#define SWDIO_NUM 6U
+#define CYBSP_SWDIO_NUM SWDIO_NUM
+#define SWDIO_DRIVEMODE CY_GPIO_DM_PULLUP
+#define CYBSP_SWDIO_DRIVEMODE SWDIO_DRIVEMODE
+#define SWDIO_INIT_DRIVESTATE 1
+#define CYBSP_SWDIO_INIT_DRIVESTATE SWDIO_INIT_DRIVESTATE
+#ifndef ioss_0_port_6_pin_6_HSIOM
+    #define ioss_0_port_6_pin_6_HSIOM HSIOM_SEL_GPIO
+#endif
+#define SWDIO_HSIOM ioss_0_port_6_pin_6_HSIOM
+#define CYBSP_SWDIO_HSIOM SWDIO_HSIOM
+#define SWDIO_IRQ ioss_interrupts_gpio_6_IRQn
+#define CYBSP_SWDIO_IRQ SWDIO_IRQ
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+#define SWDIO_HAL_PORT_PIN P6_6
+#define CYBSP_SWDIO_HAL_PORT_PIN SWDIO_HAL_PORT_PIN
+#define SWDIO P6_6
+#define CYBSP_SWDIO SWDIO
+#define SWDIO_HAL_IRQ CYHAL_GPIO_IRQ_NONE
+#define CYBSP_SWDIO_HAL_IRQ SWDIO_HAL_IRQ
+#define SWDIO_HAL_DIR CYHAL_GPIO_DIR_BIDIRECTIONAL 
+#define CYBSP_SWDIO_HAL_DIR SWDIO_HAL_DIR
+#define SWDIO_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_PULLUP
+#define CYBSP_SWDIO_HAL_DRIVEMODE SWDIO_HAL_DRIVEMODE
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
+#define SWCLK_ENABLED 1U
+#define CYBSP_SWDCK_ENABLED SWCLK_ENABLED
+#define SWCLK_PORT GPIO_PRT6
+#define CYBSP_SWDCK_PORT SWCLK_PORT
+#define SWCLK_PORT_NUM 6U
+#define CYBSP_SWDCK_PORT_NUM SWCLK_PORT_NUM
+#define SWCLK_PIN 7U
+#define CYBSP_SWDCK_PIN SWCLK_PIN
+#define SWCLK_NUM 7U
+#define CYBSP_SWDCK_NUM SWCLK_NUM
+#define SWCLK_DRIVEMODE CY_GPIO_DM_PULLDOWN
+#define CYBSP_SWDCK_DRIVEMODE SWCLK_DRIVEMODE
+#define SWCLK_INIT_DRIVESTATE 1
+#define CYBSP_SWDCK_INIT_DRIVESTATE SWCLK_INIT_DRIVESTATE
+#ifndef ioss_0_port_6_pin_7_HSIOM
+    #define ioss_0_port_6_pin_7_HSIOM HSIOM_SEL_GPIO
+#endif
+#define SWCLK_HSIOM ioss_0_port_6_pin_7_HSIOM
+#define CYBSP_SWDCK_HSIOM SWCLK_HSIOM
+#define SWCLK_IRQ ioss_interrupts_gpio_6_IRQn
+#define CYBSP_SWDCK_IRQ SWCLK_IRQ
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+#define SWCLK_HAL_PORT_PIN P6_7
+#define CYBSP_SWDCK_HAL_PORT_PIN SWCLK_HAL_PORT_PIN
+#define SWCLK P6_7
+#define CYBSP_SWDCK SWCLK
+#define SWCLK_HAL_IRQ CYHAL_GPIO_IRQ_NONE
+#define CYBSP_SWDCK_HAL_IRQ SWCLK_HAL_IRQ
+#define SWCLK_HAL_DIR CYHAL_GPIO_DIR_BIDIRECTIONAL 
+#define CYBSP_SWDCK_HAL_DIR SWCLK_HAL_DIR
+#define SWCLK_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_PULLDOWN
+#define CYBSP_SWDCK_HAL_DRIVEMODE SWCLK_HAL_DRIVEMODE
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
+extern const cy_stc_gpio_pin_config_t WCO_IN_config;
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+extern const cyhal_resource_inst_t WCO_IN_obj;
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
+extern const cy_stc_gpio_pin_config_t WCO_OUT_config;
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+extern const cyhal_resource_inst_t WCO_OUT_obj;
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
+extern const cy_stc_gpio_pin_config_t SWDIO_config;
+
+#define CYBSP_SWDIO_config SWDIO_config
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+extern const cyhal_resource_inst_t SWDIO_obj;
+#define CYBSP_SWDIO_obj SWDIO_obj
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
+
+extern const cy_stc_gpio_pin_config_t SWCLK_config;
+
+#define CYBSP_SWDCK_config SWCLK_config
+
+#if defined (CY_USING_HAL) || (CY_USING_HAL_LITE)
+extern const cyhal_resource_inst_t SWCLK_obj;
+#define CYBSP_SWDCK_obj SWCLK_obj
+#endif /* defined (CY_USING_HAL) || (CY_USING_HAL_LITE) */
 
 void init_cycfg_pins(void);
+void reserve_cycfg_pins(void);
 
 #if defined(__cplusplus)
 }
-#endif
-
+#endif /* defined(__cplusplus) */
 
 #endif /* CYCFG_PINS_H */
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_routing.c b/boot/cypress/platforms/BSP/PSOC6/cycfg_routing.c
deleted file mode 100644
index 063e736..0000000
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg_routing.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
-* File Name: cycfg_routing.c
-*
-* Description:
-* Establishes all necessary connections between hardware elements.
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../psoc6pdl): 1.4.0.1889
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
-
-#include "cycfg_routing.h"
-
-void init_cycfg_routing(void)
-{
-}
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_routing.h b/boot/cypress/platforms/BSP/PSOC6/cycfg_routing.h
index dbedb11..8daeebd 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg_routing.h
+++ b/boot/cypress/platforms/BSP/PSOC6/cycfg_routing.h
@@ -1,43 +1,49 @@
 /*******************************************************************************
-* File Name: cycfg_routing.h
-*
-* Description:
-* Establishes all necessary connections between hardware elements.
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../psoc6pdl): 1.4.0.1889
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
+ * File Name: cycfg_routing.h
+ *
+ * Description:
+ * Establishes all necessary connections between hardware elements.
+ * This file was automatically generated and should not be modified.
+ * Configurator Backend 3.30.0
+ * device-db 4.5.20.7163
+ * mtb-pdl-cat1 3.100.0.38033
+ *
+ *******************************************************************************
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ******************************************************************************/
 
 #if !defined(CYCFG_ROUTING_H)
 #define CYCFG_ROUTING_H
 
+#include "cycfg_notices.h"
+
 #if defined(__cplusplus)
 extern "C" {
-#endif
+#endif /* defined(__cplusplus) */
 
-void init_cycfg_routing(void);
+#define ioss_0_port_0_pin_0_ANALOG P0_0_SRSS_WCO_IN
+#define ioss_0_port_0_pin_1_ANALOG P0_1_SRSS_WCO_OUT
+#define ioss_0_port_6_pin_6_HSIOM P6_6_CPUSS_SWJ_SWDIO_TMS
+#define ioss_0_port_6_pin_7_HSIOM P6_7_CPUSS_SWJ_SWCLK_TCLK
 
-#define init_cycfg_connectivity() init_cycfg_routing()
+static inline void init_cycfg_routing(void) {}
 
 #if defined(__cplusplus)
 }
-#endif
-
+#endif /* defined(__cplusplus) */
 
 #endif /* CYCFG_ROUTING_H */
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_security.h b/boot/cypress/platforms/BSP/PSOC6/cycfg_security.h
new file mode 100644
index 0000000..40c251a
--- /dev/null
+++ b/boot/cypress/platforms/BSP/PSOC6/cycfg_security.h
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * File Name: cycfg_security.h
+ *
+ * Description:
+ * Memory configuration
+ * This file was automatically generated and should not be modified.
+ * Configurator Backend 3.30.0
+ * device-db 4.5.20.7163
+ * mtb-pdl-cat1 3.100.0.38033
+ *
+ *******************************************************************************
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ******************************************************************************/
+
+#if !defined(CYCFG_SECURITY_H)
+#define CYCFG_SECURITY_H
+
+#include "cycfg_notices.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#if defined(__cplusplus)
+}
+#endif /* defined(__cplusplus) */
+
+#endif /* CYCFG_SECURITY_H */
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_system.c b/boot/cypress/platforms/BSP/PSOC6/cycfg_system.c
index fac7a2b..21471b8 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg_system.c
+++ b/boot/cypress/platforms/BSP/PSOC6/cycfg_system.c
@@ -1,72 +1,107 @@
 /*******************************************************************************
-* File Name: cycfg_system.c
-*
-* Description:
-* System configuration
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../../output/libs/COMPONENT_PSOC6/psoc6pdl): 1.5.0.1837
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
+ * File Name: cycfg_system.c
+ *
+ * Description:
+ * System configuration
+ * This file was automatically generated and should not be modified.
+ * Configurator Backend 3.30.0
+ * device-db 4.5.20.7163
+ * mtb-pdl-cat1 3.100.0.38033
+ *
+ *******************************************************************************
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ******************************************************************************/
 
 #include "cycfg_system.h"
-#include "cy_ble_clk.h"
 
 #define CY_CFG_SYSCLK_ECO_ERROR 1
 #define CY_CFG_SYSCLK_ALTHF_ERROR 2
 #define CY_CFG_SYSCLK_PLL_ERROR 3
 #define CY_CFG_SYSCLK_FLL_ERROR 4
 #define CY_CFG_SYSCLK_WCO_ERROR 5
-#define CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED 1
 #define CY_CFG_SYSCLK_CLKBAK_ENABLED 1
+#define CY_CFG_SYSCLK_CLKBAK_SOURCE CY_SYSCLK_BAK_IN_WCO
 #define CY_CFG_SYSCLK_CLKFAST_ENABLED 1
+#define CY_CFG_SYSCLK_CLKFAST_DIVIDER 0
 #define CY_CFG_SYSCLK_FLL_ENABLED 1
+#define CY_CFG_SYSCLK_FLL_MULT 500U
+#define CY_CFG_SYSCLK_FLL_REFDIV 20U
+#define CY_CFG_SYSCLK_FLL_CCO_RANGE CY_SYSCLK_FLL_CCO_RANGE4
+#define CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV true
+#define CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE 10U
+#define CY_CFG_SYSCLK_FLL_IGAIN 9U
+#define CY_CFG_SYSCLK_FLL_PGAIN 5U
+#define CY_CFG_SYSCLK_FLL_SETTLING_COUNT 8U
+#define CY_CFG_SYSCLK_FLL_OUTPUT_MODE CY_SYSCLK_FLLPLL_OUTPUT_OUTPUT
+#define CY_CFG_SYSCLK_FLL_CCO_FREQ 355U
+#define CY_CFG_SYSCLK_FLL_OUT_FREQ 100000000
 #define CY_CFG_SYSCLK_CLKHF0_ENABLED 1
+#define CY_CFG_SYSCLK_CLKHF0_DIVIDER CY_SYSCLK_CLKHF_NO_DIVIDE
 #define CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ 100UL
 #define CY_CFG_SYSCLK_CLKHF0_CLKPATH CY_SYSCLK_CLKHF_IN_CLKPATH0
-#define CY_CFG_SYSCLK_CLKHF2_ENABLED 1
-#define CY_CFG_SYSCLK_CLKHF2_FREQ_MHZ 50UL
-#define CY_CFG_SYSCLK_CLKHF2_CLKPATH CY_SYSCLK_CLKHF_IN_CLKPATH0
-#define CY_CFG_SYSCLK_CLKHF3_ENABLED 1
-#define CY_CFG_SYSCLK_CLKHF3_FREQ_MHZ 100UL
-#define CY_CFG_SYSCLK_CLKHF3_CLKPATH CY_SYSCLK_CLKHF_IN_CLKPATH0
-#define CY_CFG_SYSCLK_CLKHF4_ENABLED 1
-#define CY_CFG_SYSCLK_CLKHF4_FREQ_MHZ 100UL
-#define CY_CFG_SYSCLK_CLKHF4_CLKPATH CY_SYSCLK_CLKHF_IN_CLKPATH0
 #define CY_CFG_SYSCLK_ILO_ENABLED 1
+#define CY_CFG_SYSCLK_ILO_HIBERNATE true
 #define CY_CFG_SYSCLK_IMO_ENABLED 1
 #define CY_CFG_SYSCLK_CLKLF_ENABLED 1
 #define CY_CFG_SYSCLK_CLKPATH0_ENABLED 1
 #define CY_CFG_SYSCLK_CLKPATH0_SOURCE CY_SYSCLK_CLKPATH_IN_IMO
+#define CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM 0UL
 #define CY_CFG_SYSCLK_CLKPATH1_ENABLED 1
 #define CY_CFG_SYSCLK_CLKPATH1_SOURCE CY_SYSCLK_CLKPATH_IN_IMO
+#define CY_CFG_SYSCLK_CLKPATH1_SOURCE_NUM 0UL
 #define CY_CFG_SYSCLK_CLKPATH2_ENABLED 1
 #define CY_CFG_SYSCLK_CLKPATH2_SOURCE CY_SYSCLK_CLKPATH_IN_IMO
-#define CY_CFG_SYSCLK_CLKPERI_ENABLED 1
+#define CY_CFG_SYSCLK_CLKPATH2_SOURCE_NUM 0UL
+#define CY_CFG_SYSCLK_CLKPATH3_ENABLED 1
+#define CY_CFG_SYSCLK_CLKPATH3_SOURCE CY_SYSCLK_CLKPATH_IN_IMO
+#define CY_CFG_SYSCLK_CLKPATH3_SOURCE_NUM 0UL
+#define CY_CFG_SYSCLK_CLKPATH4_ENABLED 1
+#define CY_CFG_SYSCLK_CLKPATH4_SOURCE CY_SYSCLK_CLKPATH_IN_IMO
+#define CY_CFG_SYSCLK_CLKPATH4_SOURCE_NUM 0UL
 #define CY_CFG_SYSCLK_PLL0_ENABLED 1
-#define CY_CFG_SYSCLK_PLL1_ENABLED 1
+#define CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV 30
+#define CY_CFG_SYSCLK_PLL0_REFERENCE_DIV 1
+#define CY_CFG_SYSCLK_PLL0_OUTPUT_DIV 5
+#define CY_CFG_SYSCLK_PLL0_LF_MODE false
+#define CY_CFG_SYSCLK_PLL0_OUTPUT_MODE CY_SYSCLK_FLLPLL_OUTPUT_AUTO
+#define CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ 48000000
 #define CY_CFG_SYSCLK_CLKSLOW_ENABLED 1
-#define CY_CFG_SYSCLK_CLKTIMER_ENABLED 1
+#define CY_CFG_SYSCLK_CLKSLOW_DIVIDER 0
 #define CY_CFG_SYSCLK_WCO_ENABLED 1
+#define CY_CFG_SYSCLK_WCO_IN_PRT GPIO_PRT0
+#define CY_CFG_SYSCLK_WCO_IN_PIN 0U
+#define CY_CFG_SYSCLK_WCO_OUT_PRT GPIO_PRT0
+#define CY_CFG_SYSCLK_WCO_OUT_PIN 1U
+#define CY_CFG_SYSCLK_WCO_BYPASS CY_SYSCLK_WCO_NOT_BYPASSED
+#define CY_CFG_PWR_ENABLED 1
+#define CY_CFG_PWR_INIT 1
+#define CY_CFG_PWR_USING_PMIC 0
+#define CY_CFG_PWR_VBACKUP_USING_VDDD 1
+#define CY_CFG_PWR_LDO_VOLTAGE CY_SYSPM_LDO_VOLTAGE_LP
+#define CY_CFG_PWR_USING_ULP 0
+#define CY_CFG_PWR_REGULATOR_MODE_MIN 0
+#define CY_CFG_PWR_BKP_ERROR 6
 
-void cycfg_ClockStartupError(uint32_t error);
+#if defined (CY_DEVICE_SECURE)
+static cy_stc_pra_system_config_t srss_0_clock_0_secureConfig;
+#endif /* defined (CY_DEVICE_SECURE) */
 
-static const cy_stc_fll_manual_config_t srss_0_clock_0_fll_0_fllConfig = 
+#if (!defined(CY_DEVICE_SECURE))
+static const cy_stc_fll_manual_config_t srss_0_clock_0_fll_0_fllConfig =
 {
     .fllMult = 500U,
     .refDiv = 20U,
@@ -79,39 +114,43 @@
     .outputMode = CY_SYSCLK_FLLPLL_OUTPUT_OUTPUT,
     .cco_Freq = 355U,
 };
+#endif /* (!defined(CY_DEVICE_SECURE)) */
+
 #if defined (CY_USING_HAL)
-    const cyhal_resource_inst_t srss_0_clock_0_pathmux_0_obj =
-    {
-        .type = CYHAL_RSC_CLKPATH,
-        .block_num = 0U,
-        .channel_num = 0U,
-    };
-#endif //defined (CY_USING_HAL)
-#if defined (CY_USING_HAL)
-    const cyhal_resource_inst_t srss_0_clock_0_pathmux_1_obj =
-    {
-        .type = CYHAL_RSC_CLKPATH,
-        .block_num = 1U,
-        .channel_num = 0U,
-    };
-#endif //defined (CY_USING_HAL)
-#if defined (CY_USING_HAL)
-    const cyhal_resource_inst_t srss_0_clock_0_pathmux_2_obj =
-    {
-        .type = CYHAL_RSC_CLKPATH,
-        .block_num = 2U,
-        .channel_num = 0U,
-    };
-#endif //defined (CY_USING_HAL)
-static const cy_stc_pll_manual_config_t srss_0_clock_0_pll_0_pllConfig = 
+const cyhal_resource_inst_t srss_0_clock_0_pathmux_0_obj =
 {
-    .feedbackDiv = 36,
-    .referenceDiv = 1,
-    .outputDiv = 2,
-    .lfMode = false,
-    .outputMode = CY_SYSCLK_FLLPLL_OUTPUT_AUTO,
+    .type = CYHAL_RSC_CLKPATH,
+    .block_num = 0U,
+    .channel_num = 0U,
 };
-static const cy_stc_pll_manual_config_t srss_0_clock_0_pll_1_pllConfig = 
+const cyhal_resource_inst_t srss_0_clock_0_pathmux_1_obj =
+{
+    .type = CYHAL_RSC_CLKPATH,
+    .block_num = 1U,
+    .channel_num = 0U,
+};
+const cyhal_resource_inst_t srss_0_clock_0_pathmux_2_obj =
+{
+    .type = CYHAL_RSC_CLKPATH,
+    .block_num = 2U,
+    .channel_num = 0U,
+};
+const cyhal_resource_inst_t srss_0_clock_0_pathmux_3_obj =
+{
+    .type = CYHAL_RSC_CLKPATH,
+    .block_num = 3U,
+    .channel_num = 0U,
+};
+const cyhal_resource_inst_t srss_0_clock_0_pathmux_4_obj =
+{
+    .type = CYHAL_RSC_CLKPATH,
+    .block_num = 4U,
+    .channel_num = 0U,
+};
+#endif /* defined (CY_USING_HAL) */
+
+#if (!defined(CY_DEVICE_SECURE))
+static const cy_stc_pll_manual_config_t srss_0_clock_0_pll_0_pllConfig =
 {
     .feedbackDiv = 30,
     .referenceDiv = 1,
@@ -119,19 +158,498 @@
     .lfMode = false,
     .outputMode = CY_SYSCLK_FLLPLL_OUTPUT_AUTO,
 };
+#endif /* (!defined(CY_DEVICE_SECURE)) */
 
-__WEAK void cycfg_ClockStartupError(uint32_t error)
+__WEAK void __NO_RETURN cycfg_ClockStartupError(uint32_t error)
 {
     (void)error; /* Suppress the compiler warning */
-    while (true) {}
+    while(1);
 }
-__STATIC_INLINE void Cy_SysClk_ClkAltSysTickInit(void)
+
+#if ((!defined(CY_DEVICE_SECURE)) && (defined(CY_CFG_SYSCLK_FLL_ENABLED)))
+__STATIC_INLINE void Cy_SysClk_FllDeInit(void)
 {
-    Cy_SysTick_SetClockSource(CY_SYSTICK_CLOCK_SOURCE_CLK_LF);
+    Cy_SysClk_FllDisable();
 }
+#endif /* ((!defined(CY_DEVICE_SECURE)) && (defined(CY_CFG_SYSCLK_FLL_ENABLED))) */
+
+#if defined (CY_DEVICE_SECURE)
+void init_cycfg_secure_struct(cy_stc_pra_system_config_t * secure_config)
+{
+    #ifdef CY_CFG_PWR_ENABLED
+        secure_config->powerEnable = CY_CFG_PWR_ENABLED;
+    #endif /* CY_CFG_PWR_ENABLED */
+ 
+    #ifdef CY_CFG_PWR_USING_LDO
+        secure_config->ldoEnable = CY_CFG_PWR_USING_LDO;
+    #endif /* CY_CFG_PWR_USING_LDO */
+ 
+    #ifdef CY_CFG_PWR_USING_PMIC
+        secure_config->pmicEnable = CY_CFG_PWR_USING_PMIC;
+    #endif /* CY_CFG_PWR_USING_PMIC */
+ 
+    #ifdef CY_CFG_PWR_VBACKUP_USING_VDDD
+        secure_config->vBackupVDDDEnable = CY_CFG_PWR_VBACKUP_USING_VDDD;
+    #endif /* CY_CFG_PWR_VBACKUP_USING_VDDD */
+ 
+    #ifdef CY_CFG_PWR_USING_ULP
+        secure_config->ulpEnable = CY_CFG_PWR_USING_ULP;
+    #endif /* CY_CFG_PWR_USING_ULP */
+ 
+    #ifdef CY_CFG_SYSCLK_ECO_ENABLED
+        secure_config->ecoEnable = CY_CFG_SYSCLK_ECO_ENABLED;
+    #endif /* CY_CFG_SYSCLK_ECO_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_EXTCLK_ENABLED
+        secure_config->extClkEnable = CY_CFG_SYSCLK_EXTCLK_ENABLED;
+    #endif /* CY_CFG_SYSCLK_EXTCLK_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_ILO_ENABLED
+        secure_config->iloEnable = CY_CFG_SYSCLK_ILO_ENABLED;
+    #endif /* CY_CFG_SYSCLK_ILO_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_WCO_ENABLED
+        secure_config->wcoEnable = CY_CFG_SYSCLK_WCO_ENABLED;
+    #endif /* CY_CFG_SYSCLK_WCO_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_ENABLED
+        secure_config->fllEnable = CY_CFG_SYSCLK_FLL_ENABLED;
+    #endif /* CY_CFG_SYSCLK_FLL_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL0_ENABLED
+        secure_config->pll0Enable = CY_CFG_SYSCLK_PLL0_ENABLED;
+    #endif /* CY_CFG_SYSCLK_PLL0_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL1_ENABLED
+        secure_config->pll1Enable = CY_CFG_SYSCLK_PLL1_ENABLED;
+    #endif /* CY_CFG_SYSCLK_PLL1_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH0_ENABLED
+        secure_config->path0Enable = CY_CFG_SYSCLK_CLKPATH0_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKPATH0_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED
+        secure_config->path1Enable = CY_CFG_SYSCLK_CLKPATH1_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKPATH1_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH2_ENABLED
+        secure_config->path2Enable = CY_CFG_SYSCLK_CLKPATH2_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKPATH2_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH3_ENABLED
+        secure_config->path3Enable = CY_CFG_SYSCLK_CLKPATH3_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKPATH3_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH4_ENABLED
+        secure_config->path4Enable = CY_CFG_SYSCLK_CLKPATH4_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKPATH4_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH5_ENABLED
+        secure_config->path5Enable = CY_CFG_SYSCLK_CLKPATH5_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKPATH5_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKFAST_ENABLED
+        secure_config->clkFastEnable = CY_CFG_SYSCLK_CLKFAST_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKFAST_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPERI_ENABLED
+        secure_config->clkPeriEnable = CY_CFG_SYSCLK_CLKPERI_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKPERI_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKSLOW_ENABLED
+        secure_config->clkSlowEnable = CY_CFG_SYSCLK_CLKSLOW_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKSLOW_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF0_ENABLED
+        secure_config->clkHF0Enable = CY_CFG_SYSCLK_CLKHF0_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKHF0_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF1_ENABLED
+        secure_config->clkHF1Enable = CY_CFG_SYSCLK_CLKHF1_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKHF1_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF2_ENABLED
+        secure_config->clkHF2Enable = CY_CFG_SYSCLK_CLKHF2_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKHF2_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF3_ENABLED
+        secure_config->clkHF3Enable = CY_CFG_SYSCLK_CLKHF3_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKHF3_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF4_ENABLED
+        secure_config->clkHF4Enable = CY_CFG_SYSCLK_CLKHF4_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKHF4_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF5_ENABLED
+        secure_config->clkHF5Enable = CY_CFG_SYSCLK_CLKHF5_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKHF5_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPUMP_ENABLED
+        secure_config->clkPumpEnable = CY_CFG_SYSCLK_CLKPUMP_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKPUMP_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKLF_ENABLED
+        secure_config->clkLFEnable = CY_CFG_SYSCLK_CLKLF_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKLF_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKBAK_ENABLED
+        secure_config->clkBakEnable = CY_CFG_SYSCLK_CLKBAK_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKBAK_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKTIMER_ENABLED
+        secure_config->clkTimerEnable = CY_CFG_SYSCLK_CLKTIMER_ENABLED;
+    #endif /* CY_CFG_SYSCLK_CLKTIMER_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED
+        #error Configuration Error : ALT SYSTICK cannot be enabled for Secure devices. 
+    #endif /* CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_PILO_ENABLED
+        secure_config->piloEnable = CY_CFG_SYSCLK_PILO_ENABLED;
+    #endif /* CY_CFG_SYSCLK_PILO_ENABLED */
+ 
+    #ifdef CY_CFG_SYSCLK_ALTHF_ENABLED
+        secure_config->clkAltHfEnable = CY_CFG_SYSCLK_ALTHF_ENABLED;
+    #endif /* CY_CFG_SYSCLK_ALTHF_ENABLED */
+ 
+    #ifdef CY_CFG_PWR_LDO_VOLTAGE
+        secure_config->ldoVoltage = CY_CFG_PWR_LDO_VOLTAGE;
+    #endif /* CY_CFG_PWR_LDO_VOLTAGE */
+ 
+    #ifdef CY_CFG_PWR_REGULATOR_MODE_MIN
+        secure_config->pwrCurrentModeMin = CY_CFG_PWR_REGULATOR_MODE_MIN;
+    #endif /* CY_CFG_PWR_REGULATOR_MODE_MIN */
+ 
+    #ifdef CY_CFG_PWR_BUCK_VOLTAGE
+        secure_config->buckVoltage = CY_CFG_PWR_BUCK_VOLTAGE;
+    #endif /* CY_CFG_PWR_BUCK_VOLTAGE */
+ 
+    #ifdef CY_CFG_SYSCLK_ECO_FREQ
+        secure_config->ecoFreqHz = CY_CFG_SYSCLK_ECO_FREQ;
+    #endif /* CY_CFG_SYSCLK_ECO_FREQ */
+ 
+    #ifdef CY_CFG_SYSCLK_ECO_CLOAD
+        secure_config->ecoLoad = CY_CFG_SYSCLK_ECO_CLOAD;
+    #endif /* CY_CFG_SYSCLK_ECO_CLOAD */
+ 
+    #ifdef CY_CFG_SYSCLK_ECO_ESR
+        secure_config->ecoEsr = CY_CFG_SYSCLK_ECO_ESR;
+    #endif /* CY_CFG_SYSCLK_ECO_ESR */
+ 
+    #ifdef CY_CFG_SYSCLK_ECO_DRIVE_LEVEL
+        secure_config->ecoDriveLevel = CY_CFG_SYSCLK_ECO_DRIVE_LEVEL;
+    #endif /* CY_CFG_SYSCLK_ECO_DRIVE_LEVEL */
+ 
+    #ifdef CY_CFG_SYSCLK_ECO_GPIO_IN_PRT
+        secure_config->ecoInPort = CY_CFG_SYSCLK_ECO_GPIO_IN_PRT;
+    #endif /* CY_CFG_SYSCLK_ECO_GPIO_IN_PRT */
+ 
+    #ifdef CY_CFG_SYSCLK_ECO_GPIO_OUT_PRT
+        secure_config->ecoOutPort = CY_CFG_SYSCLK_ECO_GPIO_OUT_PRT;
+    #endif /* CY_CFG_SYSCLK_ECO_GPIO_OUT_PRT */
+ 
+    #ifdef CY_CFG_SYSCLK_ECO_GPIO_IN_PIN
+        secure_config->ecoInPinNum = CY_CFG_SYSCLK_ECO_GPIO_IN_PIN;
+    #endif /* CY_CFG_SYSCLK_ECO_GPIO_IN_PIN */
+ 
+    #ifdef CY_CFG_SYSCLK_ECO_GPIO_OUT_PIN
+        secure_config->ecoOutPinNum = CY_CFG_SYSCLK_ECO_GPIO_OUT_PIN;
+    #endif /* CY_CFG_SYSCLK_ECO_GPIO_OUT_PIN */
+ 
+    #ifdef CY_CFG_SYSCLK_EXTCLK_FREQ
+        secure_config->extClkFreqHz = CY_CFG_SYSCLK_EXTCLK_FREQ;
+    #endif /* CY_CFG_SYSCLK_EXTCLK_FREQ */
+ 
+    #ifdef CY_CFG_SYSCLK_EXTCLK_GPIO_PRT
+        secure_config->extClkPort = CY_CFG_SYSCLK_EXTCLK_GPIO_PRT;
+    #endif /* CY_CFG_SYSCLK_EXTCLK_GPIO_PRT */
+ 
+    #ifdef CY_CFG_SYSCLK_EXTCLK_GPIO_PIN
+        secure_config->extClkPinNum = CY_CFG_SYSCLK_EXTCLK_GPIO_PIN;
+    #endif /* CY_CFG_SYSCLK_EXTCLK_GPIO_PIN */
+ 
+    #ifdef CY_CFG_SYSCLK_EXTCLK_GPIO_HSIOM
+        secure_config->extClkHsiom = CY_CFG_SYSCLK_EXTCLK_GPIO_HSIOM;
+    #endif /* CY_CFG_SYSCLK_EXTCLK_GPIO_HSIOM */
+ 
+    #ifdef CY_CFG_SYSCLK_ILO_HIBERNATE
+        secure_config->iloHibernateON = CY_CFG_SYSCLK_ILO_HIBERNATE;
+    #endif /* CY_CFG_SYSCLK_ILO_HIBERNATE */
+ 
+    #ifdef CY_CFG_SYSCLK_WCO_BYPASS
+        secure_config->bypassEnable = CY_CFG_SYSCLK_WCO_BYPASS;
+    #endif /* CY_CFG_SYSCLK_WCO_BYPASS */
+ 
+    #ifdef CY_CFG_SYSCLK_WCO_IN_PRT
+        secure_config->wcoInPort = CY_CFG_SYSCLK_WCO_IN_PRT;
+    #endif /* CY_CFG_SYSCLK_WCO_IN_PRT */
+ 
+    #ifdef CY_CFG_SYSCLK_WCO_OUT_PRT
+        secure_config->wcoOutPort = CY_CFG_SYSCLK_WCO_OUT_PRT;
+    #endif /* CY_CFG_SYSCLK_WCO_OUT_PRT */
+ 
+    #ifdef CY_CFG_SYSCLK_WCO_IN_PIN
+        secure_config->wcoInPinNum = CY_CFG_SYSCLK_WCO_IN_PIN;
+    #endif /* CY_CFG_SYSCLK_WCO_IN_PIN */
+ 
+    #ifdef CY_CFG_SYSCLK_WCO_OUT_PIN
+        secure_config->wcoOutPinNum = CY_CFG_SYSCLK_WCO_OUT_PIN;
+    #endif /* CY_CFG_SYSCLK_WCO_OUT_PIN */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_OUT_FREQ
+        secure_config->fllOutFreqHz = CY_CFG_SYSCLK_FLL_OUT_FREQ;
+    #endif /* CY_CFG_SYSCLK_FLL_OUT_FREQ */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_MULT
+        secure_config->fllMult = CY_CFG_SYSCLK_FLL_MULT;
+    #endif /* CY_CFG_SYSCLK_FLL_MULT */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_REFDIV
+        secure_config->fllRefDiv = CY_CFG_SYSCLK_FLL_REFDIV;
+    #endif /* CY_CFG_SYSCLK_FLL_REFDIV */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_CCO_RANGE
+        secure_config->fllCcoRange = CY_CFG_SYSCLK_FLL_CCO_RANGE;
+    #endif /* CY_CFG_SYSCLK_FLL_CCO_RANGE */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV
+        secure_config->enableOutputDiv = CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV;
+    #endif /* CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE
+        secure_config->lockTolerance = CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE;
+    #endif /* CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_IGAIN
+        secure_config->igain = CY_CFG_SYSCLK_FLL_IGAIN;
+    #endif /* CY_CFG_SYSCLK_FLL_IGAIN */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_PGAIN
+        secure_config->pgain = CY_CFG_SYSCLK_FLL_PGAIN;
+    #endif /* CY_CFG_SYSCLK_FLL_PGAIN */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_SETTLING_COUNT
+        secure_config->settlingCount = CY_CFG_SYSCLK_FLL_SETTLING_COUNT;
+    #endif /* CY_CFG_SYSCLK_FLL_SETTLING_COUNT */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_OUTPUT_MODE
+        secure_config->outputMode = CY_CFG_SYSCLK_FLL_OUTPUT_MODE;
+    #endif /* CY_CFG_SYSCLK_FLL_OUTPUT_MODE */
+ 
+    #ifdef CY_CFG_SYSCLK_FLL_CCO_FREQ
+        secure_config->ccoFreq = CY_CFG_SYSCLK_FLL_CCO_FREQ;
+    #endif /* CY_CFG_SYSCLK_FLL_CCO_FREQ */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV
+        secure_config->pll0FeedbackDiv = CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV;
+    #endif /* CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL0_REFERENCE_DIV
+        secure_config->pll0ReferenceDiv = CY_CFG_SYSCLK_PLL0_REFERENCE_DIV;
+    #endif /* CY_CFG_SYSCLK_PLL0_REFERENCE_DIV */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL0_OUTPUT_DIV
+        secure_config->pll0OutputDiv = CY_CFG_SYSCLK_PLL0_OUTPUT_DIV;
+    #endif /* CY_CFG_SYSCLK_PLL0_OUTPUT_DIV */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL0_LF_MODE
+        secure_config->pll0LfMode = CY_CFG_SYSCLK_PLL0_LF_MODE;
+    #endif /* CY_CFG_SYSCLK_PLL0_LF_MODE */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL0_OUTPUT_MODE
+        secure_config->pll0OutputMode = CY_CFG_SYSCLK_PLL0_OUTPUT_MODE;
+    #endif /* CY_CFG_SYSCLK_PLL0_OUTPUT_MODE */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ
+        secure_config->pll0OutFreqHz = CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ;
+    #endif /* CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL1_FEEDBACK_DIV
+        secure_config->pll1FeedbackDiv = CY_CFG_SYSCLK_PLL1_FEEDBACK_DIV;
+    #endif /* CY_CFG_SYSCLK_PLL1_FEEDBACK_DIV */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL1_REFERENCE_DIV
+        secure_config->pll1ReferenceDiv = CY_CFG_SYSCLK_PLL1_REFERENCE_DIV;
+    #endif /* CY_CFG_SYSCLK_PLL1_REFERENCE_DIV */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL1_OUTPUT_DIV
+        secure_config->pll1OutputDiv = CY_CFG_SYSCLK_PLL1_OUTPUT_DIV;
+    #endif /* CY_CFG_SYSCLK_PLL1_OUTPUT_DIV */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL1_LF_MODE
+        secure_config->pll1LfMode = CY_CFG_SYSCLK_PLL1_LF_MODE;
+    #endif /* CY_CFG_SYSCLK_PLL1_LF_MODE */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL1_OUTPUT_MODE
+        secure_config->pll1OutputMode = CY_CFG_SYSCLK_PLL1_OUTPUT_MODE;
+    #endif /* CY_CFG_SYSCLK_PLL1_OUTPUT_MODE */
+ 
+    #ifdef CY_CFG_SYSCLK_PLL1_OUTPUT_FREQ
+        secure_config->pll1OutFreqHz = CY_CFG_SYSCLK_PLL1_OUTPUT_FREQ;
+    #endif /* CY_CFG_SYSCLK_PLL1_OUTPUT_FREQ */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH0_SOURCE
+        secure_config->path0Src = CY_CFG_SYSCLK_CLKPATH0_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKPATH0_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH1_SOURCE
+        secure_config->path1Src = CY_CFG_SYSCLK_CLKPATH1_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKPATH1_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH2_SOURCE
+        secure_config->path2Src = CY_CFG_SYSCLK_CLKPATH2_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKPATH2_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH3_SOURCE
+        secure_config->path3Src = CY_CFG_SYSCLK_CLKPATH3_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKPATH3_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH4_SOURCE
+        secure_config->path4Src = CY_CFG_SYSCLK_CLKPATH4_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKPATH4_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPATH5_SOURCE
+        secure_config->path5Src = CY_CFG_SYSCLK_CLKPATH5_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKPATH5_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKFAST_DIVIDER
+        secure_config->clkFastDiv = CY_CFG_SYSCLK_CLKFAST_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKFAST_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPERI_DIVIDER
+        secure_config->clkPeriDiv = CY_CFG_SYSCLK_CLKPERI_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKPERI_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKSLOW_DIVIDER
+        secure_config->clkSlowDiv = CY_CFG_SYSCLK_CLKSLOW_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKSLOW_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF0_CLKPATH
+        secure_config->hf0Source = CY_CFG_SYSCLK_CLKHF0_CLKPATH;
+    #endif /* CY_CFG_SYSCLK_CLKHF0_CLKPATH */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF0_DIVIDER
+        secure_config->hf0Divider = CY_CFG_SYSCLK_CLKHF0_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKHF0_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ
+        secure_config->hf0OutFreqMHz = CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ;
+    #endif /* CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF1_CLKPATH
+        secure_config->hf1Source = CY_CFG_SYSCLK_CLKHF1_CLKPATH;
+    #endif /* CY_CFG_SYSCLK_CLKHF1_CLKPATH */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF1_DIVIDER
+        secure_config->hf1Divider = CY_CFG_SYSCLK_CLKHF1_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKHF1_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF1_FREQ_MHZ
+        secure_config->hf1OutFreqMHz = CY_CFG_SYSCLK_CLKHF1_FREQ_MHZ;
+    #endif /* CY_CFG_SYSCLK_CLKHF1_FREQ_MHZ */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF2_CLKPATH
+        secure_config->hf2Source = CY_CFG_SYSCLK_CLKHF2_CLKPATH;
+    #endif /* CY_CFG_SYSCLK_CLKHF2_CLKPATH */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF2_DIVIDER
+        secure_config->hf2Divider = CY_CFG_SYSCLK_CLKHF2_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKHF2_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF2_FREQ_MHZ
+        secure_config->hf2OutFreqMHz = CY_CFG_SYSCLK_CLKHF2_FREQ_MHZ;
+    #endif /* CY_CFG_SYSCLK_CLKHF2_FREQ_MHZ */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF3_CLKPATH
+        secure_config->hf3Source = CY_CFG_SYSCLK_CLKHF3_CLKPATH;
+    #endif /* CY_CFG_SYSCLK_CLKHF3_CLKPATH */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF3_DIVIDER
+        secure_config->hf3Divider = CY_CFG_SYSCLK_CLKHF3_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKHF3_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF3_FREQ_MHZ
+        secure_config->hf3OutFreqMHz = CY_CFG_SYSCLK_CLKHF3_FREQ_MHZ;
+    #endif /* CY_CFG_SYSCLK_CLKHF3_FREQ_MHZ */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF4_CLKPATH
+        secure_config->hf4Source = CY_CFG_SYSCLK_CLKHF4_CLKPATH;
+    #endif /* CY_CFG_SYSCLK_CLKHF4_CLKPATH */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF4_DIVIDER
+        secure_config->hf4Divider = CY_CFG_SYSCLK_CLKHF4_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKHF4_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF4_FREQ_MHZ
+        secure_config->hf4OutFreqMHz = CY_CFG_SYSCLK_CLKHF4_FREQ_MHZ;
+    #endif /* CY_CFG_SYSCLK_CLKHF4_FREQ_MHZ */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF5_CLKPATH
+        secure_config->hf5Source = CY_CFG_SYSCLK_CLKHF5_CLKPATH;
+    #endif /* CY_CFG_SYSCLK_CLKHF5_CLKPATH */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF5_DIVIDER
+        secure_config->hf5Divider = CY_CFG_SYSCLK_CLKHF5_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKHF5_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKHF5_FREQ_MHZ
+        secure_config->hf5OutFreqMHz = CY_CFG_SYSCLK_CLKHF5_FREQ_MHZ;
+    #endif /* CY_CFG_SYSCLK_CLKHF5_FREQ_MHZ */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPUMP_SOURCE
+        secure_config->pumpSource = CY_CFG_SYSCLK_CLKPUMP_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKPUMP_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKPUMP_DIVIDER
+        secure_config->pumpDivider = CY_CFG_SYSCLK_CLKPUMP_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKPUMP_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKLF_SOURCE
+        secure_config->clkLfSource = CY_CFG_SYSCLK_CLKLF_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKLF_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKBAK_SOURCE
+        secure_config->clkBakSource = CY_CFG_SYSCLK_CLKBAK_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKBAK_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKTIMER_SOURCE
+        secure_config->clkTimerSource = CY_CFG_SYSCLK_CLKTIMER_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKTIMER_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKTIMER_DIVIDER
+        secure_config->clkTimerDivider = CY_CFG_SYSCLK_CLKTIMER_DIVIDER;
+    #endif /* CY_CFG_SYSCLK_CLKTIMER_DIVIDER */
+ 
+    #ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE
+        secure_config->clkSrcAltSysTick = CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE;
+    #endif /* CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE */
+ 
+    #ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLOAD
+        secure_config->altHFcLoad = CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLOAD;
+    #endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLOAD */
+ 
+    #ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_TIME
+        secure_config->altHFxtalStartUpTime = CY_CFG_SYSCLK_ALTHF_BLE_ECO_TIME;
+    #endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_TIME */
+ 
+    #ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_FREQ
+        secure_config->altHFclkFreq = CY_CFG_SYSCLK_ALTHF_BLE_ECO_FREQ;
+    #endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_FREQ */
+ 
+    #ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLK_DIV
+        secure_config->altHFsysClkDiv = CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLK_DIV;
+    #endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLK_DIV */
+ 
+    #ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_VOL_REGULATOR
+        secure_config->altHFvoltageReg = CY_CFG_SYSCLK_ALTHF_BLE_ECO_VOL_REGULATOR;
+    #endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_VOL_REGULATOR */
+}
+#endif /* defined (CY_DEVICE_SECURE) */
+
+#if (!defined(CY_DEVICE_SECURE))
 __STATIC_INLINE void Cy_SysClk_ClkBakInit(void)
 {
-    Cy_SysClk_ClkBakSetSource(CY_SYSCLK_BAK_IN_CLKLF);
+    Cy_SysClk_ClkBakSetSource(CY_SYSCLK_BAK_IN_WCO);
 }
 __STATIC_INLINE void Cy_SysClk_ClkFastInit(void)
 {
@@ -150,26 +668,8 @@
 }
 __STATIC_INLINE void Cy_SysClk_ClkHf0Init(void)
 {
-    (void)Cy_SysClk_ClkHfSetSource(0U, CY_CFG_SYSCLK_CLKHF0_CLKPATH);
-    (void)Cy_SysClk_ClkHfSetDivider(0U, CY_SYSCLK_CLKHF_NO_DIVIDE);
-}
-__STATIC_INLINE void Cy_SysClk_ClkHf2Init(void)
-{
-    (void)Cy_SysClk_ClkHfSetSource(CY_CFG_SYSCLK_CLKHF2, CY_CFG_SYSCLK_CLKHF2_CLKPATH);
-    (void)Cy_SysClk_ClkHfSetDivider(CY_CFG_SYSCLK_CLKHF2, CY_SYSCLK_CLKHF_DIVIDE_BY_2);
-    (void)Cy_SysClk_ClkHfEnable(CY_CFG_SYSCLK_CLKHF2);
-}
-__STATIC_INLINE void Cy_SysClk_ClkHf3Init(void)
-{
-    (void)Cy_SysClk_ClkHfSetSource(CY_CFG_SYSCLK_CLKHF3, CY_CFG_SYSCLK_CLKHF3_CLKPATH);
-    (void)Cy_SysClk_ClkHfSetDivider(CY_CFG_SYSCLK_CLKHF3, CY_SYSCLK_CLKHF_NO_DIVIDE);
-    (void)Cy_SysClk_ClkHfEnable(CY_CFG_SYSCLK_CLKHF3);
-}
-__STATIC_INLINE void Cy_SysClk_ClkHf4Init(void)
-{
-    (void)Cy_SysClk_ClkHfSetSource(CY_CFG_SYSCLK_CLKHF4, CY_CFG_SYSCLK_CLKHF4_CLKPATH);
-    (void)Cy_SysClk_ClkHfSetDivider(CY_CFG_SYSCLK_CLKHF4, CY_SYSCLK_CLKHF_NO_DIVIDE);
-    (void)Cy_SysClk_ClkHfEnable(CY_CFG_SYSCLK_CLKHF4);
+    Cy_SysClk_ClkHfSetSource(0U, CY_CFG_SYSCLK_CLKHF0_CLKPATH);
+    Cy_SysClk_ClkHfSetDivider(0U, CY_SYSCLK_CLKHF_NO_DIVIDE);
 }
 __STATIC_INLINE void Cy_SysClk_IloInit(void)
 {
@@ -184,19 +684,27 @@
 }
 __STATIC_INLINE void Cy_SysClk_ClkPath0Init(void)
 {
-    (void)Cy_SysClk_ClkPathSetSource(0U, CY_CFG_SYSCLK_CLKPATH0_SOURCE);
+    Cy_SysClk_ClkPathSetSource(0U, CY_CFG_SYSCLK_CLKPATH0_SOURCE);
 }
 __STATIC_INLINE void Cy_SysClk_ClkPath1Init(void)
 {
-    (void)Cy_SysClk_ClkPathSetSource(1U, CY_CFG_SYSCLK_CLKPATH1_SOURCE);
+    Cy_SysClk_ClkPathSetSource(1U, CY_CFG_SYSCLK_CLKPATH1_SOURCE);
 }
 __STATIC_INLINE void Cy_SysClk_ClkPath2Init(void)
 {
-    (void)Cy_SysClk_ClkPathSetSource(2U, CY_CFG_SYSCLK_CLKPATH2_SOURCE);
+    Cy_SysClk_ClkPathSetSource(2U, CY_CFG_SYSCLK_CLKPATH2_SOURCE);
+}
+__STATIC_INLINE void Cy_SysClk_ClkPath3Init(void)
+{
+    Cy_SysClk_ClkPathSetSource(3U, CY_CFG_SYSCLK_CLKPATH3_SOURCE);
+}
+__STATIC_INLINE void Cy_SysClk_ClkPath4Init(void)
+{
+    Cy_SysClk_ClkPathSetSource(4U, CY_CFG_SYSCLK_CLKPATH4_SOURCE);
 }
 __STATIC_INLINE void Cy_SysClk_ClkPeriInit(void)
 {
-    Cy_SysClk_ClkPeriSetDivider(1U);
+    Cy_SysClk_ClkPeriSetDivider(0U);
 }
 __STATIC_INLINE void Cy_SysClk_Pll0Init(void)
 {
@@ -209,28 +717,10 @@
         cycfg_ClockStartupError(CY_CFG_SYSCLK_PLL_ERROR);
     }
 }
-__STATIC_INLINE void Cy_SysClk_Pll1Init(void)
-{
-    if (CY_SYSCLK_SUCCESS != Cy_SysClk_PllManualConfigure(2U, &srss_0_clock_0_pll_1_pllConfig))
-    {
-        cycfg_ClockStartupError(CY_CFG_SYSCLK_PLL_ERROR);
-    }
-    if (CY_SYSCLK_SUCCESS != Cy_SysClk_PllEnable(2U, 10000u))
-    {
-        cycfg_ClockStartupError(CY_CFG_SYSCLK_PLL_ERROR);
-    }
-}
 __STATIC_INLINE void Cy_SysClk_ClkSlowInit(void)
 {
     Cy_SysClk_ClkSlowSetDivider(0U);
 }
-__STATIC_INLINE void Cy_SysClk_ClkTimerInit(void)
-{
-    Cy_SysClk_ClkTimerDisable();
-     Cy_SysClk_ClkTimerSetSource(CY_SYSCLK_CLKTIMER_IN_IMO);
-    Cy_SysClk_ClkTimerSetDivider(0U);
-    Cy_SysClk_ClkTimerEnable();
-}
 __STATIC_INLINE void Cy_SysClk_WcoInit(void)
 {
     (void)Cy_GPIO_Pin_FastInit(GPIO_PRT0, 0U, 0x00U, 0x00U, HSIOM_SEL_GPIO);
@@ -240,302 +730,479 @@
         cycfg_ClockStartupError(CY_CFG_SYSCLK_WCO_ERROR);
     }
 }
+__STATIC_INLINE void init_cycfg_power(void)
+{
+    /* Reset the Backup domain on POR, XRES, BOD only if Backup domain is supplied by VDDD */
+     #if (CY_CFG_PWR_VBACKUP_USING_VDDD)
+         #ifdef CY_CFG_SYSCLK_ILO_ENABLED
+             if (0u == Cy_SysLib_GetResetReason() /* POR, XRES, or BOD */)
+             {
+             #if CY_CFG_SYSCLK_WCO_ENABLED
+                 uint32_t wcoTrim = Cy_SysLib_GetWcoTrim();
+                 if (CY_SYSLIB_SUCCESS != Cy_SysLib_ResetBackupDomain())
+                 {
+                     Cy_SysLib_DelayUs(1U);
+                     if (CY_SYSLIB_SUCCESS != Cy_SysLib_GetResetStatus())
+                     {
+                         cycfg_ClockStartupError(CY_CFG_PWR_BKP_ERROR);
+                     }
+                 }
+                 Cy_SysLib_SetWcoTrim(wcoTrim);
+             #else /* CY_CFG_SYSCLK_WCO_ENABLED */
+                 (void) Cy_SysLib_ResetBackupDomain();
+             #endif /* CY_CFG_SYSCLK_WCO_ENABLED */
+                Cy_SysClk_IloDisable();
+                Cy_SysClk_IloInit();
+            }
+        #endif /* CY_CFG_SYSCLK_ILO_ENABLED */
+    #endif /* CY_CFG_PWR_VBACKUP_USING_VDDD */
 
+    /* Configure core regulator */
+    #if !(defined(CY_DEVICE_SECURE))
+        #if defined (CY_IP_M4CPUSS)
+            #if CY_CFG_PWR_USING_LDO
+                Cy_SysPm_LdoSetVoltage(CY_SYSPM_LDO_VOLTAGE_LP);
+            #else
+                Cy_SysPm_BuckEnable(CY_SYSPM_BUCK_OUT1_VOLTAGE_LP);
+            #endif /* CY_CFG_PWR_USING_LDO */
+        #endif /* defined (CY_IP_M4CPUSS) */
+        #if CY_CFG_PWR_REGULATOR_MODE_MIN
+            Cy_SysPm_SystemSetMinRegulatorCurrent();
+        #else
+            Cy_SysPm_SystemSetNormalRegulatorCurrent();
+        #endif /* CY_CFG_PWR_REGULATOR_MODE_MIN */
+    #endif /* !(defined(CY_DEVICE_SECURE)) */
+    /* Configure PMIC */
+    Cy_SysPm_UnlockPmic();
+    #if CY_CFG_PWR_USING_PMIC
+        Cy_SysPm_PmicEnableOutput();
+    #else
+        Cy_SysPm_PmicDisableOutput();
+    #endif /* CY_CFG_PWR_USING_PMIC */
+}
+#endif /* (!defined(CY_DEVICE_SECURE)) */
 
 void init_cycfg_system(void)
 {
-    /* Set worst case memory wait states (! ultra low power, 150 MHz), will update at the end */
-    Cy_SysLib_SetWaitStates(false, 150UL);
+    #if defined(CY_DEVICE_SECURE)
+        cy_en_pra_status_t configStatus;
+        init_cycfg_secure_struct(&srss_0_clock_0_secureConfig);
+        #if (((CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM <= 5UL))  && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 0UL))
+            #error Configuration Error : ALTHF, ILO, PILO cannot drive HF0.
+        #endif
+        #if (((CY_CFG_SYSCLK_CLKPATH1_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH1_SOURCE_NUM <= 5UL)) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 1UL))
+            #error Configuration Error : ALTHF, ILO, PILO cannot drive HF0.
+        #endif
+        #if (((CY_CFG_SYSCLK_CLKPATH2_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH2_SOURCE_NUM <= 5UL)) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 2UL))
+            #error Configuration Error : ALTHF, ILO, PILO cannot drive HF0.
+        #endif
+        #if (((CY_CFG_SYSCLK_CLKPATH3_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH3_SOURCE_NUM <= 5UL)) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 3UL))
+            #error Configuration Error : ALTHF, ILO, PILO cannot drive HF0.
+        #endif
+        #if (((CY_CFG_SYSCLK_CLKPATH4_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH4_SOURCE_NUM <= 5UL)) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 4UL))
+            #error Configuration Error : ALTHF, ILO, PILO cannot drive HF0.
+        #endif
+        #if (((CY_CFG_SYSCLK_CLKPATH5_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH5_SOURCE_NUM <= 5UL)) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 5UL))
+            #error Configuration Error : ALTHF, ILO, PILO cannot drive HF0.
+        #endif
+    
+        configStatus = CY_PRA_FUNCTION_CALL_RETURN_PARAM(CY_PRA_MSG_TYPE_SYS_CFG_FUNC,
+                                    CY_PRA_FUNC_INIT_CYCFG_DEVICE,
+                                    &srss_0_clock_0_secureConfig);
+        if ( configStatus != CY_PRA_STATUS_SUCCESS )
+        {
+            cycfg_ClockStartupError(configStatus);
+        }
+
+        #ifdef CY_CFG_SYSCLK_EXTCLK_FREQ
+            Cy_SysClk_ExtClkSetFrequency(CY_CFG_SYSCLK_EXTCLK_FREQ);
+        #endif /* CY_CFG_SYSCLK_EXTCLK_FREQ */
+    #else /* defined(CY_DEVICE_SECURE) */
+    
+        /* Set worst case memory wait states (! ultra low power, 180 MHz), will update at the end */
+        Cy_SysLib_SetWaitStates(false, 180UL);
     #ifdef CY_CFG_PWR_ENABLED
         #ifdef CY_CFG_PWR_INIT
-        init_cycfg_power();
+            init_cycfg_power();
         #else
-        #warning Power system will not be configured. Update power personality to v1.20 or later.
+            #warning Power system will not be configured. Update power personality to v1.20 or later.
         #endif /* CY_CFG_PWR_INIT */
     #endif /* CY_CFG_PWR_ENABLED */
-
-    /* Reset the core clock path to default and disable all the FLLs/PLLs */
-    (void)Cy_SysClk_ClkHfSetDivider(0U, CY_SYSCLK_CLKHF_NO_DIVIDE);
-    Cy_SysClk_ClkFastSetDivider(0U);
-    Cy_SysClk_ClkPeriSetDivider(1U);
-    Cy_SysClk_ClkSlowSetDivider(0U);
-    for (uint32_t pll = CY_SRSS_NUM_PLL; pll > 0UL; --pll) /* PLL 1 is the first PLL. 0 is invalid. */
-    {
-        (void)Cy_SysClk_PllDisable(pll);
-    }
-    (void)Cy_SysClk_ClkPathSetSource(CY_SYSCLK_CLKHF_IN_CLKPATH1, CY_SYSCLK_CLKPATH_IN_IMO);
-
-    if ((CY_SYSCLK_CLKHF_IN_CLKPATH0 == Cy_SysClk_ClkHfGetSource(0UL)) &&
-        (CY_SYSCLK_CLKPATH_IN_WCO == Cy_SysClk_ClkPathGetSource(CY_SYSCLK_CLKHF_IN_CLKPATH0)))
-    {
-        (void)Cy_SysClk_ClkHfSetSource(0U, CY_SYSCLK_CLKHF_IN_CLKPATH1);
-    }
-
-    (void)Cy_SysClk_FllDisable();
-    (void)Cy_SysClk_ClkPathSetSource(CY_SYSCLK_CLKHF_IN_CLKPATH0, CY_SYSCLK_CLKPATH_IN_IMO);
-    (void)Cy_SysClk_ClkHfSetSource(0UL, CY_SYSCLK_CLKHF_IN_CLKPATH0);
-    #ifdef CY_IP_MXBLESS
-    (void)Cy_BLE_EcoReset();
+    
+    /* Disable FLL */
+    #ifdef CY_CFG_SYSCLK_FLL_ENABLED
+        Cy_SysClk_FllDeInit();
     #endif
-
-
+    
+        /* Reset the core clock path to default and disable all the FLLs/PLLs */
+        Cy_SysClk_ClkHfSetDivider(0U, CY_SYSCLK_CLKHF_NO_DIVIDE);
+        Cy_SysClk_ClkFastSetDivider(0U);
+        Cy_SysClk_ClkPeriSetDivider(1U);
+        Cy_SysClk_ClkSlowSetDivider(0U);
+        for (uint32_t pll = CY_SRSS_NUM_PLL; pll > 0UL; --pll) /* PLL 1 is the first PLL. 0 is invalid. */
+        {
+            (void)Cy_SysClk_PllDisable(pll);
+        }
+        Cy_SysClk_ClkPathSetSource(CY_SYSCLK_CLKHF_IN_CLKPATH1, CY_SYSCLK_CLKPATH_IN_IMO);
+    
+        if ((CY_SYSCLK_CLKHF_IN_CLKPATH0 == Cy_SysClk_ClkHfGetSource(0UL)) &&
+            (CY_SYSCLK_CLKPATH_IN_WCO == Cy_SysClk_ClkPathGetSource(CY_SYSCLK_CLKHF_IN_CLKPATH0)))
+        {
+            Cy_SysClk_ClkHfSetSource(0U, CY_SYSCLK_CLKHF_IN_CLKPATH1);
+        }
+    
+        Cy_SysClk_ClkPathSetSource(CY_SYSCLK_CLKHF_IN_CLKPATH0, CY_SYSCLK_CLKPATH_IN_IMO);
+        Cy_SysClk_ClkHfSetSource(0UL, CY_SYSCLK_CLKHF_IN_CLKPATH0);
+        #ifdef CY_IP_MXBLESS
+            (void)Cy_BLE_EcoReset();
+        #endif
+    
+    
     /* Enable all source clocks */
     #ifdef CY_CFG_SYSCLK_PILO_ENABLED
-    Cy_SysClk_PiloInit();
+        Cy_SysClk_PiloInit();
     #endif
-
+    
     #ifdef CY_CFG_SYSCLK_WCO_ENABLED
-    Cy_SysClk_WcoInit();
+        Cy_SysClk_WcoInit();
     #endif
-
+    
     #ifdef CY_CFG_SYSCLK_CLKLF_ENABLED
-    Cy_SysClk_ClkLfInit();
+        Cy_SysClk_ClkLfInit();
     #endif
+    
+        #if (defined(CY_IP_M4CPUSS) && CY_CFG_SYSCLK_ALTHF_ENABLED)
 
-    #ifdef CY_CFG_SYSCLK_ALTHF_ENABLED
-    Cy_SysClk_AltHfInit();
-    #endif
+            Cy_SysClk_AltHfInit();
+        #endif /* (defined(CY_IP_M4CPUSS) && CY_CFG_SYSCLK_ALTHF_ENABLED */
 
-    #ifdef CY_CFG_SYSCLK_ECO_ENABLED
-    Cy_SysClk_EcoInit();
-    #endif
-
-    #ifdef CY_CFG_SYSCLK_EXTCLK_ENABLED
-    Cy_SysClk_ExtClkInit();
-    #endif
-
-    /* Configure CPU clock dividers */
-    #ifdef CY_CFG_SYSCLK_CLKFAST_ENABLED
-    Cy_SysClk_ClkFastInit();
-    #endif
-
-    #ifdef CY_CFG_SYSCLK_CLKPERI_ENABLED
-    Cy_SysClk_ClkPeriInit();
-    #endif
-
-    #ifdef CY_CFG_SYSCLK_CLKSLOW_ENABLED
-    Cy_SysClk_ClkSlowInit();
-    #endif
-
-    #if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE == CY_SYSCLK_CLKPATH_IN_WCO) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH == CY_SYSCLK_CLKHF_IN_CLKPATH0))
-        /* Configure HFCLK0 to temporarily run from IMO to initialize other clocks */
-        (void)Cy_SysClk_ClkPathSetSource(1UL, CY_SYSCLK_CLKPATH_IN_IMO);
-        (void)Cy_SysClk_ClkHfSetSource(0UL, CY_SYSCLK_CLKHF_IN_CLKPATH1);
-    #else
-        #ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED
-            Cy_SysClk_ClkPath1Init();
+    
+        #ifdef CY_CFG_SYSCLK_ECO_ENABLED
+            Cy_SysClk_EcoInit();
         #endif
+    
+    #ifdef CY_CFG_SYSCLK_EXTCLK_ENABLED
+        Cy_SysClk_ExtClkInit();
     #endif
-
-    /* Configure Path Clocks */
-    #ifdef CY_CFG_SYSCLK_CLKPATH0_ENABLED
-    Cy_SysClk_ClkPath0Init();
+    
+        /* Configure CPU clock dividers */
+        #ifdef CY_CFG_SYSCLK_CLKFAST_ENABLED
+            Cy_SysClk_ClkFastInit();
+        #endif
+    
+        #ifdef CY_CFG_SYSCLK_CLKPERI_ENABLED
+            Cy_SysClk_ClkPeriInit();
+        #endif
+    
+        #ifdef CY_CFG_SYSCLK_CLKSLOW_ENABLED
+            Cy_SysClk_ClkSlowInit();
+        #endif
+    
+        #if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM == 0x6UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 0U))
+            /* Configure HFCLK0 to temporarily run from IMO to initialize other clocks */
+            Cy_SysClk_ClkPathSetSource(1UL, CY_SYSCLK_CLKPATH_IN_IMO);
+            Cy_SysClk_ClkHfSetSource(0UL, CY_SYSCLK_CLKHF_IN_CLKPATH1);
+        #else
+    #ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED
+        Cy_SysClk_ClkPath1Init();
+            #endif
+        #endif
+    
+        /* Configure Path Clocks */
+        #ifdef CY_CFG_SYSCLK_CLKPATH0_ENABLED
+            Cy_SysClk_ClkPath0Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH2_ENABLED
-    Cy_SysClk_ClkPath2Init();
+        Cy_SysClk_ClkPath2Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH3_ENABLED
-    Cy_SysClk_ClkPath3Init();
+        Cy_SysClk_ClkPath3Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH4_ENABLED
-    Cy_SysClk_ClkPath4Init();
+        Cy_SysClk_ClkPath4Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH5_ENABLED
-    Cy_SysClk_ClkPath5Init();
+        Cy_SysClk_ClkPath5Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH6_ENABLED
-    Cy_SysClk_ClkPath6Init();
+        Cy_SysClk_ClkPath6Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH7_ENABLED
-    Cy_SysClk_ClkPath7Init();
+        Cy_SysClk_ClkPath7Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH8_ENABLED
-    Cy_SysClk_ClkPath8Init();
+        Cy_SysClk_ClkPath8Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH9_ENABLED
-    Cy_SysClk_ClkPath9Init();
+        Cy_SysClk_ClkPath9Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH10_ENABLED
-    Cy_SysClk_ClkPath10Init();
+        Cy_SysClk_ClkPath10Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH11_ENABLED
-    Cy_SysClk_ClkPath11Init();
+        Cy_SysClk_ClkPath11Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH12_ENABLED
-    Cy_SysClk_ClkPath12Init();
+        Cy_SysClk_ClkPath12Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH13_ENABLED
-    Cy_SysClk_ClkPath13Init();
+        Cy_SysClk_ClkPath13Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH14_ENABLED
-    Cy_SysClk_ClkPath14Init();
+        Cy_SysClk_ClkPath14Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKPATH15_ENABLED
-    Cy_SysClk_ClkPath15Init();
+        Cy_SysClk_ClkPath15Init();
     #endif
-
+    
     /* Configure and enable FLL */
     #ifdef CY_CFG_SYSCLK_FLL_ENABLED
-    Cy_SysClk_FllInit();
+        Cy_SysClk_FllInit();
     #endif
-
-    Cy_SysClk_ClkHf0Init();
-
-    #if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE == CY_SYSCLK_CLKPATH_IN_WCO) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH == CY_SYSCLK_CLKHF_IN_CLKPATH0))
+    
+    #ifdef CY_CFG_SYSCLK_CLKHF0_ENABLED
+        Cy_SysClk_ClkHf0Init();
+    #endif
+    
+    #if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM == 0x6UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 0U))
         #ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED
             /* Apply the ClkPath1 user setting */
             Cy_SysClk_ClkPath1Init();
         #endif
     #endif
-
-
+    
     /* Configure and enable PLLs */
     #ifdef CY_CFG_SYSCLK_PLL0_ENABLED
-    Cy_SysClk_Pll0Init();
+        Cy_SysClk_Pll0Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL1_ENABLED
-    Cy_SysClk_Pll1Init();
+        Cy_SysClk_Pll1Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL2_ENABLED
-    Cy_SysClk_Pll2Init();
+        Cy_SysClk_Pll2Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL3_ENABLED
-    Cy_SysClk_Pll3Init();
+        Cy_SysClk_Pll3Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL4_ENABLED
-    Cy_SysClk_Pll4Init();
+        Cy_SysClk_Pll4Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL5_ENABLED
-    Cy_SysClk_Pll5Init();
+        Cy_SysClk_Pll5Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL6_ENABLED
-    Cy_SysClk_Pll6Init();
+        Cy_SysClk_Pll6Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL7_ENABLED
-    Cy_SysClk_Pll7Init();
+        Cy_SysClk_Pll7Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL8_ENABLED
-    Cy_SysClk_Pll8Init();
+        Cy_SysClk_Pll8Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL9_ENABLED
-    Cy_SysClk_Pll9Init();
+        Cy_SysClk_Pll9Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL10_ENABLED
-    Cy_SysClk_Pll10Init();
+        Cy_SysClk_Pll10Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL11_ENABLED
-    Cy_SysClk_Pll11Init();
+        Cy_SysClk_Pll11Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL12_ENABLED
-    Cy_SysClk_Pll12Init();
+       Cy_SysClk_Pll12Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL13_ENABLED
-    Cy_SysClk_Pll13Init();
+        Cy_SysClk_Pll13Init();
     #endif
     #ifdef CY_CFG_SYSCLK_PLL14_ENABLED
-    Cy_SysClk_Pll14Init();
+        Cy_SysClk_Pll14Init();
     #endif
-
+    
     /* Configure HF clocks */
     #ifdef CY_CFG_SYSCLK_CLKHF1_ENABLED
-    Cy_SysClk_ClkHf1Init();
+        Cy_SysClk_ClkHf1Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF2_ENABLED
-    Cy_SysClk_ClkHf2Init();
+        Cy_SysClk_ClkHf2Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF3_ENABLED
-    Cy_SysClk_ClkHf3Init();
+        Cy_SysClk_ClkHf3Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF4_ENABLED
-    Cy_SysClk_ClkHf4Init();
+        Cy_SysClk_ClkHf4Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF5_ENABLED
-    Cy_SysClk_ClkHf5Init();
+        Cy_SysClk_ClkHf5Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF6_ENABLED
-    Cy_SysClk_ClkHf6Init();
+        Cy_SysClk_ClkHf6Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF7_ENABLED
-    Cy_SysClk_ClkHf7Init();
+        Cy_SysClk_ClkHf7Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF8_ENABLED
-    Cy_SysClk_ClkHf8Init();
+        Cy_SysClk_ClkHf8Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF9_ENABLED
-    Cy_SysClk_ClkHf9Init();
+        Cy_SysClk_ClkHf9Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF10_ENABLED
-    Cy_SysClk_ClkHf10Init();
+        Cy_SysClk_ClkHf10Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF11_ENABLED
-    Cy_SysClk_ClkHf11Init();
+        Cy_SysClk_ClkHf11Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF12_ENABLED
-    Cy_SysClk_ClkHf12Init();
+        Cy_SysClk_ClkHf12Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF13_ENABLED
-    Cy_SysClk_ClkHf13Init();
+        Cy_SysClk_ClkHf13Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF14_ENABLED
-    Cy_SysClk_ClkHf14Init();
+        Cy_SysClk_ClkHf14Init();
     #endif
     #ifdef CY_CFG_SYSCLK_CLKHF15_ENABLED
-    Cy_SysClk_ClkHf15Init();
+        Cy_SysClk_ClkHf15Init();
     #endif
-
+    
     /* Configure miscellaneous clocks */
-    #ifdef CY_CFG_SYSCLK_CLKTIMER_ENABLED
-    Cy_SysClk_ClkTimerInit();
-    #endif
-
+        #ifdef CY_CFG_SYSCLK_CLKTIMER_ENABLED
+            Cy_SysClk_ClkTimerInit();
+        #endif
+    
     #ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED
-    Cy_SysClk_ClkAltSysTickInit();
+        Cy_SysClk_ClkAltSysTickInit();
     #endif
-
+    
     #ifdef CY_CFG_SYSCLK_CLKPUMP_ENABLED
-    Cy_SysClk_ClkPumpInit();
+        Cy_SysClk_ClkPumpInit();
     #endif
-
+    
     #ifdef CY_CFG_SYSCLK_CLKBAK_ENABLED
-    Cy_SysClk_ClkBakInit();
+        Cy_SysClk_ClkBakInit();
     #endif
-
+    
     /* Configure default enabled clocks */
     #ifdef CY_CFG_SYSCLK_ILO_ENABLED
-    Cy_SysClk_IloInit();
-    #else
-    Cy_SysClk_IloDisable();
+        Cy_SysClk_IloInit();
     #endif
-
+    
     #ifndef CY_CFG_SYSCLK_IMO_ENABLED
-    #error the IMO must be enabled for proper chip operation
-    #endif
-
+        #error the IMO must be enabled for proper chip operation
+        #endif
+    
+        #ifndef CY_CFG_SYSCLK_CLKHF0_ENABLED
+            #error the CLKHF0 must be enabled for proper chip operation
+        #endif
+    
+    #endif /* defined(CY_DEVICE_SECURE) */
+    
     #ifdef CY_CFG_SYSCLK_MFO_ENABLED
-    Cy_SysClk_MfoInit();
+        Cy_SysClk_MfoInit();
     #endif
-
+    
     #ifdef CY_CFG_SYSCLK_CLKMF_ENABLED
-    Cy_SysClk_ClkMfInit();
+        Cy_SysClk_ClkMfInit();
     #endif
-
-    /* Set accurate flash wait states */
-    #if (defined (CY_CFG_PWR_ENABLED) && defined (CY_CFG_SYSCLK_CLKHF0_ENABLED))
-    Cy_SysLib_SetWaitStates(CY_CFG_PWR_USING_ULP != 0, CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ);
+    
+    #ifdef CY_CFG_SYSCLK_CLKPWR_ENABLED
+        Cy_SysClk_ClkPwrInit();
     #endif
-
-    /* Update System Core Clock values for correct Cy_SysLib_Delay functioning */
-    SystemCoreClockUpdate();
-
+    
+    #if (!defined(CY_DEVICE_SECURE))
+        /* Set accurate flash wait states */
+        #if (defined (CY_CFG_PWR_ENABLED) && defined (CY_CFG_SYSCLK_CLKHF0_ENABLED))
+            Cy_SysLib_SetWaitStates(CY_CFG_PWR_USING_ULP != 0, CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ);
+        #endif
+    
+        /* Update System Core Clock values for correct Cy_SysLib_Delay functioning */
+        SystemCoreClockUpdate();
+        #ifndef CY_CFG_SYSCLK_ILO_ENABLED
+            #ifdef CY_CFG_SYSCLK_CLKLF_ENABLED
+            /* Wait 4 ILO cycles in case of unfinished CLKLF clock source transition */
+            Cy_SysLib_DelayUs(200U);
+            #endif
+        Cy_SysClk_IloDisable();
+        Cy_SysClk_IloHibernateOn(false);
+        #endif
+    
+    #endif /* (!defined(CY_DEVICE_SECURE)) */
+    
+#if defined(CY_CFG_SYSCLK_ECO_PRESCALER_ENABLED)
+        Cy_SysClk_EcoPrescalerInit();
+#endif /* defined(CY_CFG_SYSCLK_ECO_PRESCALER_ENABLED) */
+    #ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED
+        Cy_SysClk_ClkAltSysTickInit();
+    #endif
+    
+    /* Configure HF clocks CSV */
+    #ifdef CY_CFG_SYSCLK_CLKHF0_CSV_ENABLED
+        Cy_SysClk_ClkHf0CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF1_CSV_ENABLED
+        Cy_SysClk_ClkHf1CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF2_CSV_ENABLED
+        Cy_SysClk_ClkHf2CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF3_CSV_ENABLED
+        Cy_SysClk_ClkHf3CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF4_CSV_ENABLED
+        Cy_SysClk_ClkHf4CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF5_CSV_ENABLED
+        Cy_SysClk_ClkHf5CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF6_CSV_ENABLED
+        Cy_SysClk_ClkHf6CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF7_CSV_ENABLED
+        Cy_SysClk_ClkHf7CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF8_CSV_ENABLED
+        Cy_SysClk_ClkHf8CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF9_CSV_ENABLED
+        Cy_SysClk_ClkHf9CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF10CSV_ENABLED
+        Cy_SysClk_ClkHf10CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF11_CSV_ENABLED
+        Cy_SysClk_ClkHf11CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF12_CSV_ENABLED
+        Cy_SysClk_ClkHf12CsvInit();
+    #endif
+    #ifdef CY_CFG_SYSCLK_CLKHF13_CSV_ENABLED
+        Cy_SysClk_ClkHf13CsvInit();
+    #endif
+    
+    /* Configure LF clocks CSV */
+    #ifdef CY_CFG_SYSCLK_CLKLF_CSV_ENABLED
+        Cy_SysClk_ClkLfCsvInit();
+    #endif
 #if defined (CY_USING_HAL)
-    cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_0_obj);
-#endif //defined (CY_USING_HAL)
-
-#if defined (CY_USING_HAL)
-    cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_1_obj);
-#endif //defined (CY_USING_HAL)
-
-#if defined (CY_USING_HAL)
-    cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_2_obj);
-#endif //defined (CY_USING_HAL)
+    if(CY_RSLT_SUCCESS != (cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_0_obj)))
+    {
+        CY_HALT();
+    }
+    if(CY_RSLT_SUCCESS != (cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_1_obj)))
+    {
+        CY_HALT();
+    }
+    if(CY_RSLT_SUCCESS != (cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_2_obj)))
+    {
+        CY_HALT();
+    }
+    if(CY_RSLT_SUCCESS != (cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_3_obj)))
+    {
+        CY_HALT();
+    }
+    if(CY_RSLT_SUCCESS != (cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_4_obj)))
+    {
+        CY_HALT();
+    }
+#endif /* defined (CY_USING_HAL) */
 }
diff --git a/boot/cypress/platforms/BSP/PSOC6/cycfg_system.h b/boot/cypress/platforms/BSP/PSOC6/cycfg_system.h
index 581aeda..4872e19 100644
--- a/boot/cypress/platforms/BSP/PSOC6/cycfg_system.h
+++ b/boot/cypress/platforms/BSP/PSOC6/cycfg_system.h
@@ -1,86 +1,103 @@
 /*******************************************************************************
-* File Name: cycfg_system.h
-*
-* Description:
-* System configuration
-* This file was automatically generated and should not be modified.
-* Device Configurator: 2.0.0.1483
-* Device Support Library (../../../../output/libs/COMPONENT_PSOC6/psoc6pdl): 1.5.0.1837
-*
-********************************************************************************
-* Copyright 2017-2019 Cypress Semiconductor Corporation
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
+ * File Name: cycfg_system.h
+ *
+ * Description:
+ * System configuration
+ * This file was automatically generated and should not be modified.
+ * Configurator Backend 3.30.0
+ * device-db 4.5.20.7163
+ * mtb-pdl-cat1 3.100.0.38033
+ *
+ *******************************************************************************
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ******************************************************************************/
 
 #if !defined(CYCFG_SYSTEM_H)
 #define CYCFG_SYSTEM_H
 
+#include "cycfg_notices.h"
 #include "cy_sysclk.h"
-#include "cy_systick.h"
-#if defined (CY_USING_HAL)
-	#include "cyhal_hwmgr.h"
-#endif //defined (CY_USING_HAL)
+#include "cy_pra.h"
+#include "cy_pra_cfg.h"
+#include "cy_ble_clk.h"
 #include "cy_gpio.h"
+#include "cy_syspm.h"
+
+#if defined (CY_USING_HAL)
+#include "cyhal_hwmgr.h"
+#endif /* defined (CY_USING_HAL) */
 
 #if defined(__cplusplus)
 extern "C" {
-#endif
+#endif /* defined(__cplusplus) */
 
 #define cpuss_0_dap_0_ENABLED 1U
 #define srss_0_clock_0_ENABLED 1U
-#define srss_0_clock_0_altsystickclk_0_ENABLED 1U
 #define srss_0_clock_0_bakclk_0_ENABLED 1U
 #define srss_0_clock_0_fastclk_0_ENABLED 1U
 #define srss_0_clock_0_fll_0_ENABLED 1U
 #define srss_0_clock_0_hfclk_0_ENABLED 1U
 #define CY_CFG_SYSCLK_CLKHF0 0UL
-#define srss_0_clock_0_hfclk_2_ENABLED 1U
-#define CY_CFG_SYSCLK_CLKHF2 2UL
-#define srss_0_clock_0_hfclk_3_ENABLED 1U
-#define CY_CFG_SYSCLK_CLKHF3 3UL
-#define srss_0_clock_0_hfclk_4_ENABLED 1U
-#define CY_CFG_SYSCLK_CLKHF4 4UL
+#define CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM 0UL
 #define srss_0_clock_0_ilo_0_ENABLED 1U
 #define srss_0_clock_0_imo_0_ENABLED 1U
 #define srss_0_clock_0_lfclk_0_ENABLED 1U
 #define CY_CFG_SYSCLK_CLKLF_FREQ_HZ 32768
+#define CY_CFG_SYSCLK_CLKLF_SOURCE CY_SYSCLK_CLKLF_IN_WCO
 #define srss_0_clock_0_pathmux_0_ENABLED 1U
 #define srss_0_clock_0_pathmux_1_ENABLED 1U
 #define srss_0_clock_0_pathmux_2_ENABLED 1U
+#define srss_0_clock_0_pathmux_3_ENABLED 1U
+#define srss_0_clock_0_pathmux_4_ENABLED 1U
 #define srss_0_clock_0_periclk_0_ENABLED 1U
+#define CY_CFG_SYSCLK_CLKPERI_ENABLED 1
+#define CY_CFG_SYSCLK_CLKPERI_DIVIDER 0
 #define srss_0_clock_0_pll_0_ENABLED 1U
-#define srss_0_clock_0_pll_1_ENABLED 1U
 #define srss_0_clock_0_slowclk_0_ENABLED 1U
-#define srss_0_clock_0_timerclk_0_ENABLED 1U
 #define srss_0_clock_0_wco_0_ENABLED 1U
+#define srss_0_power_0_ENABLED 1U
+#define CY_CFG_PWR_MODE_LP 0x01UL
+#define CY_CFG_PWR_MODE_ULP 0x02UL
+#define CY_CFG_PWR_MODE_ACTIVE 0x04UL
+#define CY_CFG_PWR_MODE_SLEEP 0x08UL
+#define CY_CFG_PWR_MODE_DEEPSLEEP 0x10UL
+#define CY_CFG_PWR_SYS_IDLE_MODE CY_CFG_PWR_MODE_DEEPSLEEP
+#define CY_CFG_PWR_SYS_ACTIVE_MODE CY_CFG_PWR_MODE_LP
+#define CY_CFG_PWR_DEEPSLEEP_LATENCY 0UL
+#define CY_CFG_PWR_USING_LDO 1
+#define CY_CFG_PWR_VDDA_MV 3300
+#define CY_CFG_PWR_VDDD_MV 3300
+#define CY_CFG_PWR_VBACKUP_MV 3300
+#define CY_CFG_PWR_VDD_NS_MV 3300
+#define CY_CFG_PWR_VDDIO0_MV 3300
+#define CY_CFG_PWR_VDDIO1_MV 3300
 
 #if defined (CY_USING_HAL)
-	extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_0_obj;
-#endif //defined (CY_USING_HAL)
-#if defined (CY_USING_HAL)
-	extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_1_obj;
-#endif //defined (CY_USING_HAL)
-#if defined (CY_USING_HAL)
-	extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_2_obj;
-#endif //defined (CY_USING_HAL)
+extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_0_obj;
+extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_1_obj;
+extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_2_obj;
+extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_3_obj;
+extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_4_obj;
+#endif /* defined (CY_USING_HAL) */
 
 void init_cycfg_system(void);
 
 #if defined(__cplusplus)
 }
-#endif
-
+#endif /* defined(__cplusplus) */
 
 #endif /* CYCFG_SYSTEM_H */
diff --git a/boot/cypress/platforms/BSP/PSOC6/system/COMPONENT_CM0P/system_psoc6_cm0plus.c b/boot/cypress/platforms/BSP/PSOC6/system/COMPONENT_CM0P/system_psoc6_cm0plus.c
index 52927b3..dc25a4f 100644
--- a/boot/cypress/platforms/BSP/PSOC6/system/COMPONENT_CM0P/system_psoc6_cm0plus.c
+++ b/boot/cypress/platforms/BSP/PSOC6/system/COMPONENT_CM0P/system_psoc6_cm0plus.c
@@ -1,12 +1,12 @@
 /***************************************************************************//**
 * \file system_psoc6_cm0plus.c
-* \version 2.95.1
+* \version 2.100
 *
 * The device system-source file.
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2021 Cypress Semiconductor Corporation
+* Copyright 2016-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -30,6 +30,597 @@
 #include "cy_sysclk.h"
 #include "cy_wdt.h"
 
+#if (defined(CY_DEVICE_TVIIBE))
+#include "cmsis_compiler.h"
+
+#include "tviibe_partition.h"
+
+#define CY_SYS_CM4_PWR_CTL_KEY_OPEN  (0x05FAUL)
+#define CY_SYS_CM4_PWR_CTL_KEY_CLOSE (0xFA05UL)
+#define CY_SYS_CM4_VECTOR_TABLE_VALID_ADDR  (0x000003FFUL)
+
+static void EnableEcc(void);
+static void PrepareSystemCallInfrastructure(void);
+
+extern uint32_t Cy_u32StartupStackStartAddress;
+extern uint32_t Cy_u32StartupStackEndAddress;
+extern cy_israddress __ramVectors[];
+
+/* Interrupt Logic */
+
+static void SystemIrqInit(void);
+void Cy_DefaultUserHandler(void);
+
+#define DEFAULT_HANDLER_NAME Cy_DefaultUserHandler
+
+CY_NOINIT cy_israddress Cy_SystemIrqUserTable[CPUSS_SYSTEM_INT_NR] ;
+CY_NOINIT cy_israddress * Cy_SysInt_SystemIrqUserTableRamPointer ;
+__STATIC_FORCEINLINE void CM0_CpuIntr_Handler(uint8_t intrNum);
+
+/*******************************************************************************
+* SystemCoreClockUpdate()
+*******************************************************************************/
+
+/** Default HFClk frequency in Hz */
+#define CY_CLK_HFCLK0_FREQ_HZ_DEFAULT       (8000000UL)
+
+/** Default PeriClk frequency in Hz */
+#define CY_CLK_PERICLK_FREQ_HZ_DEFAULT      (8000000UL)
+
+/** Default system core frequency in Hz */
+#define CY_CLK_SYSTEM_FREQ_HZ_DEFAULT       (100000000UL)
+
+/** Holds the CLK_SLOW(Cortex-M0+) or CLK_FAST0(Cortex-M7_0) or CLK_FAST(Cortex-M7_1) system core clock */
+CY_NOINIT uint32_t SystemCoreClock ;
+
+/** Holds the HFClk0 clock frequency. Updated by \ref SystemCoreClockUpdate(). */
+CY_NOINIT uint32_t cy_Hfclk0FreqHz ;
+
+/** Holds the PeriClk clock frequency. Updated by \ref SystemCoreClockUpdate(). */
+CY_NOINIT uint32_t cy_PeriClkFreqHz ;
+
+/** Holds the AHB frequency. Updated by \ref SystemCoreClockUpdate(). */
+CY_NOINIT uint32_t cy_AhbFreqHz ;
+
+/*******************************************************************************
+* SystemCoreClockUpdate (void)
+*******************************************************************************/
+
+/* Do not use these definitions directly in your application */
+#define CY_DELAY_MS_OVERFLOW_THRESHOLD  (0x8000u)
+#define CY_DELAY_1K_THRESHOLD           (1000u)
+#define CY_DELAY_1K_MINUS_1_THRESHOLD   (CY_DELAY_1K_THRESHOLD - 1u)
+#define CY_DELAY_1M_THRESHOLD           (1000000u)
+#define CY_DELAY_1M_MINUS_1_THRESHOLD   (CY_DELAY_1M_THRESHOLD - 1u)
+
+CY_NOINIT uint32_t cy_delayFreqKhz ;
+CY_NOINIT uint8_t  cy_delayFreqMhz ;
+
+
+/*****************************************************************************
+* Global variable definitions (declared in header file with 'extern')
+*****************************************************************************/
+// CAUTION: Static or global initialized and non-const variables will not have their init value yet!
+
+
+#define SRAM_BEGIN_ADDR                     (BASE_SRAM_CM0P)
+#define SRAM_END_ADDR                       (CY_SRAM_BASE + CY_SRAM_SIZE)
+#define STARTUP_STACK_OFFSEST               (0x100) /* 32 2-words are cleaned by startup */
+
+#define ECC_INIT_WIDTH_BYTES                8
+#define SROM_VECTOR_TABLE_BASE_ADDRESS      0x00000000
+#define VECTOR_TABLE_OFFSET_IRQ0            0x40
+#define VECTOR_TABLE_OFFSET_IRQ1            0x44
+
+#if defined(__ARMCC_VERSION)
+extern unsigned int Image$$ARM_LIB_STACK$$ZI$$Limit;            /* for (default) One Region model */
+extern void __main(void);
+#elif defined (__GNUC__)
+extern unsigned int __StackTop;
+#elif defined (__ICCARM__)
+extern unsigned int CSTACK$$Limit;                      /* for (default) One Region model */
+#endif
+
+/******************************************************************************/
+
+/*******************************************************************************
+* Function Name: Cy_DefaultUserHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU attempts to call IRQ that has not been mapped to user functions.
+*
+*******************************************************************************/
+void Cy_DefaultUserHandler(void)
+{
+    // This IRQ occurred because CPU attempted to call IRQ that has not been mapped to user function
+    while(1);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux0_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt0 occurs.
+*
+*******************************************************************************/
+void NvicMux0_IRQHandler(void)
+{
+    CM0_CpuIntr_Handler(0);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux1_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt0 occurs.
+*
+*******************************************************************************/
+void NvicMux1_IRQHandler(void)
+{
+    CM0_CpuIntr_Handler(1);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux2_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt2 occurs.
+*
+*******************************************************************************/
+void NvicMux2_IRQHandler(void)
+{
+    CM0_CpuIntr_Handler(2);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux3_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt3 occurs.
+*
+*******************************************************************************/
+void NvicMux3_IRQHandler(void)
+{
+    CM0_CpuIntr_Handler(3);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux4_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt4 occurs.
+*
+*******************************************************************************/
+void NvicMux4_IRQHandler(void)
+{
+    CM0_CpuIntr_Handler(4);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux5_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt5 occurs.
+*
+*******************************************************************************/
+void NvicMux5_IRQHandler(void)
+{
+    CM0_CpuIntr_Handler(5);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux6_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt6 occurs.
+*
+*******************************************************************************/
+void NvicMux6_IRQHandler(void)
+{
+    CM0_CpuIntr_Handler(6);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux7_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt7 occurs.
+*
+*******************************************************************************/
+void NvicMux7_IRQHandler(void)
+{
+    CM0_CpuIntr_Handler(7);
+}
+
+/*******************************************************************************
+* Function Name: CM0_CpuIntr_Handler
+****************************************************************************//**
+*
+* The Inline handler for CPU interrupt.
+* The system interrupt mapped to CPU interrupt will be fetched and executed
+*
+*******************************************************************************/
+__STATIC_FORCEINLINE void CM0_CpuIntr_Handler(uint8_t intrNum)
+{
+    uint32_t system_int_idx;
+    cy_israddress handler;
+
+    if((_FLD2VAL(CPUSS_V2_CM0_INT0_STATUS_SYSTEM_INT_VALID, CPUSS_CM0_INT_STATUS[intrNum])))
+    {
+        system_int_idx = _FLD2VAL(CPUSS_V2_CM0_INT0_STATUS_SYSTEM_INT_IDX, CPUSS_CM0_INT_STATUS[intrNum]);
+        handler = Cy_SystemIrqUserTable[system_int_idx];
+        if(handler != NULL)
+        {
+            handler(); // jump to system interrupt handler
+        }
+    }
+    else
+    {
+        // Triggered by software or because software cleared a peripheral interrupt flag but did not clear the pending flag at NVIC
+    }
+    NVIC_ClearPendingIRQ((IRQn_Type)intrNum);
+}
+
+/*******************************************************************************
+* Function Name: SystemIrqInit
+****************************************************************************//**
+*
+* The function is called during device startup.
+*
+*******************************************************************************/
+static void SystemIrqInit(void)
+{
+    for (int i=0; i<(int)CPUSS_SYSTEM_INT_NR; i++)
+    {
+        Cy_SystemIrqUserTable[i] = DEFAULT_HANDLER_NAME;
+    }
+
+    Cy_SysInt_SystemIrqUserTableRamPointer = Cy_SystemIrqUserTable;
+}
+
+/** Define an abstract type for the chosen ECC initialization granularity */
+typedef uint64_t ecc_init_width_t;
+
+/* Provide empty __WEAK implementation for the low-level initialization
+   routine required by the RTOS-enabled applications.
+   clib-support library provides FreeRTOS-specific implementation:
+   https://github.com/Infineon/clib-support */
+void cy_toolchain_init(void);
+__WEAK void cy_toolchain_init(void)
+{
+}
+
+#if defined(__GNUC__) && !defined(__ARMCC_VERSION)
+/* GCC: newlib crt0 _start executes software_init_hook.
+   The cy_toolchain_init hook provided by clib-support library must execute
+   after static data initialization and before static constructors. */
+void software_init_hook();
+void software_init_hook()
+{
+    cy_toolchain_init();
+}
+#elif defined(__ICCARM__)
+/* Initialize data section */
+void __iar_data_init3(void);
+
+/* Call the constructors of all global objects */
+void __iar_dynamic_initialization(void);
+
+#else
+/**/
+#endif /* defined(__GNUC__) && !defined(__ARMCC_VERSION) */
+
+
+void CyMain(void)
+{
+#if defined(__ICCARM__)
+    /* Initialize data section */
+    __iar_data_init3();
+
+    /* Initialization hook for RTOS environment  */
+    cy_toolchain_init();
+
+    /* Call the constructors of all global objects */
+    __iar_dynamic_initialization();
+#endif
+
+    __PROGRAM_START();
+}
+
+
+/******************************************************************************/
+// TVIIBE SystemInit
+void SystemInit(void)
+{
+    /* Startup Init */
+    EnableEcc();
+    PrepareSystemCallInfrastructure();
+    /* Startup Init Done */
+
+    Cy_PDL_Init(CY_DEVICE_CFG);
+    Cy_WDT_Unlock();
+    Cy_WDT_Disable();
+
+    // Call custom user system init function (assuming weak ref was overridden by user)
+    Cy_SystemInit();
+    SystemCoreClockUpdate();
+
+    SystemIrqInit();
+}
+
+
+/*******************************************************************************
+* Function Name: EnableEcc
+****************************************************************************//**
+*
+* The function is called during device startup.
+*
+*******************************************************************************/
+static void EnableEcc(void)
+{
+    /* Enable ECC checking in SRAM controllers again (had been switched off by assembly startup code) */
+    CPUSS->RAM0_CTL0 &= ~(0x80000); /* set bit 19 to 0 */
+#if (CPUSS_RAMC1_PRESENT == 1u)
+    CPUSS->RAM1_CTL0 &= ~(0x80000); /* set bit 19 to 0 */
+#endif
+#if (CPUSS_RAMC2_PRESENT == 1u)
+    CPUSS->RAM2_CTL0 &= ~(0x80000); /* set bit 19 to 0 */
+#endif
+}
+
+
+/**
+ *****************************************************************************
+ ** Prepares necessary settings to get SROM system calls working
+ **
+ ** \return none
+ *****************************************************************************/
+static void PrepareSystemCallInfrastructure(void)
+{
+    const uint8_t u8Irq0Index = (uint8_t) (VECTOR_TABLE_OFFSET_IRQ0 / 4);
+    const uint8_t u8Irq1Index = (uint8_t) (VECTOR_TABLE_OFFSET_IRQ1 / 4);
+    uint32_t * const pu32RamTable   = (uint32_t *) __ramVectors;
+    uint32_t * const pu32SromTable  = (uint32_t *) SROM_VECTOR_TABLE_BASE_ADDRESS;
+
+    // Use IRQ0 and IRQ1 handlers from SROM vector table
+    pu32RamTable[u8Irq0Index] = pu32SromTable[u8Irq0Index];
+    pu32RamTable[u8Irq1Index] = pu32SromTable[u8Irq1Index];
+
+    NVIC_SetPriority(NvicMux0_IRQn, 1);
+    NVIC_SetPriority(NvicMux1_IRQn, 0);
+    NVIC_EnableIRQ(NvicMux0_IRQn);
+    NVIC_EnableIRQ(NvicMux1_IRQn);
+
+    // Only item left is clearing of PRIMASK:
+    // This should be done by the application at a later point in time (e.g. in main())
+}
+
+/*******************************************************************************
+* Function Name: Cy_SystemInit
+****************************************************************************//**
+*
+* The function is called during device startup.
+*
+*******************************************************************************/
+__WEAK void Cy_SystemInit(void)
+{
+     /* Empty weak function. The actual implementation to be in the app
+      * generated strong function.
+     */
+}
+
+/*******************************************************************************
+* Function Name: SystemCoreClockUpdate
+****************************************************************************//**
+*
+* Gets core clock frequency and updates \ref SystemCoreClock.
+*
+* Updates global variables used by the \ref Cy_SysLib_Delay(), \ref
+* Cy_SysLib_DelayUs(), and \ref Cy_SysLib_DelayCycles().
+*
+*******************************************************************************/
+void SystemCoreClockUpdate (void)
+{
+    uint32_t pathFreqHz;
+    uint32_t clkHfPath;
+
+    /* Get frequency for the high-frequency clock*/
+    clkHfPath = CY_SYSCLK_CLK_CORE_HF_PATH_NUM;
+
+    pathFreqHz = Cy_SysClk_ClkHfGetFrequency(clkHfPath);
+
+    SystemCoreClock = pathFreqHz;
+
+    cy_Hfclk0FreqHz = SystemCoreClock;
+
+    /* Get Peripheral clock Frequency*/
+    clkHfPath = CY_SYSCLK_CLK_PERI_HF_PATH_NUM;
+
+    pathFreqHz = Cy_SysClk_ClkHfGetFrequency(clkHfPath);
+
+    cy_PeriClkFreqHz = pathFreqHz;
+
+    /* Sets clock frequency for Delay API */
+    cy_delayFreqMhz = (uint32_t)((cy_delayFreqHz + CY_DELAY_1M_MINUS_1_THRESHOLD) / CY_DELAY_1M_THRESHOLD);
+    cy_delayFreqKhz = (cy_delayFreqHz + CY_DELAY_1K_MINUS_1_THRESHOLD) / CY_DELAY_1K_THRESHOLD;
+
+    /* Get the frequency of AHB source, CLK HF0 is the source for AHB*/
+    cy_AhbFreqHz = Cy_SysClk_ClkHfGetFrequency(0UL);
+}
+
+
+/*******************************************************************************
+* Function Name: Cy_SysGetCM4Status
+****************************************************************************//**
+*
+* Returns the Cortex-M4 core power mode.
+*
+* \return \ref group_system_config_cm4_status_macro
+*
+*******************************************************************************/
+uint32_t Cy_SysGetCM4Status(void)
+{
+    uint32_t regValue;
+
+    /* Get current power mode */
+    regValue = CPUSS->CM4_PWR_CTL & CPUSS_CM4_PWR_CTL_PWR_MODE_Msk;
+
+    return (regValue);
+}
+
+
+/*******************************************************************************
+* Function Name: Cy_SysEnableCM4
+****************************************************************************//**
+*
+* Sets vector table base address and enables the Cortex-M4 core.
+*
+* \note If the CPU is already enabled, it is reset and then enabled.
+*
+* \param vectorTableOffset The offset of the vector table base address from
+* memory address 0x00000000. The offset should be multiple to 1024 bytes.
+*
+*******************************************************************************/
+void Cy_SysEnableCM4(uint32_t vectorTableOffset)
+{
+    uint32_t regValue;
+    uint32_t interruptState;
+    uint32_t cpuState;
+
+    CY_ASSERT_L2((vectorTableOffset & CY_SYS_CM4_VECTOR_TABLE_VALID_ADDR) == 0UL);
+
+    interruptState = Cy_SysLib_EnterCriticalSection();
+
+    cpuState = Cy_SysGetCM4Status();
+    if (CY_SYS_CM4_STATUS_ENABLED == cpuState)
+    {
+        Cy_SysResetCM4();
+    }
+
+    CPUSS->CM4_VECTOR_TABLE_BASE = vectorTableOffset;
+
+    regValue = CPUSS->CM4_PWR_CTL & ~(CPUSS_CM4_PWR_CTL_VECTKEYSTAT_Msk | CPUSS_CM4_PWR_CTL_PWR_MODE_Msk);
+    regValue |= _VAL2FLD(CPUSS_CM4_PWR_CTL_VECTKEYSTAT, CY_SYS_CM4_PWR_CTL_KEY_OPEN);
+    regValue |= CY_SYS_CM4_STATUS_ENABLED;
+    CPUSS->CM4_PWR_CTL = regValue;
+
+    while((CPUSS->CM4_STATUS & CPUSS_CM4_STATUS_PWR_DONE_Msk) == 0UL)
+    {
+        /* Wait for the power mode to take effect */
+    }
+
+    Cy_SysLib_ExitCriticalSection(interruptState);
+}
+
+
+/*******************************************************************************
+* Function Name: Cy_SysDisableCM4
+****************************************************************************//**
+*
+* Disables the Cortex-M4 core and waits for the mode to take the effect.
+*
+* \warning Do not call the function while the Cortex-M4 is executing because
+* such a call may corrupt/abort a pending bus-transaction by the CPU and cause
+* unexpected behavior in the system including a deadlock. Call the function
+* while the Cortex-M4 core is in the Sleep or Deep Sleep low-power mode. Use
+* the \ref group_syspm Power Management (syspm) API to put the CPU into the
+* low-power modes. Use the \ref Cy_SysPm_ReadStatus() to get a status of the
+* CPU.
+*
+*******************************************************************************/
+void Cy_SysDisableCM4(void)
+{
+    uint32_t interruptState;
+    uint32_t regValue;
+
+    interruptState = Cy_SysLib_EnterCriticalSection();
+
+    regValue = CPUSS->CM4_PWR_CTL & ~(CPUSS_CM4_PWR_CTL_VECTKEYSTAT_Msk | CPUSS_CM4_PWR_CTL_PWR_MODE_Msk);
+    regValue |= _VAL2FLD(CPUSS_CM4_PWR_CTL_VECTKEYSTAT, CY_SYS_CM4_PWR_CTL_KEY_OPEN);
+    regValue |= CY_SYS_CM4_STATUS_DISABLED;
+    CPUSS->CM4_PWR_CTL = regValue;
+
+    while((CPUSS->CM4_STATUS & CPUSS_CM4_STATUS_PWR_DONE_Msk) == 0UL)
+    {
+        /* Wait for the power mode to take effect */
+    }
+
+    Cy_SysLib_ExitCriticalSection(interruptState);
+}
+
+
+/*******************************************************************************
+* Function Name: Cy_SysRetainCM4
+****************************************************************************//**
+*
+* Retains the Cortex-M4 core and exists without waiting for the mode to take
+* effect.
+*
+* \note The retained mode can be entered only from the enabled mode.
+*
+* \warning Do not call the function while the Cortex-M4 is executing because
+* such a call may corrupt/abort a pending bus-transaction by the CPU and cause
+* unexpected behavior in the system including a deadlock. Call the function
+* while the Cortex-M4 core is in the Sleep or Deep Sleep low-power mode. Use
+* the \ref group_syspm Power Management (syspm) API to put the CPU into the
+* low-power modes. Use the \ref Cy_SysPm_ReadStatus() to get a status of the CPU.
+*
+*******************************************************************************/
+void Cy_SysRetainCM4(void)
+{
+    uint32_t interruptState;
+    uint32_t regValue;
+
+    interruptState = Cy_SysLib_EnterCriticalSection();
+
+    regValue = CPUSS->CM4_PWR_CTL & ~(CPUSS_CM4_PWR_CTL_VECTKEYSTAT_Msk | CPUSS_CM4_PWR_CTL_PWR_MODE_Msk);
+    regValue |= _VAL2FLD(CPUSS_CM4_PWR_CTL_VECTKEYSTAT, CY_SYS_CM4_PWR_CTL_KEY_OPEN);
+    regValue |= CY_SYS_CM4_STATUS_RETAINED;
+    CPUSS->CM4_PWR_CTL = regValue;
+
+    Cy_SysLib_ExitCriticalSection(interruptState);
+}
+
+
+/*******************************************************************************
+* Function Name: Cy_SysResetCM4
+****************************************************************************//**
+*
+* Resets the Cortex-M4 core and waits for the mode to take the effect.
+*
+* \note The reset mode can not be entered from the retained mode.
+*
+* \warning Do not call the function while the Cortex-M4 is executing because
+* such a call may corrupt/abort a pending bus-transaction by the CPU and cause
+* unexpected behavior in the system including a deadlock. Call the function
+* while the Cortex-M4 core is in the Sleep or Deep Sleep low-power mode. Use
+* the \ref group_syspm Power Management (syspm) API to put the CPU into the
+* low-power modes. Use the \ref Cy_SysPm_ReadStatus() to get a status of the CPU.
+*
+*******************************************************************************/
+void Cy_SysResetCM4(void)
+{
+    uint32_t interruptState;
+    uint32_t regValue;
+
+    interruptState = Cy_SysLib_EnterCriticalSection();
+
+    regValue = CPUSS->CM4_PWR_CTL & ~(CPUSS_CM4_PWR_CTL_VECTKEYSTAT_Msk | CPUSS_CM4_PWR_CTL_PWR_MODE_Msk);
+    regValue |= _VAL2FLD(CPUSS_CM4_PWR_CTL_VECTKEYSTAT, CY_SYS_CM4_PWR_CTL_KEY_OPEN);
+    regValue |= CY_SYS_CM4_STATUS_RESET;
+    CPUSS->CM4_PWR_CTL = regValue;
+
+    while((CPUSS->CM4_STATUS & CPUSS_CM4_STATUS_PWR_DONE_Msk) == 0UL)
+    {
+        /* Wait for the power mode to take effect */
+    }
+
+    Cy_SysLib_ExitCriticalSection(interruptState);
+}
+
+
+#else /* End of TVIIBE section, start of PSoC 6 section */
+
 #if !defined(CY_IPC_DEFAULT_CFG_DISABLE)
     #include "cy_ipc_sema.h"
     #include "cy_ipc_pipe.h"
@@ -215,7 +806,7 @@
 #endif /* !defined(CY_IPC_DEFAULT_CFG_DISABLE) */
 
     #if defined(CY_DEVICE_SECURE)
-        /* Initialize Protected Regsiter Access driver. */
+        /* Initialize Protected Register Access driver. */
         Cy_PRA_Init();
     #endif /* defined(CY_DEVICE_SECURE) */
 }
@@ -513,5 +1104,6 @@
 }
 #endif /* defined (__ARMCC_VERSION) && (__ARMCC_VERSION < 6010050) */
 
+#endif /* (defined(CY_DEVICE_TVIIBE)) */
 
 /* [] END OF FILE */
diff --git a/boot/cypress/platforms/BSP/PSOC6/system/COMPONENT_CM4/system_psoc6_cm4.c b/boot/cypress/platforms/BSP/PSOC6/system/COMPONENT_CM4/system_psoc6_cm4.c
index 2c766c1..b5dada0 100644
--- a/boot/cypress/platforms/BSP/PSOC6/system/COMPONENT_CM4/system_psoc6_cm4.c
+++ b/boot/cypress/platforms/BSP/PSOC6/system/COMPONENT_CM4/system_psoc6_cm4.c
@@ -1,12 +1,12 @@
 /***************************************************************************//**
 * \file system_psoc6_cm4.c
-* \version 2.95.1
+* \version 2.100
 *
 * The device system-source file.
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2021 Cypress Semiconductor Corporation
+* Copyright 2016-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -30,6 +30,309 @@
 #include "cy_sysclk.h"
 #include "cy_wdt.h"
 
+#if (defined(CY_DEVICE_TVIIBE))
+
+/*******************************************************************************
+* SystemCoreClockUpdate()
+*******************************************************************************/
+
+/** Default HFClk frequency in Hz */
+#define CY_CLK_HFCLK0_FREQ_HZ_DEFAULT       (8000000UL)
+
+/** Default PeriClk frequency in Hz */
+#define CY_CLK_PERICLK_FREQ_HZ_DEFAULT      (8000000UL)
+
+/** Default system core frequency in Hz */
+#define CY_CLK_SYSTEM_FREQ_HZ_DEFAULT       (8000000UL)
+
+/* SCB->CPACR */
+#define SCB_CPACR_CP10_CP11_ENABLE      (0xFUL << 20u)
+
+/** Holds the CLK_SLOW(Cortex-M0+) or CLK_FAST0(Cortex-M4_0) system core clock */
+CY_NOINIT uint32_t SystemCoreClock ;
+
+/** Holds the HFClk0 clock frequency. Updated by \ref SystemCoreClockUpdate(). */
+CY_NOINIT uint32_t cy_Hfclk0FreqHz ;
+
+/** Holds the PeriClk clock frequency. Updated by \ref SystemCoreClockUpdate(). */
+CY_NOINIT uint32_t cy_PeriClkFreqHz ;
+
+/** Holds the AHB frequency. Updated by \ref SystemCoreClockUpdate(). */
+CY_NOINIT uint32_t cy_AhbFreqHz ;
+
+/*******************************************************************************
+* SystemCoreClockUpdate (void)
+*******************************************************************************/
+
+/* Do not use these definitions directly in your application */
+#define CY_DELAY_MS_OVERFLOW_THRESHOLD  (0x8000u)
+#define CY_DELAY_1K_THRESHOLD           (1000u)
+#define CY_DELAY_1K_MINUS_1_THRESHOLD   (CY_DELAY_1K_THRESHOLD - 1u)
+#define CY_DELAY_1M_THRESHOLD           (1000000u)
+#define CY_DELAY_1M_MINUS_1_THRESHOLD   (CY_DELAY_1M_THRESHOLD - 1u)
+
+CY_NOINIT uint32_t cy_delayFreqKhz ;
+
+CY_NOINIT uint8_t cy_delayFreqMhz ;
+
+/* Interrupt Logic */
+
+void Cy_DefaultUserHandler(void);
+
+#define DEFAULT_HANDLER_NAME                            Cy_DefaultUserHandler
+
+CY_NOINIT cy_israddress Cy_SystemIrqUserTable[CPUSS_SYSTEM_INT_NR] ;
+
+CY_NOINIT cy_israddress * Cy_SysInt_SystemIrqUserTableRamPointer ;
+
+void CM4_CpuIntr_Handler(uint8_t intrNum);
+
+/*******************************************************************************
+* Function Name: Cy_DefaultUserHandler
+****************************************************************************//**
+*
+*The Handler is called when the CPU attempts to call IRQ that has not been mapped to user functions.
+*
+*
+*******************************************************************************/
+void Cy_DefaultUserHandler(void)
+{
+    // This IRQ occurred because CPU attempted to call IRQ that has not been mapped to user function
+    while(1);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux0_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt0 occurs.
+*
+*******************************************************************************/
+void NvicMux0_IRQHandler(void)
+{
+    CM4_CpuIntr_Handler(0);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux1_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt0 occurs.
+*
+*******************************************************************************/
+void NvicMux1_IRQHandler(void)
+{
+    CM4_CpuIntr_Handler(1);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux2_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt2 occurs.
+*
+*******************************************************************************/
+void NvicMux2_IRQHandler(void)
+{
+    CM4_CpuIntr_Handler(2);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux3_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt3 occurs.
+*
+*******************************************************************************/
+void NvicMux3_IRQHandler(void)
+{
+    CM4_CpuIntr_Handler(3);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux4_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt4 occurs.
+*
+*******************************************************************************/
+void NvicMux4_IRQHandler(void)
+{
+    CM4_CpuIntr_Handler(4);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux5_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt5 occurs.
+*
+*******************************************************************************/
+void NvicMux5_IRQHandler(void)
+{
+    CM4_CpuIntr_Handler(5);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux6_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt6 occurs.
+*
+*******************************************************************************/
+void NvicMux6_IRQHandler(void)
+{
+    CM4_CpuIntr_Handler(6);
+}
+
+/*******************************************************************************
+* Function Name: NvicMux7_IRQHandler
+****************************************************************************//**
+*
+* The Handler is called when the CPU interrupt7 occurs.
+*
+*******************************************************************************/
+void NvicMux7_IRQHandler(void)
+{
+    CM4_CpuIntr_Handler(7);
+}
+
+/*******************************************************************************
+* Function Name: CM4_CpuIntr_Handler
+****************************************************************************//**
+*
+* The Inline handler for CPU interrupt.
+* The system interrupt mapped to CPU interrupt will be fetched and executed
+*
+*******************************************************************************/
+void CM4_CpuIntr_Handler(uint8_t intrNum)
+{
+    uint32_t system_int_idx;
+    cy_israddress handler;
+
+    if((_FLD2VAL(CPUSS_V2_CM4_INT0_STATUS_SYSTEM_INT_VALID, CPUSS_CM4_INT_STATUS[intrNum])))
+    {
+        system_int_idx = _FLD2VAL(CPUSS_V2_CM4_INT0_STATUS_SYSTEM_INT_IDX, CPUSS_CM4_INT_STATUS[intrNum]);
+        handler = Cy_SystemIrqUserTable[system_int_idx];
+        handler(); // jump to system interrupt handler
+    }
+    NVIC_ClearPendingIRQ((IRQn_Type)intrNum);
+}
+
+/*******************************************************************************
+* Function Name: SystemIrqInit
+****************************************************************************//**
+*
+* The function is called during device startup.
+*
+*******************************************************************************/
+void SystemIrqInit(void)
+{
+    for (int i=0; i<(int)CPUSS_SYSTEM_INT_NR; i++)
+    {
+        Cy_SystemIrqUserTable[i] = DEFAULT_HANDLER_NAME;
+    }
+
+    Cy_SysInt_SystemIrqUserTableRamPointer = Cy_SystemIrqUserTable;
+}
+
+/*******************************************************************************
+* Function Name: SystemInit
+****************************************************************************//**
+* \cond
+* Initializes the system:
+* - Unlocks and disables WDT.
+* - Calls the Cy_SystemInit() function.
+* - Calls \ref SystemCoreClockUpdate().
+* \endcond
+*******************************************************************************/
+void SystemInit(void)
+{
+    // TVIIBE SystemInit
+    Cy_PDL_Init(CY_DEVICE_CFG);
+
+    Cy_SystemInit();
+    SystemCoreClockUpdate();
+
+    SystemIrqInit();
+}
+
+/*******************************************************************************
+* Function Name: Cy_SystemInit
+****************************************************************************//**
+*
+* The function is called during device startup.
+*
+*******************************************************************************/
+__WEAK void Cy_SystemInit(void)
+{
+     /* Empty weak function. The actual implementation to be in the user application
+      * as strong function.
+     */
+}
+
+/*******************************************************************************
+* Function Name: SystemCoreClockUpdate
+****************************************************************************//**
+*
+* Gets core clock frequency and updates \ref SystemCoreClock, \ref
+* cy_Hfclk0FreqHz, and \ref cy_PeriClkFreqHz.
+*
+* Updates global variables used by the \ref Cy_SysLib_Delay(), \ref
+* Cy_SysLib_DelayUs(), and \ref Cy_SysLib_DelayCycles().
+*
+*******************************************************************************/
+void SystemCoreClockUpdate (void)
+{
+    uint32_t pathFreqHz;
+    uint32_t clkHfPath;
+
+    /* Get frequency for the high-frequency clock # 0 */
+    clkHfPath = CY_SYSCLK_CLK_CORE_HF_PATH_NUM;
+
+    pathFreqHz = Cy_SysClk_ClkHfGetFrequency(clkHfPath);
+
+    SystemCoreClock = pathFreqHz;
+
+    cy_Hfclk0FreqHz = SystemCoreClock;
+
+    /* Get frequency for the high-frequency clock # 2 , which is used for PERI PCLK*/
+    clkHfPath = CY_SYSCLK_CLK_PERI_HF_PATH_NUM;
+
+    pathFreqHz = Cy_SysClk_ClkHfGetFrequency(clkHfPath);
+
+    cy_PeriClkFreqHz = pathFreqHz;
+
+    /* Sets clock frequency for Delay API */
+    cy_delayFreqMhz = (uint32_t)((cy_delayFreqHz + CY_DELAY_1M_MINUS_1_THRESHOLD) / CY_DELAY_1M_THRESHOLD);
+    cy_delayFreqKhz = (cy_delayFreqHz + CY_DELAY_1K_MINUS_1_THRESHOLD) / CY_DELAY_1K_THRESHOLD;
+
+    /* Get the frequency of AHB source, CLK HF0 is the source for AHB*/
+    cy_AhbFreqHz = Cy_SysClk_ClkHfGetFrequency(0UL);
+}
+
+/*******************************************************************************
+* Function Name: Cy_SystemInitFpuEnable
+****************************************************************************//**
+*
+* Enables the FPU if it is used. The function is called from the startup file.
+*
+*******************************************************************************/
+void Cy_SystemInitFpuEnable(void)
+{
+    #if defined (__FPU_USED) && (__FPU_USED == 1U)
+        uint32_t  interruptState;
+        interruptState = __get_PRIMASK();
+        __disable_irq();
+        SCB->CPACR |= SCB_CPACR_CP10_CP11_ENABLE;
+        __DSB();
+        __ISB();
+        __set_PRIMASK(interruptState);
+    #endif /* (__FPU_USED) && (__FPU_USED == 1U) */
+}
+
+#else /* PSoC 6 */
+
 #if !defined(CY_IPC_DEFAULT_CFG_DISABLE)
     #include "cy_ipc_sema.h"
     #include "cy_ipc_pipe.h"
@@ -357,5 +660,6 @@
 }
 #endif /* defined (__ARMCC_VERSION) && (__ARMCC_VERSION < 6010050) */
 
+#endif /* (defined(CY_DEVICE_TVIIBE)) */
 
 /* [] END OF FILE */
diff --git a/boot/cypress/platforms/BSP/PSOC6/system/system_psoc6.h b/boot/cypress/platforms/BSP/PSOC6/system/system_psoc6.h
index eb65a16..c4b2645 100644
--- a/boot/cypress/platforms/BSP/PSOC6/system/system_psoc6.h
+++ b/boot/cypress/platforms/BSP/PSOC6/system/system_psoc6.h
@@ -1,12 +1,12 @@
 /***************************************************************************//**
 * \file system_psoc6.h
-* \version 2.95.1
+* \version 2.100
 *
 * \brief Device system header file.
 *
 ********************************************************************************
 * \copyright
-* Copyright 2016-2021 Cypress Semiconductor Corporation
+* Copyright 2016-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -69,7 +69,7 @@
 * Cy_SysEnableCM4() function call.
 * By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
 * More about CM0+ prebuilt images, see here:
-* https://github.com/cypresssemiconductorco/psoc6cm0p
+* https://github.com/Infineon/psoc6cm0p
 *
 * Change the flash and RAM sizes by editing the macros value in the
 * linker files for both CPUs:
@@ -106,7 +106,7 @@
 * Cy_SysEnableCM4() function call.
 * By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
 * More about CM0+ prebuilt images, see here:
-* https://github.com/cypresssemiconductorco/psoc6cm0p
+* https://github.com/Infineon/psoc6cm0p
 *
 * \note The linker files provided with the PDL are generic and handle all common
 * use cases. Your project may not use every section defined in the linker files.
@@ -156,7 +156,7 @@
 * Cy_SysEnableCM4() function call.
 * By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
 * More about CM0+ prebuilt images, see here:
-* https://github.com/cypresssemiconductorco/psoc6cm0p
+* https://github.com/Infineon/psoc6cm0p
 *
 * Change the flash and RAM sizes by editing the macros value in the
 * linker files for both CPUs:
@@ -240,7 +240,7 @@
 * clib-support library that provides newlib-compatible implementations of
 * 'sbrk', '__malloc_lock' and '__malloc_unlock':
 * <br>
-* https://github.com/cypresssemiconductorco/clib-support.
+* https://github.com/Infineon/clib-support.
 *
 * \subsubsection group_system_config_heap_stack_config_mdk ARM Compiler
 * - <b>Editing source code files</b>\n
@@ -334,6 +334,11 @@
 *       <th>Reason for Change</th>
 *   </tr>
 *   <tr>
+*       <td rowspan="1">2.100</td>
+*       <td>Added support for TRAVEO&trade; II Body Entry devices.</td>
+*       <td>Code enhancement and support for new devices.</td>
+*   </tr> 
+*   <tr>
 *       <td rowspan="1">2.95.1</td>
 *       <td>Restructured documentation.</td>
 *       <td>Documentation update.</td>
@@ -341,7 +346,7 @@
 *   <tr>
 *       <td rowspan="1">2.95</td>
 *       <td>Update FPU enable function with CMSIS macros to disable/enable interrupts</td>
-*       <td>Move to stadnard inline CMSIS ARM macros</td>
+*       <td>Move to standard inline CMSIS ARM macros</td>
 *   </tr>
 *   <tr>
 *       <td rowspan="2">2.91</td>
@@ -552,7 +557,13 @@
 *        <i>(USER SETTING)</i>
 *******************************************************************************/
 #if !defined (CY_CORTEX_M4_APPL_ADDR)
-    #define CY_CORTEX_M4_APPL_ADDR          (CY_FLASH_BASE + 0x2000U)   /* <<< 8 kB of flash is reserved for the Cortex-M0+ application */
+    // Include a partition file for Traveo II BE devices
+    #if (defined (CY_DEVICE_SERIES_CYT2B6) || defined (CY_DEVICE_SERIES_CYT2B7) || defined (CY_DEVICE_SERIES_CYT2B9) || defined (CY_DEVICE_SERIES_CYT2BL))
+        #include "tviibe_partition.h"
+        #define CY_CORTEX_M4_APPL_ADDR          BASE_CODE_FLASH_CM4_0
+    #else
+        #define CY_CORTEX_M4_APPL_ADDR          (CY_FLASH_BASE + 0x2000U)   /* <<< 8 kB of flash is reserved for the Cortex-M0+ application */
+    #endif
 #endif /* (CY_CORTEX_M4_APPL_ADDR) */
 
 
diff --git a/boot/cypress/platforms/BSP/XMC7000/cybsp.c b/boot/cypress/platforms/BSP/XMC7000/cybsp.c
index 00c25fd..6f08f7a 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cybsp.c
+++ b/boot/cypress/platforms/BSP/XMC7000/cybsp.c
@@ -7,7 +7,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/XMC7000/cybsp.h b/boot/cypress/platforms/BSP/XMC7000/cybsp.h
index cd27cf6..7ba085f 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cybsp.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cybsp.h
@@ -6,7 +6,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/XMC7000/cybsp_doc.h b/boot/cypress/platforms/BSP/XMC7000/cybsp_doc.h
index 30363dc..5378efd 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cybsp_doc.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cybsp_doc.h
@@ -1,6 +1,6 @@
 /***********************************************************************************************//**
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/XMC7000/cybsp_hw_config.h b/boot/cypress/platforms/BSP/XMC7000/cybsp_hw_config.h
index a6c9bad..b8f3546 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cybsp_hw_config.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cybsp_hw_config.h
@@ -7,7 +7,7 @@
  *
  ***************************************************************************************************
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/XMC7000/cybsp_types.h b/boot/cypress/platforms/BSP/XMC7000/cybsp_types.h
index aeb7023..c20d555 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cybsp_types.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cybsp_types.h
@@ -1,6 +1,6 @@
 /***********************************************************************************************//**
  * \copyright
- * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg.c b/boot/cypress/platforms/BSP/XMC7000/cycfg.c
index 734470f..18ad9eb 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg.c
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg.c
@@ -10,7 +10,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg.h b/boot/cypress/platforms/BSP/XMC7000/cycfg.h
index 9528ebe..c65929a 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg.h
@@ -10,7 +10,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_clocks.c b/boot/cypress/platforms/BSP/XMC7000/cycfg_clocks.c
index 4b16b75..90d5a10 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_clocks.c
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_clocks.c
@@ -9,7 +9,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_clocks.h b/boot/cypress/platforms/BSP/XMC7000/cycfg_clocks.h
index 0bb0ba4..1c8e274 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_clocks.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_clocks.h
@@ -9,7 +9,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_notices.h b/boot/cypress/platforms/BSP/XMC7000/cycfg_notices.h
index 318279d..958f2a3 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_notices.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_notices.h
@@ -10,7 +10,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_peripherals.c b/boot/cypress/platforms/BSP/XMC7000/cycfg_peripherals.c
index 3701533..42ffcbb 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_peripherals.c
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_peripherals.c
@@ -9,7 +9,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_peripherals.h b/boot/cypress/platforms/BSP/XMC7000/cycfg_peripherals.h
index cb08758..decbc73 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_peripherals.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_peripherals.h
@@ -9,7 +9,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_pins.c b/boot/cypress/platforms/BSP/XMC7000/cycfg_pins.c
index 9724f7d..1787b68 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_pins.c
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_pins.c
@@ -9,7 +9,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_pins.h b/boot/cypress/platforms/BSP/XMC7000/cycfg_pins.h
index 29b5cd9..f27f86d 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_pins.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_pins.h
@@ -9,7 +9,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_qspi_memslot.c b/boot/cypress/platforms/BSP/XMC7000/cycfg_qspi_memslot.c
index 9ab1bcf..c2d6e16 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_qspi_memslot.c
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_qspi_memslot.c
@@ -7,7 +7,7 @@
  * QSPI Configurator 4.30.0.1865
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_qspi_memslot.h b/boot/cypress/platforms/BSP/XMC7000/cycfg_qspi_memslot.h
index 7507b44..b834288 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_qspi_memslot.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_qspi_memslot.h
@@ -7,7 +7,7 @@
  * QSPI Configurator 4.30.0.1865
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_routing.h b/boot/cypress/platforms/BSP/XMC7000/cycfg_routing.h
index 0932043..6a568a0 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_routing.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_routing.h
@@ -9,7 +9,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_system.c b/boot/cypress/platforms/BSP/XMC7000/cycfg_system.c
index 5debda7..7922f27 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_system.c
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_system.c
@@ -9,7 +9,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/cycfg_system.h b/boot/cypress/platforms/BSP/XMC7000/cycfg_system.h
index e214cda..93575ee 100644
--- a/boot/cypress/platforms/BSP/XMC7000/cycfg_system.h
+++ b/boot/cypress/platforms/BSP/XMC7000/cycfg_system.h
@@ -9,7 +9,7 @@
  * mtb-pdl-cat1 3.600.0.33254
  *
  *******************************************************************************
- * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  * SPDX-License-Identifier: Apache-2.0
  *
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/linker.ld b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/linker.ld
index 96d2f68..fa98705 100644
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/linker.ld
+++ b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/linker.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2021 Cypress Semiconductor Corporation
+* Copyright 2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM0P/system_cm0plus.c b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM0P/system_cm0plus.c
index f110bef..7a4e9fd 100644
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM0P/system_cm0plus.c
+++ b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM0P/system_cm0plus.c
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2021 Cypress Semiconductor Corporation
+* Copyright 2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/startup_cat1c.h b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/startup_cat1c.h
index 3540379..cd13ca8 100644
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/startup_cat1c.h
+++ b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/startup_cat1c.h
@@ -1,3 +1,21 @@
+/*******************************************************************************
+* \copyright
+* Copyright 2025 Cypress Semiconductor Corporation
+* SPDX-License-Identifier: Apache-2.0
+*
+* 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.
+*******************************************************************************/
+
 #ifndef __STARTUP_CAT1C_H__
 #define __STARTUP_CAT1C_H__
 
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/startup_cm7.c b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/startup_cm7.c
index 0415a87..ccdfec2 100644
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/startup_cm7.c
+++ b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/startup_cm7.c
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2021 Cypress Semiconductor Corporation
+* Copyright 2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/system_cat1c.h b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/system_cat1c.h
index 8c67ae9..e6b7373 100644
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/system_cat1c.h
+++ b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/system_cat1c.h
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2021 Cypress Semiconductor Corporation
+* Copyright 2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/system_cm7.c b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/system_cm7.c
index 488f191..80058f3 100644
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/system_cm7.c
+++ b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_CM7/system_cm7.c
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2021 Cypress Semiconductor Corporation
+* Copyright 2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/startup_cat1c.h b/boot/cypress/platforms/BSP/XMC7000/system/startup_cat1c.h
index 3540379..cd13ca8 100644
--- a/boot/cypress/platforms/BSP/XMC7000/system/startup_cat1c.h
+++ b/boot/cypress/platforms/BSP/XMC7000/system/startup_cat1c.h
@@ -1,3 +1,21 @@
+/*******************************************************************************
+* \copyright
+* Copyright 2025 Cypress Semiconductor Corporation
+* SPDX-License-Identifier: Apache-2.0
+*
+* 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.
+*******************************************************************************/
+
 #ifndef __STARTUP_CAT1C_H__
 #define __STARTUP_CAT1C_H__
 
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/system_cat1c.h b/boot/cypress/platforms/BSP/XMC7000/system/system_cat1c.h
index 3fe0771..6f64626 100644
--- a/boot/cypress/platforms/BSP/XMC7000/system/system_cat1c.h
+++ b/boot/cypress/platforms/BSP/XMC7000/system/system_cat1c.h
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2021 Cypress Semiconductor Corporation
+* Copyright 2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/xmc7xxx_partition.h b/boot/cypress/platforms/BSP/XMC7000/system/xmc7xxx_partition.h
index b6a3f2d..9c76d22 100644
--- a/boot/cypress/platforms/BSP/XMC7000/system/xmc7xxx_partition.h
+++ b/boot/cypress/platforms/BSP/XMC7000/system/xmc7xxx_partition.h
@@ -1,3 +1,21 @@
+/*******************************************************************************
+* \copyright
+* Copyright 2025 Cypress Semiconductor Corporation
+* SPDX-License-Identifier: Apache-2.0
+*
+* 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.
+*******************************************************************************/
+
 #if !defined(LAYOUT_CAT1C_H)
 #define LAYOUT_CAT1C_H
 
diff --git a/boot/cypress/platforms/CYW20829.md b/boot/cypress/platforms/CYW20829.md
index 08a985e..d6e546b 100644
--- a/boot/cypress/platforms/CYW20829.md
+++ b/boot/cypress/platforms/CYW20829.md
@@ -2,47 +2,45 @@
 
 ### Prerequisites
 
-#### Cysecuretools
+#### Edgeprotecttools
 
-The CYW20829/CYW89829 devices have a set of security features. A special tool called `cysecuretools` is required to use most of them.
+The CYW20829/CYW89829 devices have a set of security features. A special tool called `edgeprotecttools` is required to use most of them.
 
-`Cysecuretools` is a Python3 package, which can be installed using the conventional `python pip` packet manager:
+`Edgeprotecttools` is a Python package, which can be installed using the conventional `python pip` packet manager:
 
-    python -m pip install cysecuretools
+    python -m pip install edgeprotecttools
 
-`Cysecuretools` is used for reprovisioning of the chip, revocation of keys, security counter updates, image encryption, and more. For more details on functionality, go to [https://pypi.org/project/cysecuretools](https://pypi.org/project/cysecuretools) or [https://github.com/Infineon/cysecuretools#provision-device](https://github.com/Infineon/cysecuretools#provision-device)
+`Edgeprotecttools` is used for reprovisioning of the chip, revocation of keys, security counter updates, image encryption, and more. For more details on functionality, go to [https://pypi.org/project/edgeprotecttools](https://pypi.org/project/edgeprotecttools) or [https://github.com/Infineon/edgeprotecttools#provision-device](https://github.com/Infineon/edgeprotecttools#provision-device)
 
-Invocation of cysecuretools is build-in post-build jobs for `MCUBootApp` and `BlinkyApp`, so the user gets ready to use images after build.
+Invocation of edgeprotecttools is build-in post-build jobs for `MCUBootApp` and `BlinkyApp`, so the user gets ready to use images after build.
+
+Requirements for `Edgeprotecttools` installation can be found [here](https://github.com/Infineon/edgeprotecttools?tab=readme-ov-file#prerequisites).
 
 ### MCUBootApp specifics
-The PSoC CYW20829/CYW89829 can work in two modes - Non-Secure and Secure. In the Non-Secure (NORMAL_NO_SECURE) mode the CYW20829/CYW89829 works as a 'usual' Infineon chip. In the SECURE mode the following functionality becomes available:  
+The CYW20829/CYW89829 silicons can be provisioned in two modes - Non-Secure and Secure. In the Non-Secure (NORMAL_NO_SECURE) mode the CYW20829/CYW89829 works as a 'usual' Infineon chip. In the SECURE mode the following functionality becomes available:
  - signing of images;
  - rollback protection (hardware secure counter).   
 
 The work with the CYW20829/CYW89829 chips begin from the initialization of the project with the following device provisioning in the desired lifecycle - Non-Secure on Secure.
 
 ### Device and environment initialization
-For the cysecuretools environment setup, the MCUboot `boot/cypress` folder is used.
+For the edgeprotecttools environment setup, the MCUboot `boot/cypress` folder is used.
 
 To create a common configuration, use:
 
-    cysecuretools -t cyw20829 init
+    edgeprotecttools -t cyw20829 init
 
-To configure an OpenOCD package patch (via ModusToolbox™ by default):
+To configure an OpenOCD package path (via ModusToolbox™ Programming Tools by default):
 
-    cysecuretools set-ocd --name openocd --path C:/Users/%USERNAME%/ModusToolbox/tools_3.2/openocd
+    edgeprotecttools set-ocd --name openocd --path C:/Infineon/Tools/ModusToolboxProgtools-1.4/openocd
 
-This is enough for a NORMAL_NO_SECURE lifecycle. But for SECURE `LCS`, a few more steps are necessary.
+For SECURE `LCS`, a few more steps are necessary. You will need to generate an RSA key pair (or copy it to the keys folder, if it was generated previously), to provision a chip in Secure mode:
 
-You will need to generate an RSA key pair (or copy it to the keys folder, if it was generated previously), to provision a chip in Secure mode:
-
-    cysecuretools -t cyw20829 -p policy/policy_secure.json create-key -k N
-
-where N is the key number, zero or one.
+    edgeprotecttools -t cyw20829 -p policy/policy_secure.json create-key -k 0
 
 To get access to the chip after provisioning, a debug certificate is required:
 
-    cysecuretools -t cyw20829 -p policy/policy_secure.json debug-certificate -t packets/debug_cert.json -o packets/debug_cert.bin -k N
+    edgeprotecttools -t cyw20829 -p policy/policy_secure.json debug-certificate -t packets/debug_cert.json -o packets/debug_cert.bin -k N
 
 where N is the key number, zero or one.
 
@@ -50,20 +48,152 @@
 
 For the first provision of the CYW20829 chip, use:
 
-    cysecuretools -t cyw20829 -p policy/policy_%LCS%.json provision-device
+    edgeprotecttools -t cyw20829 -p policy/policy_%LCS%.json provision-device
 
 or
 
-    cysecuretools -t cyw20829 -p policy/policy_reprovisioning_%LCS%.json reprovision-device [--key-id N]
+    edgeprotecttools -t cyw20829 -p policy/policy_reprovisioning_%LCS%.json reprovision-device [--key-id N]
 
 for the following reprovision procedure.
 
-More details about provisioning and reprovisioning processes you can find in [README_CYW20829.md](https://github.com/Infineon/cysecuretools/blob/master/docs/README_CYW20829.md#command-provision-device)
+More details about provisioning and reprovisioning processes you can find in [README_CYW20829.md](https://github.com/Infineon/edgeprotecttools/blob/master/docs/README_CYW20829.md#command-provision-device)
 
 ### Default memory map
 
 The repository provides a set of predefined memory maps in JSON files. They are located in `platforms/memory/CYW20829/flashmap`. One can use the predefined flash map or define your own using the predefined file as a template.
 
+### Direct-XIP mode support
+
+Additionally to the classic mode with `BOOT` and `UPGRADE` slots, MCUBoot for CYW20829/CYW89829 platform supports the `Direct-XIP` mode. The main difference is that both slots, named `Primary` and `Secondary`, are equal, and the image in one slot has no effect on the other image. In this mode, MCUBoot checks the version of the images and launches the application with the higher version number. The version number can be set via the `IMG_VER` command-line parameter. If both version numbers are equal, the image in the primary slot will be launched. The build number is not taken into account during version comparison; only the major, minor, and patch version numbers are considered.
+In the `Direct-XIP` mode, both images are treated like `UPGRADE` images. This implies that each image must set the `IMG_OK` flag during its first startup. If the `IMG_OK` flag is not set, the corresponding application will be erased, and the application from the other slot will be launched. If neither application sets the `IMG_OK` flag, MCUBoot will erase both applications. The `Direct-XIP` mode supports encrypted images. In this mode, the MCUBootApp and all images are encrypted using the same `AES-CTR` encryption key. For more information, refer to the `Encrypted image support` section.
+Another change is that the `APP_SLOT` command line parameter should be used for application compilation instead of the `IMG_TYPE` parameter. Use `APP_SLOT=1` for the `Primary` slot and `APP_SLOT=2` for the `Secondary`.
+
+To enable the `Direct-XIP` mode, use the appropriate flash map, such as `cyw20829_direct_xip_single.json`
+
+    make clean app APP_NAME=MCUBootApp PLATFORM=CYW20829 FLASH_MAP=platforms/memory/CYW20829/flashmap/cyw20829_direct_xip_single.json
+    make app APP_NAME=BlinkyApp PLATFORM=CYW20829 FLASH_MAP=platforms/memory/CYW20829/flashmap/cyw20829_direct_xip_single.json APP_SLOT=1 IMG_VER=1.0.0+100
+    make app APP_NAME=BlinkyApp PLATFORM=CYW20829 FLASH_MAP=platforms/memory/CYW20829/flashmap/cyw20829_direct_xip_single.json APP_SLOT=2 IMG_VER=2.0.0+200
+
+NOTE: Currently, support for the `Direct-XIP` mode is limited to the `NORMAL_NO_SECURE` lifecycle.
+
+### Skip image validation
+
+To decrease the boot time of MCUBoot, image validation can be skipped before launching the application. This flow is recommended in cases where boot time is more important than reliability. To disable image validation for a selected slot, use the `MCUBOOT_SKIP_VALIDATE_PRIMARY_SLOT=1` or `MCUBOOT_SKIP_VALIDATE_SECONDARY_SLOT=1` command-line parameter.
+To skip image validation entirely, the `MCUBOOT_SKIP_VALIDATE=1` option can be used.
+
+### Direct-XIP APIs
+
+The Direct-XIP API provides a comprehensive set of functions for managing firmware images and their associated metadata in boot slots. This API is designed to facilitate secure and reliable firmware updates in embedded systems and supports operations such as slot validation, image state management, and metadata handling. Below is a summary of the key API functions and their purposes.
+
+- Image Validation:
+Use `boot_validate_slot_for_image_id` to ensure that the firmware image in a slot is valid before executing it. This API is useful when MCUBoot startup validation is disabled.
+
+- Slot Management:
+Use `boot_set_inactive_slot`, `boot_is_slot_inactive`, or `boot_set_pending_slot` to manage the activation and deactivation of firmware slots.
+
+- Metadata Handling:
+Use `boot_find_image_tlv_info` and `boot_read_image_tlv_value` to retrieve and parse metadata associated with firmware images.
+ 
+- State Inspection:
+Use `boot_get_slot_state` or `boot_get_image_state` to monitor and debug the current state of firmware images in the system.
+
+- Revert Mechanism:
+        Use `boot_set_revert_slot` to mark a slot for erasure on the next reboot if its firmware fails validation.
+
+
+#### Slot Validation and Image Management APIs
+
+    boot_validate_slot_for_image_id
+        Description: Validates the image in a specified slot without performing a boot.
+        Parameters:
+            image_id: Image identifier (starting from 0).
+            slot_id: Slot index (0 for primary, 1 for secondary).
+        Returns: FIH_SUCCESS on success.
+
+    boot_get_image_version
+        Description: Reads the version information (major, minor, patch, and build) from the image header in the specified slot.
+        Parameters:
+            image_id: Image identifier.
+            slot_id: Slot index.
+            ver: Pointer to the structure where version information will be stored.
+        Returns: 0 on success.
+
+    boot_set_inactive_slot
+        Description: Marks the specified slot as inactive.
+        Parameters:
+            image_id: Image identifier.
+            slot_id: Slot index.
+        Returns: 0 on success.
+
+    boot_is_slot_inactive
+        Description: Checks if the specified slot is inactive.
+        Parameters:
+            image_id: Image identifier.
+            slot_id: Slot index.
+        Returns:
+            1: Slot is inactive.
+            0: Slot is active.
+            -1: Error occurred.
+
+    boot_set_pending_slot
+        Description: Restores an inactive slot to a pending state, making it bootable in the next cycle.
+        Parameters:
+            image_id: Image identifier.
+            slot_id: Slot index.
+        Returns: 0 on success.
+
+    boot_set_revert_slot
+        Description: Sets the revert state for a slot, indicating that the image will be erased on the next boot if not validated.
+        Parameters:
+            image_id: Image identifier.
+            slot_id: Slot index.
+        Returns: 0 on success.
+
+
+#### Metadata (TLV) Handling APIs
+
+    boot_find_image_tlv_info
+        Description: Finds metadata information (Type-Length-Value) for a specific image and slot, returning the offset and length of the requested TLV entry.
+        Parameters:
+            image_id: Image identifier.
+            slot_id: Slot index.
+            type: TLV type identifier.
+            len: Pointer to store the length of the TLV entry.
+            off: Pointer to store the offset of the TLV entry.
+        Returns: 0 on success, non-zero on error or if the TLV is not found.
+
+    boot_read_image_tlv_value
+        Description: Reads the actual value of a TLV entry from the specified image slot.
+        Parameters:
+            image_id: Image identifier.
+            slot_id: Slot index.
+            type: TLV type identifier.
+            buf: Buffer to store the retrieved TLV value.
+            buf_len: Length of the provided buffer.
+            read_len: Pointer to store the actual number of bytes read.
+        Returns: 0 on success, non-zero on error or insufficient buffer length.
+
+
+#### Slot and Image State Management APIs
+
+    boot_get_slot_state
+        Description: Retrieves the current state of a specified slot without performing image validation.
+        Parameters:
+            image_id: Image identifier.
+            slot_id: Slot index.
+            state: Pointer to store the slot's state information.
+        Returns: 0 on success, non-zero on error.
+
+    boot_get_image_state
+        Description: Retrieves the detailed state of a slot, such as active, inactive, pending, etc.
+        Parameters:
+            image_id: Image identifier.
+            slot_id: Slot index.
+            state: Pointer to store the state information of the slot.
+        Returns: 0 on success, non-zero on error.
+
+A detailed description of the API interfaces can be found in the `boot/bootutil/include/bootutil/bootutil.h` header file.
+
 ### Encrypted image support
 
 CYW20829/CYW89829 does not have internal flash memory, so both primary and secondary images are located in external memory.
@@ -106,10 +236,15 @@
 
     make clean app APP_NAME=BlinkyApp PLATFORM=CYW20829 BUILDCFG=Debug FLASH_MAP=platforms/memory/CYW20829/flashmap/cyw20829_xip_swap_single.json ENC_IMG=1
 
+NOTE: In the case where a common AES-CTR key is used to encrypt both the MCUBoot and BlinkyApp applications, MCUBoot should be compiled first. This is because the common NONCE file for the AES-CTR algorithm is generated during the MCUBoot compilation. Since BlinkyApp will use the same NONCE file, it should be compiled after MCUBoot. This also applies to cases where MCUBoot is recompiled and a new NONCE file is generated.
 
 #### Encrypted image support using secured encryption key
 
-The CYW20829 MCU supports on-the-fly XIP (eXecute In Place) encryption utilizing a provisioned AES-128 key when the device is in a secure lifecycle state (LCS=SECURE)
+The CYW20829 MCU supports on-the-fly XIP (eXecute In Place) encryption utilizing a provisioned AES-128 key in both `SECURE` and  `NORMAL_NO_SECURE` lifecycles. SMIF encryption can be enabled only once, during the first device provisioning, and cannot be changed in the future.
+Information about key generation for image encryption and device provisioning can be found in the documentation for the `Edge Protect Tools` utility:
+https://github.com/Infineon/edgeprotecttools/blob/master/docs/README_CYW20829.md#encrypt-the-user-application
+
+NOTE: To enable SMIF encryption in the `NORMAL_NO_SECURE` LCS, you will need at least EdgeProtectTools version 1.5.0, and B0 revision of the silicon (or later).
 
 ##### Enabling XIP Encryption
 
@@ -126,13 +261,13 @@
 ```
 
 ##### Preparing and Encrypting Application Images
-Users must prepare non-encrypted signed images for their applications and perform manual encryption using cysecuretools with the "encrypt" command. This command requires specifying the encryption key, nonce, and image address as the initial vector (IV).
+Users must prepare non-encrypted signed images for their applications and perform manual encryption using edgeprotecttools with the "encrypt" command. This command requires specifying the encryption key, nonce, and image address as the initial vector (IV).
 
 ##### Encryption Example
 To encrypt your application binary, use the following command:
 
 ```sh
-cysecuretools -t cyw20829 encrypt --input BlinkyApp.bin --output BlinkyApp_encrypted.bin --iv 0x08020000 --enckey keys/encrypt_key.bin --nonce ./MCUBootApp/out/CYW20829/Debug/MCUBootApp.signed_nonce.bin
+edgeprotecttools -t cyw20829 encrypt --input BlinkyApp.bin --output BlinkyApp_encrypted.bin --iv 0x08020000 --enckey keys/encrypt_key.bin --nonce ./MCUBootApp/out/CYW20829/Debug/MCUBootApp.signed_nonce.bin
 ```
 
 **Parameters:**
@@ -144,6 +279,17 @@
 
 By following these steps, you can ensure that your application binaries are securely encrypted and ready for execution on the CYW20829 MCU with on-the-fly XIP encryption enabled.
 
+##### USE_IMG_TRAILER Parameter Description
+The `USE_IMG_TRAILER` parameter provides developers with the ability to disable the generation of the image trailer and padding between the image body and the trailer, reducing the image size. This feature is useful for encrypted images. Padding bytes in encrypted images are transformed into random data, making the image size non-compressible. Disabling the trailer and padding reduces unnecessary overhead in such cases. By default, this parameter is enabled `USE_IMG_TRAILER=1`.
+
+**Warning:** Disabling the image trailer and padding is supported for Direct-XIP mode only.
+
+To disable the trailer and padding, set `USE_IMG_TRAILER=0` during the build process:
+```sh
+ make app APP_NAME=BlinkyApp PLATFORM=CYW20829 FLASH_MAP=platforms/memory/CYW20829/flashmap/cyw20829_direct_xip_single.json APP_SLOT=1 IMG_VER=1.0.0+100 USE_IMG_TRAILER=0
+```
+NOTE: The application slot must be erased before writing the image when USE_IMG_TRAILER parameter is zero.
+
 ### Rollback protection Support
 
 As mentioned above, to use the rollback protection feature the device must be transferred to the SECURE lifecycle. The CYW20829/CYW89829 platform has a hardware-supported feature - a non-volatile counter (NV-counter). This feature is used by the MCUboot library to implement the rollback protection counter (security counter). NV-counter on CYW20829/CYW89829 is implemented as an Efuse-type region that can only be incremented. This means, that each time a new counter value is updated - a corresponding number of Efuse is burned.
@@ -182,9 +328,9 @@
 `"value": [2, 3]` filed sets corresponding value for image ids. Here `4` would be assigned to image id `1` and `5` to image id `2`.
 
 If the `nv_counter` value is increased in `policy/policy_secure.json` at the provisioning stage, the `nv_counter` value in `policy/policy_reprovisioning_secure.json` must start from the value not less than the value in `policy/policy_secure.json` file.   
-More details about provisioning and reprovisioning processes you can find in [README_CYW20829.md](https://github.com/Infineon/cysecuretools/blob/master/docs/README_CYW20829.md#command-provision-device)  
+More details about provisioning and reprovisioning processes you can find in [README_CYW20829.md](https://github.com/Infineon/edgeprotecttools/blob/master/docs/README_CYW20829.md#command-provision-device)  
 
-When preparing an image for MCUBootApp with the rollback counter support, the `cysecuretools` signs it with `policy/policy_secure.json` in the post-build stage of `make`. The `nv_counter` value remains the same as one in the chip or sets higher. When `cysecuretools` signs an image, it places the `nv-counter` value and the reprovisioning packet in TLVs with tags 0x50 (bit mask representation of the counter) and 0x51 (reprovisioning packet). MCUBootApp then parses these tags and compares the value supplied with the image against the one stored in the Efuse counter.
+When preparing an image for MCUBootApp with the rollback counter support, the `edgeprotecttools` signs it with `policy/policy_secure.json` in the post-build stage of `make`. The `nv_counter` value remains the same as one in the chip or sets higher. When `edgeprotecttools` signs an image, it places the `nv-counter` value and the reprovisioning packet in TLVs with tags 0x50 (bit mask representation of the counter) and 0x51 (reprovisioning packet). MCUBootApp then parses these tags and compares the value supplied with the image against the one stored in the Efuse counter.
 
 If image counter value is set to higher then defined for this image by `bits_per_cnt` filed in policy, for example, image id 1 is provisioned to have 16 bits for its counter, but image programmed has nv counter value of 20 embedded in TLVs - MCUBootApp would discard it as invalid.
 
@@ -208,7 +354,7 @@
 
 To update NV-counter for an appropriate image you have to increase NV-counter in the reprovisioning policy `/policy/policy_reprovisioning_secure.json`, after that re-build the `BlinkyApp` and re-program your device.
 
-The CYW20829/CYW89829 chip is designed so that the first stage bootloader called `BootROM` has most of the rights to modify the system - it is executed in the privileged protection context. Only BootROM can modify the content of Efuse where the NV counter is stored. BootROM supports the special type of service applications used when the user needs to modify the system. These apps are also provided with `cysecuretools` under `targets/cyw20829/packets/apps`. The `reprovisioning` application is used for NV-counter updates.
+The CYW20829/CYW89829 chip is designed so that the first stage bootloader called `BootROM` has most of the rights to modify the system - it is executed in the privileged protection context. Only BootROM can modify the content of Efuse where the NV counter is stored. BootROM supports the special type of service applications used when the user needs to modify the system. These apps are also provided with `edgeprotecttools` under `targets/cyw20829/packets/apps`. The `reprovisioning` application is used for NV-counter updates.
 
 To enable the rollback counter feature, one have to use a JSON flash map with the `"service_app"` section. Sample flash maps are located in `boot/cypress/platforms/memory/CYW20829/flashmap/hw_rollback_prot`.
 
@@ -263,14 +409,14 @@
 for BlinkyApp with TLVs containing rollback counter data:
  - BOOT slot, IMG_ID=1:  
  
-   	make clean_boot app APP_NAME=BlinkyApp PLATFORM=CYW20829 IMG_TYPE=BOOT APP_DEFAULT_POLICY=./policy/policy_reprovisioning_secure.json FLASH_MAP=platforms/memory/CYW20829/flashmap/hw_rollback_prot/cyw20829_xip_swap_multi2.json IMG_ID=1  
+   	make clean_boot app APP_NAME=BlinkyApp PLATFORM=CYW20829 IMG_TYPE=BOOT APP_DEFAULT_POLICY=./policy/policy_reprovisioning_secure.json FLASH_MAP=platforms/memory/CYW20829/flashmap/hw_rollback_prot/cyw20829_xip_swap_multi2.json IMG_ID=1
  - UPGRADE slot, IMG_ID=1:  
  
     	make clean_upgrade app APP_NAME=BlinkyApp PLATFORM=CYW20829 IMG_TYPE=UPGRADE APP_DEFAULT_POLICY=./policy/policy_reprovisioning_secure.json FLASH_MAP=platforms/memory/CYW20829/flashmap/hw_rollback_prot/cyw20829_xip_swap_multi2.json IMG_ID=1
 
  - BOOT slot, IMG_ID=2:  
  
-    	make clean_boot app APP_NAME=BlinkyApp PLATFORM=CYW20829 IMG_TYPE=BOOT APP_DEFAULT_POLICY=./policy/policy_reprovisioning_secure.json FLASH_MAP=platforms/memory/CYW20829/flashmap/hw_rollback_prot/cyw20829_xip_swap_multi2.json IMG_ID=2  
+    	make clean_boot app APP_NAME=BlinkyApp PLATFORM=CYW20829 IMG_TYPE=BOOT APP_DEFAULT_POLICY=./policy/policy_reprovisioning_secure.json FLASH_MAP=platforms/memory/CYW20829/flashmap/hw_rollback_prot/cyw20829_xip_swap_multi2.json IMG_ID=2
     
  - UPGRADE slot, IMG_ID=2:  
     
@@ -279,15 +425,15 @@
 **Attention!** Don't omit `clean_boot` and `clean_upgrade` to avoid any issues!   
 
 ### Programming applications
-The HEXes for device programming you can find:  
+The HEXes for device programming you can find:
 
-for MCUBootApp: `MCUBootApp.hex` in the directory 'MCUBootApp/out/CYW20829/*{BUILDCFG}*/   
+for MCUBootApp: `MCUBootApp.hex` in the directory 'MCUBootApp/out/CYW20829/*{BUILDCFG}*/'
 
 for BlinkyApp: 
  - for IMG_ID=1, BOOT slot select `BlinkyApp.hex` inside of 'BlinkyApp/**out**/CYW20829/*{BUILDCFG}*/**boot**/' 
- - for IMG_ID=1, UPGRADE slot select `BlinkyApp_upgrade.hex` inside of 'BlinkyApp/**out**/CYW20829/*{BUILDCFG}*/**upgrade**/
+ - for IMG_ID=1, UPGRADE slot select `BlinkyApp_upgrade.hex` inside of 'BlinkyApp/**out**/CYW20829/*{BUILDCFG}*/**upgrade**/'
  - for IMG_ID=2, BOOT slot select `BlinkyApp.hex` inside of 'BlinkyApp/**out.id2**/CYW20829/*{BUILDCFG}*/**boot**/' 
- - for IMG_ID=1, UPGRADE slot select `BlinkyApp_upgrade.hex` inside of 'BlinkyApp/**out.id2**/CYW20829/*{BUILDCFG}*/**upgrade**/
+ - for IMG_ID=1, UPGRADE slot select `BlinkyApp_upgrade.hex` inside of 'BlinkyApp/**out.id2**/CYW20829/*{BUILDCFG}*/**upgrade**/'
 
 Default **{BUILDCFG}** is 'Debug', so all previous commands for the 'multi-image' case will build a 'Debug' configuration.
 
@@ -297,13 +443,13 @@
 
 Connect the board to your computer. Switch Kitprog3 to DAP-BULK mode by clicking the `SW3 MODE` button until `LED2 STATUS` constantly shines.
 
-Open the terminal application and execute the following command after substitution of the `PATH_TO_APPLICATION` and `OPENOCD` variables:
+Open the terminal application and execute the following commands:
 
-    export OPENOCD=/Applications/ModusToolbox/tools_3.2/openocd
+    export OPENOCD_PATH=C:/Infineon/Tools/ModusToolboxProgtools-1.4/openocd
 
-    $OPENOCD_PATH/bin/openocd -s $OPENOCD_PATH/scripts -c "set ENABLE_ACQUIRE 0" -f $OPENOCD_PATH/scripts/interface/kitprog3.cfg -c "set SMIF_BANKS { 0 {addr 0x60000000 size 0x4000000 psize 0x1000 esize 0x40000} }" -f $OPENOCD_PATH/scripts/target/cyw20829.cfg -c "init; reset init; cmsis_flash init; flash write_image %PATH_TO_APPLICATION%/BlinkyApp.hex; shutdown"
+    $OPENOCD_PATH/bin/openocd -s $OPENOCD_PATH/scripts -f $OPENOCD_PATH/scripts/interface/kitprog3.cfg -c "set SMIF_BANKS { 0 {addr 0x60000000 size 0x100000 psize 0x1000 esize 0x40000} }; set DEBUG_CERTIFICATE ./packets/debug_cert.bin" -f $OPENOCD_PATH/scripts/target/infineon/cyw20829.cfg -c "init; reset init; cmsis_flash init; program ./BlinkyApp/out/CYW20829/Release/upgrade/BlinkyApp.hex; shutdown"
 
 **Warning**
 
-The application slot is erased by `flash erase_address` before executing the `flash write_image` command.
+The application slot is automatically erased by `flash erase_address` before executing the `program` command.
  
diff --git a/boot/cypress/platforms/CYW20829.mk b/boot/cypress/platforms/CYW20829.mk
index 02ce47e..ac10910 100644
--- a/boot/cypress/platforms/CYW20829.mk
+++ b/boot/cypress/platforms/CYW20829.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -42,11 +42,6 @@
 DEVICE ?= CYW89829B0232
 endif
 
-# If PSVP build is required
-ifeq ($(CYW20829_PSVP), 1)
-SERVICE_APP_PLATFORM_SUFFIX := _psvp
-endif
-
 #Led pin default config
 LED_PORT_DEFAULT ?= GPIO_PRT0
 LED_PIN_DEFAULT ?= 0U
@@ -60,7 +55,12 @@
 # Add device name to defines
 DEFINES += -D$(DEVICE)
 
-USE_SWAP_STATUS ?= 1
+USE_SWAP_STATUS ?= 0
+
+ifeq ($(USE_DIRECT_XIP), 1)
+DEFINES += -DMCUBOOT_DIRECT_XIP=1
+DEFINES += -DMCUBOOT_DIRECT_XIP_REVERT=1
+endif
 
 ifeq ($(USE_SWAP_STATUS), 1)
 DEFINES += -DUSE_SWAP_STATUS=1
@@ -90,6 +90,8 @@
 
 ifeq ($(APP_NAME), MCUBootApp)
 
+DEFINES += -DBSP_DISABLE_WDT
+
 SMIF_ENC ?= 0
 
 ifeq ($(CYW20829_PSVP), )
@@ -145,6 +147,10 @@
 
 SIGN_ENC := 0
 
+ifeq ($(SMIF_ENC), 1)
+    SIGN_ENC := 1
+endif
+
 ###############################################################################
 # MCUBootApp service app definitions
 ###############################################################################
@@ -154,10 +160,6 @@
 SERVICE_APP_PATH := $(PRJ_DIR)/packets/apps/reprovisioning$(SERVICE_APP_PLATFORM_SUFFIX)
 SERVICE_APP_NAME := cyapp_reprovisioning_signed_icv0
 
-ifeq ($(SMIF_ENC), 1)
-    SIGN_ENC := 1
-endif
-
 ifeq ($(ENC_IMG), 1)
     SIGN_ENC := 1
 endif
@@ -196,11 +198,18 @@
 ###############################################################################
 ifeq ($(APP_NAME), BlinkyApp)
 
+APP_SLOT ?= 1
+
+ifeq ($(shell [ $(APP_SLOT) -gt 2 ] && echo true), true)
+    $(error APP_SLOT must be 1 or 2)
+endif
+
 # Basic settings
 LCS ?= NORMAL_NO_SECURE
 APPTYPE ?= flash
 SIGN_TYPE ?= mcuboot_user_app
 SMIF_CRYPTO_CONFIG ?= NONE
+USE_IMG_TRAILER ?= 1
 
 ifeq ($(LCS), NORMAL_NO_SECURE)
 APP_DEFAULT_POLICY ?= $(PRJ_DIR)/policy/policy_no_secure.json
@@ -211,12 +220,26 @@
 PLATFORM_DEFAULT_ERASED_VALUE := 0xff
 
 # Define start of application
-PLATFORM_USER_APP_START ?= $(shell echo $$(($(PRIMARY_IMG_START)-$(FLASH_START)+$(FLASH_XIP_START))))
+PLATFORM_USER_APP_START ?= $(shell printf "0x%X" $$(($(PRIMARY_IMG_START)-$(FLASH_START)+$(FLASH_XIP_START))))
+PLATFORM_USER_APP_LOCATION ?= $(shell printf "0x%X" $$(($(PRIMARY_IMG_START)-$(FLASH_START)+$(FLASH_XIP_START))))
+
+ifeq ($(IMG_TYPE), UPGRADE)
+    PLATFORM_USER_APP_LOCATION := $(shell printf "0x%X" $$(($(SECONDARY_IMG_START)-$(FLASH_START)+$(FLASH_XIP_START))))
+endif
+
+ifeq ($(APP_SLOT), 2)
+    PLATFORM_USER_APP_LOCATION := $(shell printf "0x%X" $$(($(SECONDARY_IMG_START)-$(FLASH_START)+$(FLASH_XIP_START))))
+endif
+
 # Define RAM start and size, slot size
 PLATFORM_DEFAULT_RAM_START ?= 0x2000C000
 PLATFORM_DEFAULT_RAM_SIZE  ?= 0x10000
 
-DEFINES += -DUSER_APP_START_OFF=0x20000
+ifeq ($(APP_SLOT), 1)
+DEFINES += -DUSER_APP_START_OFF=$(shell echo $$(($(PRIMARY_IMG_START)-$(FLASH_START))))
+else
+DEFINES += -DUSER_APP_START_OFF=$(shell echo $$(($(SECONDARY_IMG_START)-$(FLASH_START))))
+endif
 
 PLATFORM_DEFAULT_IMG_VER_ARG ?= 1.0.0
 
@@ -229,6 +252,10 @@
 	PLATFORM_SIGN_ARGS += --app-addr=$(PLATFORM_USER_APP_START)
 endif
 
+ifeq ($(USE_IMG_TRAILER), 1)
+	PLATFORM_SIGN_ARGS += --pad
+endif
+
 pre_build:
 	$(info [PRE_BUILD] - Generating linker script for application $(CUR_APP_PATH)/linker/$(APP_NAME).ld)
 	@$(CC) -E -x c $(CFLAGS) $(INCLUDE_DIRS) $(CUR_APP_PATH)/linker/$(APP_NAME)_$(CORE)_template$(LD_SUFFIX).ld | grep -v '^#' >$(CUR_APP_PATH)/linker/$(APP_NAME).ld
@@ -240,8 +267,14 @@
 	$(shell $(PRJ_DIR)/run_toc2_generator.sh $(LCS) $(OUT_CFG) $(APP_NAME) $(APPTYPE) $(PRJ_DIR) $(SMIF_CRYPTO_CONFIG) $(TOOLCHAIN_PATH))
 
 	$(info SIGN_ARGS <-> $(SIGN_ARGS))
+	$(info cysecuretools -q -t cyw20829 -p $(APP_DEFAULT_POLICY) sign-image $(SIGN_ARGS))
 	$(shell cysecuretools -q -t cyw20829 -p $(APP_DEFAULT_POLICY) sign-image $(SIGN_ARGS))
 
+ifeq ($(SMIF_ENC), 1)
+	$(info edgeprotecttools -t cyw20829 encrypt --input $(OUT_CFG)/$(APP_NAME)$(UPGRADE_SUFFIX).bin --output $(OUT_CFG)/$(APP_NAME)$(UPGRADE_SUFFIX).bin --iv $(PLATFORM_USER_APP_LOCATION) --enckey keys/encrypt_key.bin --nonce ./MCUBootApp/out/CYW20829/$(BUILDCFG)/MCUBootApp.signed_nonce.bin)
+	$(shell edgeprotecttools -t cyw20829 encrypt --input $(OUT_CFG)/$(APP_NAME)$(UPGRADE_SUFFIX).bin --output $(OUT_CFG)/$(APP_NAME)$(UPGRADE_SUFFIX).bin --iv $(PLATFORM_USER_APP_LOCATION) --enckey keys/encrypt_key.bin --nonce ./MCUBootApp/out/CYW20829/$(BUILDCFG)/MCUBootApp.signed_nonce.bin)
+endif
+
 	$(GCC_PATH)/bin/arm-none-eabi-objcopy --change-address=$(HEADER_OFFSET) -I binary -O ihex $(OUT_CFG)/$(APP_NAME)$(UPGRADE_SUFFIX).bin $(OUT_CFG)/$(APP_NAME)$(UPGRADE_SUFFIX).hex
 	$(GCC_PATH)/bin/arm-none-eabi-objdump -s $(OUT_CFG)/$(APP_NAME)$(UPGRADE_SUFFIX).hex > $(OUT_CFG)/$(APP_NAME)$(UPGRADE_SUFFIX).objdump
 else
diff --git a/boot/cypress/platforms/PSC3.md b/boot/cypress/platforms/PSC3.md
index a1eb402..8c72b0d 100644
--- a/boot/cypress/platforms/PSC3.md
+++ b/boot/cypress/platforms/PSC3.md
@@ -1,3 +1,3 @@
 ## PSOC™ C3 platform description
 
-PSOC™ C3 support added for ModusToolbox Code Example - [mtb-example-psoc-control-edge-protect-bootloader](https://github.com/Infineon/mtb-example-psoc-control-edge-protect-bootloader). Please use ModusToolbox 3.3 or higher to create and run the project.
+PSOC™ C3 support added for ModusToolbox™ Code Example - [mtb-example-psoc-control-edge-protect-bootloader](https://github.com/Infineon/mtb-example-psoc-control-edge-protect-bootloader). Please use ModusToolbox™ 3.5 or higher to create and run the project.
diff --git a/boot/cypress/platforms/PSOC6.md b/boot/cypress/platforms/PSOC6.md
index 88d3f24..6c9b7f7 100644
--- a/boot/cypress/platforms/PSOC6.md
+++ b/boot/cypress/platforms/PSOC6.md
@@ -71,7 +71,7 @@
 
 To enable the image encryption support, use the `ENC_IMG=1` build flag (BlinkyApp should also be built with this flash set 1).
 
-The user is also responsible for providing corresponding binary key data in `enc_priv_key[]` (file `\MCUBootApp\keys.c`). The public part will be used by `imgtool` when signing and encrypting upgrade image. Signing image with encryption is described in [BlinkyApp.md](../../BlinkyApp/BlinkyApp.md).
+The user is also responsible for providing corresponding binary key data in `enc_priv_key[]` (file `\MCUBootApp\keys.c`). The public part will be used by `imgtool` when signing and encrypting upgrade image. Signing image with encryption is described in [BlinkyApp.md](../BlinkyApp/BlinkyApp.md).
 
 After MCUBootApp is built with these settings, unencrypted and encrypted images will be accepted in the secondary (upgrade) slot.
 
@@ -89,12 +89,14 @@
 
 Connect the board to your computer. Switch Kitprog3 to DAP-BULK mode by clicking the `SW3 MODE` button until `LED2 STATUS` constantly shines.
 
-Open the terminal application and execute the following command after substitution of the `PATH_TO_APPLICATION.hex` and `OPENOCD` paths:
+The OpenOCD package is supplied with `ModusToolbox™ Programming Tools` and can be found in the `C:\Infineon\Tools\ModusToolboxProgtools-1.4\openocd` folder.
 
-        export OPENOCD=/Applications/ModusToolbox/tools_3.2/openocd
+Open the terminal application and execute the following commands:
 
-        ${OPENOCD}/bin/openocd -s ${OPENOCD}/scripts \
-                            -f ${OPENOCD}/scripts/interface/kitprog3.cfg \
-                            -f ${OPENOCD}/scripts/target/psoc6_2m.cfg \
+        export OPENOCD_PATH=C:/Infineon/Tools/ModusToolboxProgtools-1.4/openocd
+
+        ${OPENOCD_PATH}/bin/openocd -s ${OPENOCD_PATH}/scripts \
+                            -f ${OPENOCD_PATH}/scripts/interface/kitprog3.cfg \
+                            -f ${OPENOCD_PATH}/scripts/target/psoc6_2m.cfg \
                             -c "init; reset init; program PATH_TO_APPLICATION.hex" \
                             -c "resume; reset; exit"
diff --git a/boot/cypress/platforms/PSOC6.mk b/boot/cypress/platforms/PSOC6.mk
index 6747b4e..0ae2b29 100644
--- a/boot/cypress/platforms/PSOC6.mk
+++ b/boot/cypress/platforms/PSOC6.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -106,14 +106,6 @@
 DEFINES += -DCYBSP_DEBUG_UART_TX=$(UART_TX_DEFAULT)
 DEFINES += -DCYBSP_DEBUG_UART_RX=$(UART_RX_DEFAULT)
 
-# Add device name to defines
-DEFINES += -D$(DEVICE)
-DEFINES += -DCY_USING_HAL
-DEFINES += -DCORE_NAME_$(CORE)_0=1
-DEFINES += -DCOMPONENT_CAT1 
-DEFINES += -DCOMPONENT_CAT1A
-DEFINES += -DCOMPONENT_$(CORE)
-
 # Minimum erase size of underlying memory hardware
 PLATFORM_MEMORY_ALIGN := 0x200
 PLATFORM_MAX_TRAILER_PAGE_SIZE := 0x200
@@ -133,6 +125,8 @@
 
 ifeq ($(APP_NAME), MCUBootApp)
 
+CFLAGS_OPTIMIZATION := -Os -g3
+
 CORE ?= CM0P
 ifeq ($(CORE), CM0P)
 CORE_SUFFIX = m0plus
@@ -276,3 +270,11 @@
 PLATFORM_STARTUP_FILE := $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system/COMPONENT_$(CORE)/TOOLCHAIN_$(COMPILER)/startup_psoc6_$(PLATFORM_SUFFIX)_c$(CORE_SUFFIX).S
 
 INCLUDE_DIRS += $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system
+
+# Add device name to defines
+DEFINES += -D$(DEVICE)
+DEFINES += -DCY_USING_HAL
+DEFINES += -DCORE_NAME_$(CORE)_0=1
+DEFINES += -DCOMPONENT_CAT1 
+DEFINES += -DCOMPONENT_CAT1A
+DEFINES += -DCOMPONENT_$(CORE)
diff --git a/boot/cypress/platforms/XMC7000.md b/boot/cypress/platforms/XMC7000.md
index 5566859..b91b846 100644
--- a/boot/cypress/platforms/XMC7000.md
+++ b/boot/cypress/platforms/XMC7000.md
@@ -31,10 +31,10 @@
 To prepare a secure MCUBoot image, the user must configure the public key and specify the appropriate parameters for the TOC2 structure in the `cy_si_config.c`, `cy_si_key.c` files and execute the make command with the additional variables `USE_SECURE_MODE=1`, `SECURE_MODE_KEY_NAME=<name>`.
 
 - Step to generate custom RSA2048 keys:
-    cysecuretools -t xmc7200 create-key --key-type RSA2048 -o ./keys/cypress-test-rsa2k.pem ./keys/cypress-test-rsa2k.pub --format PEM
+    edgeprotecttools -t xmc7200 create-key --key-type RSA2048 -o ./keys/cypress-test-rsa2k.pem ./keys/cypress-test-rsa2k.pub --format PEM
 
 - Step to generate `cy_si_key.c` file:
-    cysecuretools convert-key -k ./keys/cypress-test-rsa2k.pub -o ./platforms/utils/XMC7000/cy_si_key.c --fmt secure_boot --endian little
+    edgeprotecttools convert-key -k ./keys/cypress-test-rsa2k.pub -o ./platforms/utils/XMC7000/cy_si_key.c --fmt secure_boot --endian little
 
 Previous two steps can be executed with single Makefile command.
     make gen_secure_cfgs PLATFORM=XMC7200 SECURE_MODE_KEY_TYPE=RSA2048 KEY_NAME=cypress-test-rsa2k
@@ -61,7 +61,7 @@
     flash erase_address     0x17006400              0x00000C00
     flash fillb             0x14030000     0xFF     0x00002800 
 
-    program `./MCUBootApp/out/XMC7200/Debug/MCUBootApp.hex`
+    program './MCUBootApp/out/XMC7200/Debug/MCUBootApp.hex'
 
     resume;
     reset;
diff --git a/boot/cypress/platforms/XMC7000.mk b/boot/cypress/platforms/XMC7000.mk
index 509a41d..510841d 100644
--- a/boot/cypress/platforms/XMC7000.mk
+++ b/boot/cypress/platforms/XMC7000.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/boot_rng/boot_rng.c b/boot/cypress/platforms/boot_rng/boot_rng.c
index 9a658cd..44301d7 100644
--- a/boot/cypress/platforms/boot_rng/boot_rng.c
+++ b/boot/cypress/platforms/boot_rng/boot_rng.c
@@ -2,7 +2,7 @@
  * File Name: boot_rng.c
  *
  *******************************************************************************
-* Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025, Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.  All rights reserved.
 *
 * This software, including source code, documentation and related
diff --git a/boot/cypress/platforms/boot_rng/boot_rng.h b/boot/cypress/platforms/boot_rng/boot_rng.h
index 68c5646..033e1cd 100644
--- a/boot/cypress/platforms/boot_rng/boot_rng.h
+++ b/boot/cypress/platforms/boot_rng/boot_rng.h
@@ -2,7 +2,7 @@
  * File Name: boot_rng.h
  *
  ******************************************************************************
-* Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025, Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.  All rights reserved.
 *
 * This software, including source code, documentation and related
diff --git a/boot/cypress/platforms/crypto/CYW20829/mbedtls/compat-2.x.h b/boot/cypress/platforms/crypto/CYW20829/mbedtls/compat-2.x.h
index 2ed6c81..fffa145 100644
--- a/boot/cypress/platforms/crypto/CYW20829/mbedtls/compat-2.x.h
+++ b/boot/cypress/platforms/crypto/CYW20829/mbedtls/compat-2.x.h
@@ -1,5 +1,5 @@
 /********************************************************************************
-* Copyright 2022 Infineon Technologies AG
+* Copyright 2025 Infineon Technologies AG
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/crypto/PSC3/cyboot_crypto_list.h b/boot/cypress/platforms/crypto/PSC3/cyboot_crypto_list.h
index f86cb2a..beb27bb 100644
--- a/boot/cypress/platforms/crypto/PSC3/cyboot_crypto_list.h
+++ b/boot/cypress/platforms/crypto/PSC3/cyboot_crypto_list.h
@@ -4,7 +4,7 @@
 * Provides header file for crypto API.
 ********************************************************************************
 * \copyright
-* (c) 2023, Cypress Semiconductor Corporation (an Infineon company) or an
+* (c) 2025, Cypress Semiconductor Corporation (an Infineon company) or an
 * affiliate of Cypress Semiconductor Corporation.  All rights reserved.
 * This software, associated documentation and materials ("Software") is owned
 * by Cypress Semiconductor Corporation or one of its affiliates ("Cypress") and
diff --git a/boot/cypress/platforms/crypto/PSC3/image_ec256_port.c b/boot/cypress/platforms/crypto/PSC3/image_ec256_port.c
index 0232b8d..45f2462 100644
--- a/boot/cypress/platforms/crypto/PSC3/image_ec256_port.c
+++ b/boot/cypress/platforms/crypto/PSC3/image_ec256_port.c
@@ -69,13 +69,13 @@
     }
 #if !defined(MCUBOOT_USE_PSA_CRYPTO)
     /* id-ecPublicKey (RFC5480) */
-    if (alg.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_pubkey_oid) - 1 ||
-        memcmp(alg.MBEDTLS_CONTEXT_MEMBER(p), ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
+    if (alg.len != sizeof(ec_pubkey_oid) - 1 ||
+        memcmp(alg.p, ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
         return -3;
     }
     /* namedCurve (RFC5480) */
-    if (param.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_secp256r1_oid) - 1 ||
-        memcmp(param.MBEDTLS_CONTEXT_MEMBER(p), ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
+    if (param.len != sizeof(ec_secp256r1_oid) - 1 ||
+        memcmp(param.p, ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
         return -4;
     }
 #endif
diff --git a/boot/cypress/platforms/crypto/PSC3/sha256_port.h b/boot/cypress/platforms/crypto/PSC3/sha256_port.h
index f74fd8b..f26105b 100644
--- a/boot/cypress/platforms/crypto/PSC3/sha256_port.h
+++ b/boot/cypress/platforms/crypto/PSC3/sha256_port.h
@@ -4,7 +4,7 @@
  * Provides port layer for SHA256 MCUBoot functions
  ********************************************************************************
  * \copyright
- * (c) 2023, Cypress Semiconductor Corporation (an Infineon company) or an
+ * (c) 2025, Cypress Semiconductor Corporation (an Infineon company) or an
  * affiliate of Cypress Semiconductor Corporation.  All rights reserved.
  * This software, associated documentation and materials ("Software") is owned
  * by Cypress Semiconductor Corporation or one of its affiliates ("Cypress") and
diff --git a/boot/cypress/platforms/img_confirm/CYW20829/set_img_ok.c b/boot/cypress/platforms/img_confirm/CYW20829/set_img_ok.c
index f3a8f1b..a6f9f1f 100644
--- a/boot/cypress/platforms/img_confirm/CYW20829/set_img_ok.c
+++ b/boot/cypress/platforms/img_confirm/CYW20829/set_img_ok.c
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright 2018-2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2018-2025 Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
@@ -17,11 +17,13 @@
  * limitations under the License.
  ********************************************************************************/
 
-#if !(SWAP_DISABLED) && defined(UPGRADE_IMAGE)
+#if !(SWAP_DISABLED) && defined(UPGRADE_IMAGE) || defined(MCUBOOT_DIRECT_XIP)
 
 #include "set_img_ok.h"
 #include <flash_map_backend/flash_map_backend.h>
 
+#include <string.h>
+
 #define EXT_MEM_INTERFACE_ID 0
 
 extern const struct flash_area_interface external_mem_interface;
@@ -59,11 +61,15 @@
     int rc = 0;
     /* Accepting an arbitrary address */
     uint32_t row_mask = external_mem_interface.get_erase_size(0) - 1U;
+    uint32_t erase_val = external_mem_interface.get_erase_val(0);
+    uint32_t index = address & row_mask;
 
     rc |= external_mem_interface.read(EXT_MEM_INTERFACE_ID, address & ~row_mask, row_buff, FLASH_ROW_BUF_SZ);
 
     /* Modifying the target byte */
-    row_buff[address & row_mask] = src;
+    memset(&row_buff[index], erase_val, sizeof(uint64_t));
+    row_buff[index] = src;
+    
 
     rc |= external_mem_interface.erase(EXT_MEM_INTERFACE_ID, address & ~row_mask, FLASH_ROW_BUF_SZ);
 
diff --git a/boot/cypress/platforms/img_confirm/PSC3/set_img_ok.c b/boot/cypress/platforms/img_confirm/PSC3/set_img_ok.c
index cb580a9..4a0de1c 100644
--- a/boot/cypress/platforms/img_confirm/PSC3/set_img_ok.c
+++ b/boot/cypress/platforms/img_confirm/PSC3/set_img_ok.c
@@ -1,5 +1,5 @@
 /********************************************************************************
-* Copyright 2021 Infineon Technologies AG
+* Copyright 2025 Infineon Technologies AG
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/img_confirm/PSOC6/set_img_ok.c b/boot/cypress/platforms/img_confirm/PSOC6/set_img_ok.c
index c8901c0..25e95b6 100644
--- a/boot/cypress/platforms/img_confirm/PSOC6/set_img_ok.c
+++ b/boot/cypress/platforms/img_confirm/PSOC6/set_img_ok.c
@@ -1,25 +1,26 @@
 /********************************************************************************
-* Copyright 2021 Infineon Technologies AG
-* SPDX-License-Identifier: Apache-2.0
-*
-* 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.
-********************************************************************************/
+ * Copyright 2025 Infineon Technologies AG
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ ********************************************************************************/
 
 #if !(SWAP_DISABLED) && defined(UPGRADE_IMAGE)
 
-#include "string.h"
 #include "set_img_ok.h"
+
 #include "cy_flash.h"
+#include "string.h"
 
 #if defined(CY_BOOT_USE_EXTERNAL_FLASH)
 #include "flash_qspi.h"
@@ -27,11 +28,9 @@
 
 static uint8_t row_buff[FLASH_ROW_BUF_SZ];
 
-#ifndef USE_XIP
-
 /**
  * @brief Function reads value of img_ok flag from address.
- * 
+ *
  * @param address - address of img_ok flag in primary img trailer
  * @return int - value at address
  */
@@ -40,14 +39,16 @@
     return *(volatile uint8_t *)address;
 }
 
+#ifndef USE_XIP
 /**
  * @brief Function sets img_ok flag value to primary image trailer.
- * 
+ *
  * @param address - address of img_ok flag in primary img trailer
  * @param value - value corresponding to img_ok set
- * 
+ *
  * @return - operation status. 0 - set succesfully, -1 - failed to set.
  */
+CY_RAMFUNC_BEGIN
 static int write_img_ok_value(uint32_t address, uint8_t value)
 {
     int rc = -1;
@@ -74,19 +75,20 @@
 
     return rc;
 }
+CY_RAMFUNC_END
 
 #else
 
 /**
  * @brief Function sets img_ok value to primary slot trailer
- *        when application is executed from external memory 
+ *        when application is executed from external memory
  *        in XIP mode. This function is executed from RAM since
  *        it reconfigures SMIF block from XIP to MMIO mode, then
  *        writes img_ok set value and switches back to XIP mode.
  *
  * @param address - address of img_ok flag in primary img trailer
  * @param value - value corresponding to img_ok set
- * 
+ *
  * @return - operation status. 1 - already set, 0 - set succesfully,
  *                              -1 - failed to set.
  */
@@ -94,98 +96,35 @@
 static int set_img_ok_ram(uint32_t address, uint8_t value)
 {
     int32_t rc = IMG_OK_SET_FAILED;
-    uint32_t try_count = 10U;
 
-    cy_en_smif_status_t stat = CY_SMIF_BUSY;
     SMIF_Type *QSPIPort = SMIF0;
-    cy_stc_smif_context_t QSPI_context;
-    cy_en_smif_mode_t mode = CY_SMIF_NORMAL;
+    cy_stc_smif_context_t QSPI_context = {0};
+    cy_stc_smif_mem_config_t *cfg = smifBlockConfig_sfdp.memConfig[0];
+
+    const uint32_t trailer_row_abs_addr = address & ~(MEMORY_ALIGN - 1);
+    const uint32_t trailer_row_addr = (address - CY_XIP_BASE) & ~(MEMORY_ALIGN - 1);
+
+    memcpy(row_buff, (void *)trailer_row_abs_addr, MEMORY_ALIGN);
 
     Cy_SMIF_SetMode(SMIF0, CY_SMIF_NORMAL);
-    mode = Cy_SMIF_GetMode(QSPIPort);
 
-    if (mode != CY_SMIF_NORMAL) {
-        CY_HALT();
-    }
+    Cy_SMIF_MemDeInit(QSPIPort);
 
-    for (try_count = 0U; try_count < 10U; try_count++) {
+    cy_en_smif_status_t status = Cy_SMIF_MemInit(QSPIPort, &smifBlockConfig_sfdp, &QSPI_context);
 
-        stat = Cy_SMIF_MemInit(QSPIPort, &smifBlockConfig_sfdp, &QSPI_context);
+    if (status == CY_SMIF_SUCCESS) {
+        row_buff[address & (MEMORY_ALIGN - 1)] = value;
 
-        if (CY_SMIF_SUCCESS == stat) {
-            break;
-        }
-
-        Cy_SysLib_Delay(500U);
-    }
-
-    if (stat == CY_SMIF_SUCCESS) {
-
-        cy_stc_smif_mem_config_t *cfg = smifBlockConfig_sfdp.memConfig[0];
-        /* Determine row start address, where image trailer is allocated */
-        uint32_t erase_len = cfg->deviceCfg->eraseSize;
-        uint32_t row_mask = erase_len /* is a power of two */ - 1u;
-        uint32_t row_addr = (address - CY_XIP_BASE) & ~row_mask;
-        /* Determine start address of image trailer
-         * The minimum erase size area is allocated
-         * for trailer, but reading the whole area is
-         * not nessesary since data is only located at
-         * first 0x200 bytes. Trailer size is taken as 0x200
-         * to keep consistency with internal memory
-         * implementation, where min_erase_size is 0x200
-         */
-        uint32_t img_trailer_addr = address - CY_XIP_BASE + USER_SWAP_IMAGE_OK_OFFS - IMG_TRAILER_SZ;
-        uint32_t img_ok_mask = FLASH_ROW_BUF_SZ /* is a power of 2 */ - 1u; 
-
-        cy_en_smif_status_t st = Cy_SMIF_MemRead(QSPIPort, cfg,
-                                                img_trailer_addr, row_buff, FLASH_ROW_BUF_SZ,
-                                                &QSPI_context);
-
-        if (CY_SMIF_SUCCESS == st) {
-            
-            if (row_buff[address & img_ok_mask] != value) {
-                
-                row_buff[address & img_ok_mask] = value;
-
-                /* Programming the updated block back */
-                st = Cy_SMIF_MemEraseSector(QSPIPort, cfg,
-                                            row_addr, erase_len,
-                                            &QSPI_context);
-
-                if (CY_SMIF_SUCCESS == st) {
-                    st = Cy_SMIF_MemWrite(QSPIPort, cfg,
-                                            img_trailer_addr, row_buff, FLASH_ROW_BUF_SZ,
-                                            &QSPI_context);
-                    if (CY_SMIF_SUCCESS == st) {
-                        rc = IMG_OK_SET_SUCCESS;
-                    }
-                }
-                else {
-                    rc = IMG_OK_SET_FAILED;
-                }
-            }
-            else {
-                rc = IMG_OK_ALREADY_SET;
-            }
-        }
-        else {
-            rc = IMG_OK_SET_FAILED;
-        }
-
-        stat = Cy_SMIF_CacheEnable(QSPIPort, CY_SMIF_CACHE_FAST);
-
-        if (CY_SMIF_SUCCESS == stat) {
-            Cy_SMIF_SetMode(QSPIPort, CY_SMIF_MEMORY);
-            mode = Cy_SMIF_GetMode(QSPIPort);
-
-            if (mode != CY_SMIF_MEMORY) {
-                CY_HALT();
+        if (CY_SMIF_SUCCESS == Cy_SMIF_MemEraseSector(QSPIPort, cfg,
+                                                      trailer_row_addr, MEMORY_ALIGN, &QSPI_context)) {
+            if (CY_SMIF_SUCCESS == Cy_SMIF_MemWrite(QSPIPort, cfg, trailer_row_addr,
+                                                    row_buff, MEMORY_ALIGN, &QSPI_context)) {
+                rc = IMG_OK_SET_SUCCESS;
             }
         }
     }
-    else {
-        /* do nothing */
-    }
+
+    Cy_SMIF_SetMode(SMIF0, CY_SMIF_MEMORY);
 
     return rc;
 }
@@ -195,14 +134,14 @@
 
 /**
  * @brief Public function to confirm that upgraded application is operable
- * after swap. Should be called from main code of user application. 
+ * after swap. Should be called from main code of user application.
  * It sets mcuboot flag img_ok in primary (boot) image trailer.
  * MCUBootApp checks img_ok flag at first reset after upgrade and
  * validates successful swap.
- * 
+ *
  * @param address - address of img_ok flag in primary img trailer
  * @param value - value corresponding to img_ok set
- * 
+ *
  * @return - operation status. 1 - already set, 0 - set succesfully,
  *                              -1 - failed to set.
  */
@@ -213,26 +152,15 @@
     /* Write Image OK flag to the slot trailer, so MCUBoot-loader
      * will not revert new image
      */
-#ifdef USE_XIP
-    /*
-     * When switching from XIP execution mode to RAM function
-     * it is required to clear and disable SMIF cache. set_img_ok_ram
-     * is then turns cache on before return. If it is not done - return
-     * to execution from RAM to XIP hangs indefinitely.
-     */
-    Cy_SMIF_CacheDisable(SMIF0, CY_SMIF_CACHE_FAST);
-    Cy_SMIF_CacheInvalidate(SMIF0, CY_SMIF_CACHE_FAST);
-    rc = set_img_ok_ram(address, value);
-
-#else
-
     if (read_img_ok_value(address) != value) {
+#ifdef USE_XIP
+        rc = set_img_ok_ram(address, value);
+#else
         rc = write_img_ok_value(address, value);
-    }
-    else {
+#endif /* USE_XIP */
+    } else {
         rc = IMG_OK_ALREADY_SET;
     }
-#endif /* USE_XIP */
 
     return rc;
 }
diff --git a/boot/cypress/platforms/img_confirm/XMC7000/set_img_ok.c b/boot/cypress/platforms/img_confirm/XMC7000/set_img_ok.c
index b95cf32..edb9132 100644
--- a/boot/cypress/platforms/img_confirm/XMC7000/set_img_ok.c
+++ b/boot/cypress/platforms/img_confirm/XMC7000/set_img_ok.c
@@ -1,5 +1,5 @@
 /********************************************************************************
-* Copyright 2021 Infineon Technologies AG
+* Copyright 2025 Infineon Technologies AG
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/img_confirm/set_img_ok.h b/boot/cypress/platforms/img_confirm/set_img_ok.h
index 08ecb04..c5beed8 100644
--- a/boot/cypress/platforms/img_confirm/set_img_ok.h
+++ b/boot/cypress/platforms/img_confirm/set_img_ok.h
@@ -1,5 +1,5 @@
 /********************************************************************************
-* Copyright 2021 Infineon Technologies AG
+* Copyright 2025 Infineon Technologies AG
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,7 +25,16 @@
 
 #define USER_SWAP_IMAGE_OK_OFFS (24)
 #define USER_SWAP_IMAGE_OK      (1)
-#define IMG_OK_ADDR             (PRIMARY_IMG_START + USER_APP_SIZE - USER_SWAP_IMAGE_OK_OFFS)
+
+#if defined(MCUBOOT_DIRECT_XIP)
+  #if APP_SLOT == 1
+    #define IMG_OK_ADDR             (PRIMARY_IMG_START + USER_APP_SIZE - USER_SWAP_IMAGE_OK_OFFS)
+  #else
+    #define IMG_OK_ADDR             (SECONDARY_IMG_START + USER_APP_SIZE - USER_SWAP_IMAGE_OK_OFFS)
+  #endif
+#else
+    #define IMG_OK_ADDR             (PRIMARY_IMG_START + USER_APP_SIZE - USER_SWAP_IMAGE_OK_OFFS)
+#endif
 
 
 #define IMG_OK_SET_UNDEFINED    0x55
diff --git a/boot/cypress/platforms/memory/CYW20829/flash_map_backend_platform.h b/boot/cypress/platforms/memory/CYW20829/flash_map_backend_platform.h
index dc6010e..81b3dbd 100644
--- a/boot/cypress/platforms/memory/CYW20829/flash_map_backend_platform.h
+++ b/boot/cypress/platforms/memory/CYW20829/flash_map_backend_platform.h
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2018 Nordic Semiconductor ASA
  * Copyright (c) 2015 Runtime Inc
- * Copyright (c) 2020 Cypress Semiconductor Corporation
+ * Copyright (c) 2025 Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/cypress/platforms/memory/CYW20829/flash_qspi/cy_smif_hybrid_sect.c b/boot/cypress/platforms/memory/CYW20829/flash_qspi/cy_smif_hybrid_sect.c
index 0643ea1..468a9d3 100644
--- a/boot/cypress/platforms/memory/CYW20829/flash_qspi/cy_smif_hybrid_sect.c
+++ b/boot/cypress/platforms/memory/CYW20829/flash_qspi/cy_smif_hybrid_sect.c
@@ -27,7 +27,7 @@
 ********************************************************************************
 * \copyright
 *
-* (c) 2020, Cypress Semiconductor Corporation
+* (c) 2025, Cypress Semiconductor Corporation
 * or a subsidiary of Cypress Semiconductor Corporation. All rights
 * reserved.
 *
diff --git a/boot/cypress/platforms/memory/CYW20829/flash_qspi/cy_smif_hybrid_sect.h b/boot/cypress/platforms/memory/CYW20829/flash_qspi/cy_smif_hybrid_sect.h
index 7e44118..4b95845 100644
--- a/boot/cypress/platforms/memory/CYW20829/flash_qspi/cy_smif_hybrid_sect.h
+++ b/boot/cypress/platforms/memory/CYW20829/flash_qspi/cy_smif_hybrid_sect.h
@@ -8,7 +8,7 @@
 ********************************************************************************
 * \copyright
 *
-* © 2020, Cypress Semiconductor Corporation
+* © 2025, Cypress Semiconductor Corporation
 * or a subsidiary of Cypress Semiconductor Corporation. All rights
 * reserved.
 *
diff --git a/boot/cypress/platforms/memory/CYW20829/flash_qspi/flash_qspi.c b/boot/cypress/platforms/memory/CYW20829/flash_qspi/flash_qspi.c
index 76ee0e7..6d22381 100644
--- a/boot/cypress/platforms/memory/CYW20829/flash_qspi/flash_qspi.c
+++ b/boot/cypress/platforms/memory/CYW20829/flash_qspi/flash_qspi.c
@@ -27,7 +27,7 @@
 ********************************************************************************
 * \copyright
 *
-* (c) 2020, Cypress Semiconductor Corporation
+* (c) 2025, Cypress Semiconductor Corporation
 * or a subsidiary of Cypress Semiconductor Corporation. All rights
 * reserved.
 *
diff --git a/boot/cypress/platforms/memory/CYW20829/flash_qspi/flash_qspi.h b/boot/cypress/platforms/memory/CYW20829/flash_qspi/flash_qspi.h
index 5ce3fd0..2381323 100644
--- a/boot/cypress/platforms/memory/CYW20829/flash_qspi/flash_qspi.h
+++ b/boot/cypress/platforms/memory/CYW20829/flash_qspi/flash_qspi.h
@@ -8,7 +8,7 @@
 ********************************************************************************
 * \copyright
 *
-* © 2020, Cypress Semiconductor Corporation
+* © 2025, Cypress Semiconductor Corporation
 * or a subsidiary of Cypress Semiconductor Corporation. All rights
 * reserved.
 *
diff --git a/boot/cypress/platforms/memory/CYW20829/flashmap/cyw20829_direct_xip_single.json b/boot/cypress/platforms/memory/CYW20829/flashmap/cyw20829_direct_xip_single.json
new file mode 100644
index 0000000..22791c5
--- /dev/null
+++ b/boot/cypress/platforms/memory/CYW20829/flashmap/cyw20829_direct_xip_single.json
@@ -0,0 +1,39 @@
+{
+    "external_flash": [
+        {
+            "model": "FM25W04",
+            "mode": "XIP"
+        }
+    ],
+    "boot_and_upgrade":
+    {
+        "bootloader": {
+            "address": {
+                "description": "Address of the bootloader",
+                "value": "0x60000000"
+            },
+            "size": {
+                "description": "Size of the bootloader",
+                "value": "0x20000"
+            }
+        },
+        "application_1": {
+            "primary_slot": {
+                "description": "Address of the application primary slot",
+                "value": "0x60020000"
+            },
+            "primary_slot_size": {
+                "description": "Size of the application primary slot",
+                "value": "0x20000"
+            },
+            "secondary_slot": {
+                "description": "Address of the application secondary slot",
+                "value": "0x60040000"
+            },
+            "secondary_slot_size": {
+                "description": "Size of the application secondary slot",
+                "value": "0x20000"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/boot/cypress/platforms/memory/PSC3/flash_map_backend_platform.h b/boot/cypress/platforms/memory/PSC3/flash_map_backend_platform.h
index 2160e73..f04fc8b 100644
--- a/boot/cypress/platforms/memory/PSC3/flash_map_backend_platform.h
+++ b/boot/cypress/platforms/memory/PSC3/flash_map_backend_platform.h
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2018 Nordic Semiconductor ASA
  * Copyright (c) 2015 Runtime Inc
- * Copyright (c) 2020 Cypress Semiconductor Corporation
+ * Copyright (c) 2025 Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/cypress/platforms/memory/PSC3/internal_memory.c b/boot/cypress/platforms/memory/PSC3/internal_memory.c
index 320bcd3..3ee2f85 100644
--- a/boot/cypress/platforms/memory/PSC3/internal_memory.c
+++ b/boot/cypress/platforms/memory/PSC3/internal_memory.c
@@ -1,6 +1,6 @@
 /********************************************************************************
  * \copyright
- * (c) (2016-2023), Cypress Semiconductor Corporation (an Infineon company) or
+ * (c) (2016-2025), Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.
  *
  * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/memory/PSC3/linker.ld b/boot/cypress/platforms/memory/PSC3/linker.ld
index 9588295..c4a5119 100644
--- a/boot/cypress/platforms/memory/PSC3/linker.ld
+++ b/boot/cypress/platforms/memory/PSC3/linker.ld
@@ -19,7 +19,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) or
+* Copyright 2025, Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.  All rights reserved.
 * SPDX-License-Identifier: Apache-2.0
 *
diff --git a/boot/cypress/platforms/memory/PSOC6/flash_map_backend_platform.h b/boot/cypress/platforms/memory/PSOC6/flash_map_backend_platform.h
index bdfedbd..77a969e 100644
--- a/boot/cypress/platforms/memory/PSOC6/flash_map_backend_platform.h
+++ b/boot/cypress/platforms/memory/PSOC6/flash_map_backend_platform.h
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2018 Nordic Semiconductor ASA
  * Copyright (c) 2015 Runtime Inc
- * Copyright (c) 2020 Cypress Semiconductor Corporation
+ * Copyright (c) 2025 Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/cypress/platforms/memory/PSOC6/flash_qspi/flash_qspi.c b/boot/cypress/platforms/memory/PSOC6/flash_qspi/flash_qspi.c
index 222ad66..7216a75 100644
--- a/boot/cypress/platforms/memory/PSOC6/flash_qspi/flash_qspi.c
+++ b/boot/cypress/platforms/memory/PSOC6/flash_qspi/flash_qspi.c
@@ -27,7 +27,7 @@
 ********************************************************************************
 * \copyright
 *
-* (c) 2020, Cypress Semiconductor Corporation
+* (c) 2025, Cypress Semiconductor Corporation
 * or a subsidiary of Cypress Semiconductor Corporation. All rights
 * reserved.
 *
diff --git a/boot/cypress/platforms/memory/PSOC6/flash_qspi/flash_qspi.h b/boot/cypress/platforms/memory/PSOC6/flash_qspi/flash_qspi.h
index 26ffd72..09e982a 100644
--- a/boot/cypress/platforms/memory/PSOC6/flash_qspi/flash_qspi.h
+++ b/boot/cypress/platforms/memory/PSOC6/flash_qspi/flash_qspi.h
@@ -8,7 +8,7 @@
 ********************************************************************************
 * \copyright
 *
-* © 2020, Cypress Semiconductor Corporation
+* © 2025, Cypress Semiconductor Corporation
 * or a subsidiary of Cypress Semiconductor Corporation. All rights
 * reserved.
 *
diff --git a/boot/cypress/platforms/memory/PSOC6/internal_memory.c b/boot/cypress/platforms/memory/PSOC6/internal_memory.c
index c0d2d0e..568eccd 100644
--- a/boot/cypress/platforms/memory/PSOC6/internal_memory.c
+++ b/boot/cypress/platforms/memory/PSOC6/internal_memory.c
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2018 Nordic Semiconductor ASA
  * Copyright (c) 2020 Cypress Semiconductor Corporation
- * Copyright (c) 2022 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/cycfg_qspi_memslot.c b/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/cycfg_qspi_memslot.c
index bcf6841..4131724 100644
--- a/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/cycfg_qspi_memslot.c
+++ b/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/cycfg_qspi_memslot.c
@@ -7,7 +7,7 @@
 * QSPI Configurator 3.0.0.5613
 *
 ********************************************************************************
-* Copyright 2022 Cypress Semiconductor Corporation
+* Copyright 2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/cycfg_qspi_memslot.h b/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/cycfg_qspi_memslot.h
index 884be8f..6952854 100644
--- a/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/cycfg_qspi_memslot.h
+++ b/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/cycfg_qspi_memslot.h
@@ -7,7 +7,7 @@
 * QSPI Configurator 3.0.0.5613
 *
 ********************************************************************************
-* Copyright 2022 Cypress Semiconductor Corporation
+* Copyright 2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/qspi_config.cfg b/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/qspi_config.cfg
index 96ff76a..a7aaf45 100644
--- a/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/qspi_config.cfg
+++ b/boot/cypress/platforms/memory/PSOC6/smif_cfg_dbg/qspi_config.cfg
@@ -7,7 +7,7 @@
 # QSPI Configurator: 3.0.0.5613
 #
 ################################################################################
-# Copyright 2022 Cypress Semiconductor Corporation
+# Copyright 2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/memory/XMC7000/flash_map_backend_platform.h b/boot/cypress/platforms/memory/XMC7000/flash_map_backend_platform.h
index 614ce37..b717744 100644
--- a/boot/cypress/platforms/memory/XMC7000/flash_map_backend_platform.h
+++ b/boot/cypress/platforms/memory/XMC7000/flash_map_backend_platform.h
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2018 Nordic Semiconductor ASA
  * Copyright (c) 2015 Runtime Inc
- * Copyright (c) 2020 Cypress Semiconductor Corporation
+ * Copyright (c) 2025 Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/cypress/platforms/memory/XMC7000/internal_memory_code.c b/boot/cypress/platforms/memory/XMC7000/internal_memory_code.c
index 52070c0..5aab23b 100644
--- a/boot/cypress/platforms/memory/XMC7000/internal_memory_code.c
+++ b/boot/cypress/platforms/memory/XMC7000/internal_memory_code.c
@@ -1,6 +1,6 @@
 /********************************************************************************
 * \copyright
-* (c) (2016-2023), Cypress Semiconductor Corporation (an Infineon company) or
+* (c) (2016-2025), Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/memory/XMC7000/internal_memory_work.c b/boot/cypress/platforms/memory/XMC7000/internal_memory_work.c
index 998c975..4ef77df 100644
--- a/boot/cypress/platforms/memory/XMC7000/internal_memory_work.c
+++ b/boot/cypress/platforms/memory/XMC7000/internal_memory_work.c
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2018 Nordic Semiconductor ASA
  * Copyright (c) 2020 Cypress Semiconductor Corporation
- * Copyright (c) 2022 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/cypress/platforms/memory/cy_flash_map.c b/boot/cypress/platforms/memory/cy_flash_map.c
index 52e69cb..26158e7 100644
--- a/boot/cypress/platforms/memory/cy_flash_map.c
+++ b/boot/cypress/platforms/memory/cy_flash_map.c
@@ -1,7 +1,6 @@
 /*
  * Copyright (c) 2018 Nordic Semiconductor ASA
- * Copyright (c) 2020 Cypress Semiconductor Corporation
- * Copyright (c) 2022 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/cypress/platforms/memory/external_memory/external_memory.c b/boot/cypress/platforms/memory/external_memory/external_memory.c
index 5fe2b93..58e0c35 100644
--- a/boot/cypress/platforms/memory/external_memory/external_memory.c
+++ b/boot/cypress/platforms/memory/external_memory/external_memory.c
@@ -9,7 +9,7 @@
  ********************************************************************************
  * \copyright
  *
- * (c) 2020, Cypress Semiconductor Corporation
+ * (c) 2025, Cypress Semiconductor Corporation
  * or a subsidiary of Cypress Semiconductor Corporation. All rights
  * reserved.
  *
@@ -160,7 +160,7 @@
 
 #if defined(MCUBOOT_ENC_IMAGES_SMIF)
 CY_RAMFUNC_BEGIN
-static cy_en_smif_status_t smif_encrypt(const void *data, uint32_t len, uintptr_t addr)
+static cy_en_smif_status_t smif_encrypt(void *data, uint32_t len, uintptr_t addr)
 {
     cy_en_smif_status_t status = CY_SMIF_SUCCESS;
     SMIF_Type *device = qspi_get_device();
diff --git a/boot/cypress/platforms/memory/flash_map_backend/flash_map_backend.h b/boot/cypress/platforms/memory/flash_map_backend/flash_map_backend.h
index c882a97..37e7068 100644
--- a/boot/cypress/platforms/memory/flash_map_backend/flash_map_backend.h
+++ b/boot/cypress/platforms/memory/flash_map_backend/flash_map_backend.h
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2018 Nordic Semiconductor ASA
  * Copyright (c) 2015 Runtime Inc
- * Copyright (c) 2020 Cypress Semiconductor Corporation
+ * Copyright (c) 2025 Cypress Semiconductor Corporation
  *
  * SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/cypress/platforms/memory/sysflash/sysflash.h b/boot/cypress/platforms/memory/sysflash/sysflash.h
index 544a8c6..32b1c55 100644
--- a/boot/cypress/platforms/memory/sysflash/sysflash.h
+++ b/boot/cypress/platforms/memory/sysflash/sysflash.h
@@ -1,6 +1,5 @@
 /*
- * Copyright (c) 2020 Cypress Semiconductor Corporation
- * Copyright (c) 2022 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * SPDX-License-Identifier: Apache-2.0
  */
diff --git a/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.c b/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.c
index 4612904..dfebd2f 100644
--- a/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.c
+++ b/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2020 Arm Limited.
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.h b/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.h
index f712a8d..0c6f75e 100644
--- a/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.h
+++ b/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.h
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2020 Arm Limited.
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.c b/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.c
index 5afd417..4c0ed92 100644
--- a/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.c
+++ b/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.h b/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.h
index 2f76386..34f433b 100644
--- a/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.h
+++ b/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.c b/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.c
index a786702..b2c9eb2 100644
--- a/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.c
+++ b/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2020 Arm Limited.
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.h b/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.h
index 75f17cf..7946a3b 100644
--- a/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.h
+++ b/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.h
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2020 Arm Limited.
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/boot/cypress/platforms/security_counter/PSC3/rollback_counter.h b/boot/cypress/platforms/security_counter/PSC3/rollback_counter.h
index a764cb4..a6dc154 100644
--- a/boot/cypress/platforms/security_counter/PSC3/rollback_counter.h
+++ b/boot/cypress/platforms/security_counter/PSC3/rollback_counter.h
@@ -7,7 +7,7 @@
 *
 *********************************************************************************
 * \copyright
-* Copyright 2019-2024, Cypress Semiconductor Corporation.  All rights reserved.
+* Copyright 2019-2025 Cypress Semiconductor Corporation.  All rights reserved.
 * You may use this file only in accordance with the license, terms, conditions,
 * disclaimers, and limitations in the end user license agreement accompanying
 * the software package with which this file was provided.
diff --git a/boot/cypress/platforms/security_counter/PSOC6/cy_security_cnt_platform.c b/boot/cypress/platforms/security_counter/PSOC6/cy_security_cnt_platform.c
index 4218fe8..01e6dfb 100644
--- a/boot/cypress/platforms/security_counter/PSOC6/cy_security_cnt_platform.c
+++ b/boot/cypress/platforms/security_counter/PSOC6/cy_security_cnt_platform.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2020 Arm Limited.
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/boot/cypress/platforms/security_counter/PSOC6/cy_security_cnt_platform.h b/boot/cypress/platforms/security_counter/PSOC6/cy_security_cnt_platform.h
index b1fad71..bc47b27 100644
--- a/boot/cypress/platforms/security_counter/PSOC6/cy_security_cnt_platform.h
+++ b/boot/cypress/platforms/security_counter/PSOC6/cy_security_cnt_platform.h
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2020 Arm Limited.
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/boot/cypress/platforms/utils/CYW20829/platform_utils.c b/boot/cypress/platforms/utils/CYW20829/platform_utils.c
index d405caa..d6c7299 100644
--- a/boot/cypress/platforms/utils/CYW20829/platform_utils.c
+++ b/boot/cypress/platforms/utils/CYW20829/platform_utils.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/boot/cypress/platforms/utils/CYW20829/platform_utils.h b/boot/cypress/platforms/utils/CYW20829/platform_utils.h
index 3adc51a..4c5f895 100644
--- a/boot/cypress/platforms/utils/CYW20829/platform_utils.h
+++ b/boot/cypress/platforms/utils/CYW20829/platform_utils.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Infineon Technologies AG
+ * Copyright (c) 2025 Infineon Technologies AG
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,22 +26,7 @@
 #include "bootutil/enc_key.h"
 #include "bootutil/fault_injection_hardening.h"
 
-#ifdef CYW20829
-
-extern const volatile uint32_t __data_start__[];
-extern const volatile uint32_t __data_end__[];
-
-extern const volatile uint32_t __bss_start__[];
-extern const volatile uint32_t __bss_end__[];
-
-extern const volatile uint32_t __HeapBase[];
-extern const volatile uint32_t __HeapLimit[];
-
-extern const volatile uint32_t __StackLimit[];
-extern const volatile uint32_t __StackTop[];
-
 __NO_RETURN void platform_RunNextApp(fih_uint toc2_addr, uint32_t *key, uint32_t *iv);
-#endif
 
 #endif /* CYW_PLATFORMS_UTILS_H */
 
diff --git a/boot/cypress/platforms/utils/PSC3/cyw_platform_utils.h b/boot/cypress/platforms/utils/PSC3/cyw_platform_utils.h
index 1213bf8..d23da98 100644
--- a/boot/cypress/platforms/utils/PSC3/cyw_platform_utils.h
+++ b/boot/cypress/platforms/utils/PSC3/cyw_platform_utils.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025, Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.  All rights reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/utils/PSC3/platform_utils.h b/boot/cypress/platforms/utils/PSC3/platform_utils.h
index de18aba..6771f3a 100644
--- a/boot/cypress/platforms/utils/PSC3/platform_utils.h
+++ b/boot/cypress/platforms/utils/PSC3/platform_utils.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) or
+ * Copyright 2025, Cypress Semiconductor Corporation (an Infineon company) or
  * an affiliate of Cypress Semiconductor Corporation.  All rights reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/utils/PSOC6/platform_utils.c b/boot/cypress/platforms/utils/PSOC6/platform_utils.c
index db18b8c..9e91e9d 100644
--- a/boot/cypress/platforms/utils/PSOC6/platform_utils.c
+++ b/boot/cypress/platforms/utils/PSOC6/platform_utils.c
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* (c) 2022, Cypress Semiconductor Corporation (an Infineon company) or
+* (c) 2025, Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/utils/PSOC6/platform_utils.h b/boot/cypress/platforms/utils/PSOC6/platform_utils.h
index af85c6c..51c82b2 100644
--- a/boot/cypress/platforms/utils/PSOC6/platform_utils.h
+++ b/boot/cypress/platforms/utils/PSOC6/platform_utils.h
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* (c) 2022, Cypress Semiconductor Corporation (an Infineon company) or
+* (c) 2025, Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/utils/PSOC6/psoc6_02_cm0p_sleep.c b/boot/cypress/platforms/utils/PSOC6/psoc6_02_cm0p_sleep.c
index e5af3e6..15b818d 100644
--- a/boot/cypress/platforms/utils/PSOC6/psoc6_02_cm0p_sleep.c
+++ b/boot/cypress/platforms/utils/PSOC6/psoc6_02_cm0p_sleep.c
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright (c) 2018-2021 Cypress Semiconductor Corporation (an Infineon
+* Copyright (c) 2018-2025 Cypress Semiconductor Corporation (an Infineon
 * company) or an affiliate of Cypress Semiconductor Corporation
 * SPDX-License-Identifier: LicenseRef-PBL
 *
diff --git a/boot/cypress/platforms/utils/XMC7000/cy_si_config.c b/boot/cypress/platforms/utils/XMC7000/cy_si_config.c
index 4a2d076..fce8494 100644
--- a/boot/cypress/platforms/utils/XMC7000/cy_si_config.c
+++ b/boot/cypress/platforms/utils/XMC7000/cy_si_config.c
@@ -1,5 +1,5 @@
 /********************************************************************************
-* Copyright 2023 Infineon Technologies AG
+* Copyright 2025 Infineon Technologies AG
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/platforms/utils/XMC7000/cy_si_config.h b/boot/cypress/platforms/utils/XMC7000/cy_si_config.h
index 90d071a..1008ee5 100644
--- a/boot/cypress/platforms/utils/XMC7000/cy_si_config.h
+++ b/boot/cypress/platforms/utils/XMC7000/cy_si_config.h
@@ -7,7 +7,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2023, Cypress Semiconductor Corporation. All rights reserved.
+* Copyright 2025, Cypress Semiconductor Corporation. All rights reserved.
 * You may use this file only in accordance with the license, terms, conditions,
 * disclaimers, and limitations in the end user license agreement accompanying
 * the software package with which this file was provided.
diff --git a/boot/cypress/platforms/utils/XMC7000/cy_si_keystorage.h b/boot/cypress/platforms/utils/XMC7000/cy_si_keystorage.h
index 647f66e..3062bc5 100644
--- a/boot/cypress/platforms/utils/XMC7000/cy_si_keystorage.h
+++ b/boot/cypress/platforms/utils/XMC7000/cy_si_keystorage.h
@@ -7,7 +7,7 @@
 *
 ********************************************************************************
 * \copyright
-* Copyright 2017-2018, Cypress Semiconductor Corporation. All rights reserved.
+* Copyright 2017-2025 Cypress Semiconductor Corporation. All rights reserved.
 * You may use this file only in accordance with the license, terms, conditions,
 * disclaimers, and limitations in the end user license agreement accompanying
 * the software package with which this file was provided.
diff --git a/boot/cypress/platforms/utils/XMC7000/platform_utils.c b/boot/cypress/platforms/utils/XMC7000/platform_utils.c
index df140d3..6c7c7ee 100644
--- a/boot/cypress/platforms/utils/XMC7000/platform_utils.c
+++ b/boot/cypress/platforms/utils/XMC7000/platform_utils.c
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* (c) 2022, Cypress Semiconductor Corporation (an Infineon company) or
+* (c) 2025, Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/platforms/utils/XMC7000/platform_utils.h b/boot/cypress/platforms/utils/XMC7000/platform_utils.h
index b82e8af..8741cb2 100644
--- a/boot/cypress/platforms/utils/XMC7000/platform_utils.h
+++ b/boot/cypress/platforms/utils/XMC7000/platform_utils.h
@@ -6,7 +6,7 @@
 *
 ********************************************************************************
 * \copyright
-* (c) 2022, Cypress Semiconductor Corporation (an Infineon company) or
+* (c) 2025, Cypress Semiconductor Corporation (an Infineon company) or
 * an affiliate of Cypress Semiconductor Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
diff --git a/boot/cypress/run_toc2_generator.sh b/boot/cypress/run_toc2_generator.sh
index c8f65f3..44de9ec 100755
--- a/boot/cypress/run_toc2_generator.sh
+++ b/boot/cypress/run_toc2_generator.sh
@@ -1,4 +1,21 @@
 #!/bin/bash
+################################################################################
+# \copyright
+# Copyright 2025 Cypress Semiconductor Corporation
+# SPDX-License-Identifier: Apache-2.0
+#
+# 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.
+################################################################################
 (set -o igncr) 2>/dev/null && set -o igncr; #keep this comment
 
 echo_run() { echo "\$ ${@/eval/}" ; "$@" ; }
@@ -37,6 +54,12 @@
 L1_USER_APP_ELF="$2/$3.elf"
 : ${L1_USER_APP_ELF:="blinky.elf"}
 
+PLAIN_APP_BIN="$2/$3.plain_app.bin"
+: ${PLAIN_APP_BIN:="blinky.plain_app.bin"}
+
+PLAIN_APP_ENCRYPTED_BIN="$2/$3.plain_app_enc.bin"
+: ${PLAIN_APP_ENCRYPTED_BIN:="blinky.plain_app_enc.bin"}
+
 FINAL_BIN_FILE="$2/$3.final.bin"
 : ${FINAL_BIN_FILE:="blinky.final.bin"}
 
@@ -333,7 +356,20 @@
 	fi
 
 	# Combining all images (toc2+l1_app_desc+l1_user_app_header+l1_user_app) to Final binary file
-	`cat $TOC2_FILE $L1_DESC_FILE $L1_USER_APP_HEADER_FILE $L1_USER_APP_BIN > $FINAL_BIN_FILE`
+    if [ "$ENC_OPTION" != "" ]; then
+		dd seek=16 bs=1 count=12 conv=notrunc if=$AES_CTR_NONCE_FILE of=$L1_DESC_FILE >& /dev/null
+
+		cat $L1_USER_APP_HEADER_FILE $L1_USER_APP_BIN > $PLAIN_APP_BIN
+
+		cysecuretools -t cyw20829 encrypt --input $PLAIN_APP_BIN --output $PLAIN_APP_ENCRYPTED_BIN --iv 0x08000030 --enckey ./keys/encrypt_key.bin --nonce $AES_CTR_NONCE_FILE
+
+		`cat $TOC2_FILE $L1_DESC_FILE $PLAIN_APP_ENCRYPTED_BIN > $FINAL_BIN_FILE`
+
+	else
+
+		`cat $TOC2_FILE $L1_DESC_FILE $L1_USER_APP_HEADER_FILE $L1_USER_APP_BIN > $FINAL_BIN_FILE`
+
+	fi
 elif [ "$LCS" == "SECURE" ]; then
 	if [ ! -f "$L1_USER_APP_BIN" ]; then
 		echo "Error: $L1_USER_APP_BIN does not exist." > /dev/tty
diff --git a/boot/cypress/scripts/bin2c.py b/boot/cypress/scripts/bin2c.py
index 04bc67a..8cdf147 100644
--- a/boot/cypress/scripts/bin2c.py
+++ b/boot/cypress/scripts/bin2c.py
@@ -15,7 +15,7 @@
 *
 ********************************************************************************
 * \\copyright
-* Copyright (c) 2018-2019 Cypress Semiconductor Corporation
+* Copyright (c) 2018-2025 Cypress Semiconductor Corporation
 * SPDX-License-Identifier: LicenseRef-PBL
 *
 * Licensed under the Permissive Binary License
diff --git a/boot/cypress/scripts/feature.py b/boot/cypress/scripts/feature.py
index a0a61c4..63d7cb9 100644
--- a/boot/cypress/scripts/feature.py
+++ b/boot/cypress/scripts/feature.py
@@ -1,5 +1,5 @@
 """
-Copyright 2024 Cypress Semiconductor Corporation (an Infineon company)
+Copyright 2025 Cypress Semiconductor Corporation (an Infineon company)
 or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
 
 Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/boot/cypress/scripts/find_cysectools.py b/boot/cypress/scripts/find_cysectools.py
index 8733575..83faaba 100644
--- a/boot/cypress/scripts/find_cysectools.py
+++ b/boot/cypress/scripts/find_cysectools.py
@@ -1,5 +1,5 @@
 """
-Copyright (c) 2019 Cypress Semiconductor Corporation
+Copyright (c) 2025 Cypress Semiconductor Corporation
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/boot/cypress/scripts/memorymap.py b/boot/cypress/scripts/memorymap.py
index d0799d6..3215dc4 100644
--- a/boot/cypress/scripts/memorymap.py
+++ b/boot/cypress/scripts/memorymap.py
@@ -1,14 +1,21 @@
 """MCUBoot Flash Map Converter (JSON to .h)
-Copyright (c) 2022 Infineon Technologies AG
+Copyright (c) 2025 Infineon Technologies AG
 """
 
 import sys
 import getopt
 import json
+import os
 from enum import Enum
-import os.path
+from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
 
 MAX_IMAGE_NUMBERS = 16
+NONCE_GEN_RETRIES = 10
+NONCE_RAND_SIZE = 12
+AES_BLOCK_SIZE = 16
+IMG_OK_OFFSET = 8 + 16  # flag_size + magic_size
+IMG_OK_VALUE = 0x01
+SHAB_ADDR = 0x08000000
 
 class Error(Enum):
     ''' Application error codes '''
@@ -230,31 +237,36 @@
         self.plat_id = ''
         self.in_file = ''
         self.out_file = ''
+        self.mk_file = ''
         self.fa_file = ''
+        self.nonce_file = None
         self.img_id = None
         self.policy = None
         self.set_core = False
         self.image_boot_config = False
 
         usage = 'USAGE:\n' + sys.argv[0] + \
-                ''' -p <platform> -i <flash_map.json> -o <memorymap.c> -a <memorymap.h> -d <img_id> -c <policy.json>
+                ''' -p <platform> -i <flash_map.json> -o <memorymap.c> -k <memorymap.mk> -a <memorymap.h> -d <img_id> -c <policy.json>
 
 OPTIONS:
--h  --help       Display the usage information
--p  --platform=  Target (e.g., PSOC_062_512K)
--i  --ifile=     JSON flash map file
--o  --ofile=     C file to be generated
--a  --fa_file=   path where to create 'memorymap.h'
--d  --img_id     ID of application to build
--c  --policy     Policy file in JSON format
--m  --core       Detect and set Cortex-M CORE
+-h  --help              Display the usage information
+-p  --platform          Target (e.g., PSOC_062_512K)
+-i  --ifile             JSON flash map file
+-o  --ofile             C file to be generated
+-k  --mk_file           Path where to create 'memorymap.mk'
+-a  --fa_file           Path where to create 'memorymap.h'
+-n  --nonce_file        Path where to create file with NONCE
+-d  --img_id            ID of application to build
+-c  --policy            Policy file in JSON format
+-m  --core              Detect and set Cortex-M CORE
 -x  --image_boot_config Generate image boot config structure
 '''
 
         try:
             opts, unused = getopt.getopt(
-                sys.argv[1:], 'hi:o:a:p:d:c:x:m',
-                ['help', 'platform=', 'ifile=', 'ofile=', "fa_file=", 'img_id=', 'policy=', 'core', 'image_boot_config'])
+                sys.argv[1:], 'h:i:o:k:a:n:p:d:c:x:m',
+                ['help', 'platform=', 'ifile=', 'ofile=', 'mk_file=', 'fa_file=',
+                 'nonce_file=', 'img_id=', 'policy=', 'core', 'image_boot_config'])
         except getopt.GetoptError:
             print(usage, file=sys.stderr)
             sys.exit(Error.ARG)
@@ -269,8 +281,12 @@
                 self.in_file = arg
             elif opt in ('-o', '--ofile'):
                 self.out_file = arg
+            elif opt in ('-k', '--mk_file'):
+                self.mk_file = arg
             elif opt in ('-a', '--fa_file'):
                 self.fa_file = arg
+            elif opt in ('-n', '--nonce_file'):
+                self.nonce_file = arg
             elif opt in ('-d', '--img_id'):
                 self.img_id = arg
             elif opt in ('-c', '--policy'):
@@ -280,7 +296,7 @@
             elif opt in ('x', '--image_boot_config'):
                 self.image_boot_config = True
 
-        if len(self.in_file) == 0 or len(self.out_file) == 0 or len(self.fa_file) == 0:
+        if any(len(x) == 0 for x in (self.in_file, self.out_file, self.mk_file, self.fa_file)):
             print(usage, file=sys.stderr)
             sys.exit(Error.ARG)
 
@@ -351,6 +367,7 @@
         self.plat = plat
         self.flash = flash
         self.use_overwrite = use_overwrite
+        self.use_direct_xip = False
         self.areas = []
         self.peers = {}
         self.trailers = {}
@@ -655,7 +672,7 @@
                 out_f.write(f'#include "{params.fa_file}"\n')
                 out_f.write(f'#include "flash_map_backend.h"\n\n')
                 out_f.write(f'#include "flash_map_backend_platform.h"\n\n')
-                out_f.write(f'struct flash_area {c_array}[] = {{\n')
+                out_f.write(f'const struct flash_area {c_array}[] = {{\n')
                 comma = len(self.areas)
                 area_count = 0
                 for area in self.areas:
@@ -672,7 +689,7 @@
                             '    },' if comma else '    }', '']))
                         area_count += 1
                 out_f.write('};\n\n'
-                            'struct flash_area *boot_area_descs[] = {\n')
+                            'const struct flash_area * const boot_area_descs[] = {\n')
                 for area_index in range(area_count):
                     out_f.write(f'    &{c_array}[{area_index}U],\n')
                 out_f.write('    NULL\n};\n')
@@ -721,8 +738,8 @@
                 fa_f.write(f'#include "flash_map_backend.h"\n\n')
                 fa_f.write('#include "bootutil/bootutil.h"\n')
 
-                fa_f.write(f'extern struct flash_area {c_array}[];\n')
-                fa_f.write(f'extern struct flash_area *boot_area_descs[];\n')
+                fa_f.write(f'extern const struct flash_area {c_array}[];\n')
+                fa_f.write(f'extern const struct flash_area * const boot_area_descs[];\n')
 
                 #we always have BOOTLOADER and IMG_1_
                 fa_f.write("#define FLASH_AREA_BOOTLOADER          ( 0u)\n\n")
@@ -991,10 +1008,19 @@
                         ram = None
 
                 try:
-                    primary_addr = get_val(flash, 'address')
-                    primary_size = get_val(flash, 'size')
-                    secondary_addr = get_val(flash, 'upgrade_address')
-                    secondary_size = get_val(flash, 'upgrade_size')
+                    try:
+                        primary_addr = get_val(flash, 'primary_slot')
+                        secondary_addr = get_val(flash, 'secondary_slot')
+                        primary_size = get_val(flash, 'primary_slot_size')
+                        secondary_size = get_val(flash, 'secondary_slot_size')
+
+                        area_list.use_direct_xip = True
+
+                    except KeyError:
+                        primary_addr = get_val(flash, 'address')
+                        secondary_addr = get_val(flash, 'upgrade_address')
+                        primary_size = get_val(flash, 'size')
+                        secondary_size = get_val(flash, 'upgrade_size')
 
                     if ram is not None:
                         app_ram_addr = get_val(ram, 'address')
@@ -1235,8 +1261,7 @@
     app_desc = None
     if service_app is not None:
         if plat['flashSize'] > 0:
-            print('service_app is unsupported on this platform',
-                  file=sys.stderr)
+            print('service_app is unsupported on this platform', file=sys.stderr)
             sys.exit(Error.CONFIG_MISMATCH)
         try:
             app_binary = AddrSize(service_app, 'address', 'size')
@@ -1250,8 +1275,7 @@
             area_list.add_area('service_app', None, app_binary.addr,
                                app_binary.size + input_params.size + app_desc.size)
         except KeyError as key:
-            print('Malformed JSON:', key, 'is missing',
-                  file=sys.stderr)
+            print('Malformed JSON:', key, 'is missing', file=sys.stderr)
             sys.exit(Error.JSON)
 
     # Fill flash areas
@@ -1263,8 +1287,7 @@
 
     if app_start % plat['VTAlign'] != 0:
         print('Starting address', apps_flash_map[1].get("primary").get("address"),
-              '+', hex(cy_img_hdr_size),
-              'must be aligned to', hex(plat['VTAlign']),
+              '+', hex(cy_img_hdr_size), 'must be aligned to', hex(plat['VTAlign']),
               file=sys.stderr)
         sys.exit(Error.CONFIG_MISMATCH)
 
@@ -1308,39 +1331,45 @@
 
     area_list.create_flash_area_id(app_count, params)
 
-    # Report necessary values back to make
-    print('# AUTO-GENERATED FILE, DO NOT EDIT. ALL CHANGES WILL BE LOST!')
+    # Write necessary values to makefile
+    try:
+        mk_file = open(params.mk_file, "w")
+    except (FileNotFoundError, OSError):
+        print('\nERROR: Cannot create ', params.mk_file, file=sys.stderr)
+        sys.exit(Error.IO)
+
+    print('# AUTO-GENERATED FILE, DO NOT EDIT. ALL CHANGES WILL BE LOST!', file=mk_file)
     if params.set_core:
-        print('CORE :=', plat['allCores'][plat['bootCore'].lower()])
+        print('CORE :=', plat['allCores'][plat['bootCore'].lower()], file=mk_file)
 
     if ram_app_staging is not None:
-        print('USE_STAGE_RAM_APPS := 1')
-        print('RAM_APP_STAGING_EXT_MEM_ADDR := ', hex(ram_app_staging_ext_mem_addr))
-        print('RAM_APP_STAGING_SRAM_MEM_ADDR :=', hex(ram_app_staging_sram_stage_addr))
-        print('RAM_APP_STAGING_SIZE := ', hex(ram_app_staging_size))
+        print('USE_STAGE_RAM_APPS := 1', file=mk_file)
+        print('RAM_APP_STAGING_EXT_MEM_ADDR := ', hex(ram_app_staging_ext_mem_addr), file=mk_file)
+        print('RAM_APP_STAGING_SRAM_MEM_ADDR :=', hex(ram_app_staging_sram_stage_addr), file=mk_file)
+        print('RAM_APP_STAGING_SIZE := ', hex(ram_app_staging_size), file=mk_file)
         if ram_app_staging_reset_trigger is True:
-            print('RAM_APP_RESET_TRIGGER := 1')
+            print('RAM_APP_RESET_TRIGGER := 1', file=mk_file)
 
     if bootloader_startup is True:
-        print('BOOTLOADER_STARTUP := 1')
+        print('BOOTLOADER_STARTUP := 1', file=mk_file)
 
     if ram_app_area is not None:
-        print('USE_MCUBOOT_RAM_LOAD := 1')
-        print('IMAGE_EXECUTABLE_RAM_START :=', hex(ram_app_area.addr))
-        print('IMAGE_EXECUTABLE_RAM_SIZE :=', hex(ram_app_area.size))
+        print('USE_MCUBOOT_RAM_LOAD := 1', file=mk_file)
+        print('IMAGE_EXECUTABLE_RAM_START :=', hex(ram_app_area.addr), file=mk_file)
+        print('IMAGE_EXECUTABLE_RAM_SIZE :=', hex(ram_app_area.size), file=mk_file)
 
     if boot_shared_data_area is not None:
-        print('USE_MEASURED_BOOT := 1')
-        print('USE_DATA_SHARING := 1')
-        print('BOOT_SHARED_DATA_ADDRESS :=', hex(boot_shared_data_area.addr)+'U')
-        print('BOOT_SHARED_DATA_SIZE :=', hex(boot_shared_data_area.size)+'U')
-        print('BOOT_SHARED_DATA_RECORD_SIZE :=', hex(boot_shared_data_area.size)+'U')
+        print('USE_MEASURED_BOOT := 1', file=mk_file)
+        print('USE_DATA_SHARING := 1', file=mk_file)
+        print('BOOT_SHARED_DATA_ADDRESS :=', hex(boot_shared_data_area.addr)+'U', file=mk_file)
+        print('BOOT_SHARED_DATA_SIZE :=', hex(boot_shared_data_area.size)+'U', file=mk_file)
+        print('BOOT_SHARED_DATA_RECORD_SIZE :=', hex(boot_shared_data_area.size)+'U', file=mk_file)
 
-    print('BOOTLOADER_ORIGIN :=', hex(boot_flash_area.addr))
-    print('BOOTLOADER_SIZE :=', hex(boot_flash_area.size))
-    print('BOOTLOADER_RAM_ORIGIN :=', hex(boot_ram_area.addr))
-    print('BOOTLOADER_RAM_SIZE :=', hex(boot_ram_area.size))
-    print('APP_CORE :=', app_core)
+    print('BOOTLOADER_ORIGIN :=', hex(boot_flash_area.addr), file=mk_file)
+    print('BOOTLOADER_SIZE :=', hex(boot_flash_area.size), file=mk_file)
+    print('BOOTLOADER_RAM_ORIGIN :=', hex(boot_ram_area.addr), file=mk_file)
+    print('BOOTLOADER_RAM_SIZE :=', hex(boot_ram_area.size), file=mk_file)
+    print('APP_CORE :=', app_core, file=mk_file)
 
     # for blinky
     if params.img_id is not None:
@@ -1353,14 +1382,14 @@
             image_ram_size = apps_ram_map[int(params.img_id)].get("size")
             image_ram_boot = apps_ram_map[int(params.img_id)].get("ram_boot")
             if image_ram_address and image_ram_size:
-                print('IMG_RAM_ORIGIN := ' + hex(image_ram_address))
-                print('IMG_RAM_SIZE := ' + hex(image_ram_size))
+                print('IMG_RAM_ORIGIN := ' + hex(image_ram_address), file=mk_file)
+                print('IMG_RAM_SIZE := ' + hex(image_ram_size), file=mk_file)
                 if image_ram_boot is True:
-                    print('USE_MCUBOOT_RAM_LOAD := 1')
+                    print('USE_MCUBOOT_RAM_LOAD := 1', file=mk_file)
 
-        print('PRIMARY_IMG_START := ' + primary_img_start)
-        print('SECONDARY_IMG_START := ' + secondary_img_start)
-        print('SLOT_SIZE := ' + slot_size)
+        print('PRIMARY_IMG_START := ' + primary_img_start, file=mk_file)
+        print('SECONDARY_IMG_START := ' + secondary_img_start, file=mk_file)
+        print('SLOT_SIZE := ' + slot_size, file=mk_file)
     # for bootloader
     else:
         if apps_ram_map:
@@ -1370,34 +1399,96 @@
                     ram_load_counter += 1
 
             if ram_load_counter != 0:
-                print('USE_MCUBOOT_RAM_LOAD := 1')
+                print('USE_MCUBOOT_RAM_LOAD := 1', file=mk_file)
                 if ram_load_counter == 1:
-                    print(f'IMAGE_EXECUTABLE_RAM_START := {hex(apps_ram_map[1].get("address"))}')
-                    print(f'IMAGE_EXECUTABLE_RAM_SIZE := {hex(apps_ram_map[1].get("size"))}')
+                    print(f'IMAGE_EXECUTABLE_RAM_START := {hex(apps_ram_map[1].get("address"))}', file=mk_file)
+                    print(f'IMAGE_EXECUTABLE_RAM_SIZE := {hex(apps_ram_map[1].get("size"))}', file=mk_file)
                 else:
-                    print('USE_MCUBOOT_MULTI_MEMORY_LOAD := 1')
+                    print('USE_MCUBOOT_MULTI_MEMORY_LOAD := 1', file=mk_file)
 
-        print('MAX_IMG_SECTORS :=', slot_sectors_max)
+        print('MAX_IMG_SECTORS :=', slot_sectors_max, file=mk_file)
 
-    print('MCUBOOT_IMAGE_NUMBER :=', app_count)
+    print('MCUBOOT_IMAGE_NUMBER :=', app_count, file=mk_file)
     if area_list.external_flash:
-        print('USE_EXTERNAL_FLASH := 1')
+        print('USE_EXTERNAL_FLASH := 1', file=mk_file)
     if area_list.external_flash_xip:
-        print('USE_XIP := 1')
+        print('USE_XIP := 1', file=mk_file)
 
-    if area_list.use_overwrite:
-        print('USE_OVERWRITE := 1')
+    if area_list.use_direct_xip:
+        print('USE_DIRECT_XIP := 1', file=mk_file)
+    elif area_list.use_overwrite:
+        print('USE_OVERWRITE := 1', file=mk_file)
+
     if shared_slot:
-        print('USE_SHARED_SLOT := 1')
+        print('USE_SHARED_SLOT := 1', file=mk_file)
     if service_app is not None:
         print('PLATFORM_SERVICE_APP_OFFSET :=',
-              hex(app_binary.addr - plat['smifAddr']))
+              hex(app_binary.addr - plat['smifAddr']), file=mk_file)
         print('PLATFORM_SERVICE_APP_INPUT_PARAMS_OFFSET :=',
-              hex(input_params.addr - plat['smifAddr']))
+              hex(input_params.addr - plat['smifAddr']), file=mk_file)
         print('PLATFORM_SERVICE_APP_DESC_OFFSET :=',
-              hex(app_desc.addr - plat['smifAddr']))
-        print('USE_HW_ROLLBACK_PROT := 1')
+              hex(app_desc.addr - plat['smifAddr']), file=mk_file)
+        print('USE_HW_ROLLBACK_PROT := 1', file=mk_file)
+    mk_file.close()
 
+    if params.nonce_file and not os.path.isfile(params.nonce_file):
+        try:
+            with open(params.policy, encoding='UTF-8') as in_f:
+                try:
+                    policy = json.load(in_f)
+                except ValueError:
+                    print('\nERROR: Cannot parse', params.policy, '\n', file=sys.stderr)
+                    sys.exit(Error.IO)
+        except (FileNotFoundError, OSError):
+            print('\nERROR: Cannot open', params.policy, file=sys.stderr)
+            sys.exit(Error.IO)
+
+        policy_key_path = policy.get('pre_build', {}).get('keys', {}).get('encrypt_key', {}).get('value', {})
+        if policy_key_path:
+            full_key_path = os.path.join(os.path.dirname(params.policy), policy_key_path)
+            try:
+                with open(full_key_path, "rb") as aes_key_file:
+                    aes_key = aes_key_file.read()
+            except (FileNotFoundError, OSError):
+                print('Missing encryption key', full_key_path, '\nNonce file generation skipped')
+                sys.exit(0)
+
+            if len(aes_key) != AES_BLOCK_SIZE:
+                print('\nERROR: Wrong AES key size in ', full_key_path, file=sys.stderr)
+                sys.exit(Error.CONFIG_MISMATCH)
+
+            for i in range(NONCE_GEN_RETRIES):
+                random_bytes = os.urandom(NONCE_RAND_SIZE)
+                fa_ids = [entry['fa_off'] + entry['fa_size'] for entry in area_list.areas
+                          if entry['fa_id'].startswith('FLASH_AREA_IMG_')]
+                for fa_end_addr in fa_ids:
+                    img_ok_addr = SHAB_ADDR + fa_end_addr - IMG_OK_OFFSET
+                    img_ok_block_addr = img_ok_addr & ~(AES_BLOCK_SIZE - 1)
+                    nonce = img_ok_block_addr.to_bytes(AES_BLOCK_SIZE - NONCE_RAND_SIZE,
+                                                         byteorder='little') + random_bytes
+                    cipher = Cipher(algorithms.AES(aes_key), modes.CTR(nonce))
+                    encryptor_0 = cipher.encryptor()
+                    encryptor_1 = cipher.encryptor()
+                    encrypted_block_0 = encryptor_0.update(b'\x00' * AES_BLOCK_SIZE)
+                    encrypted_block_1 = encryptor_1.update(b'\xFF' * AES_BLOCK_SIZE)
+
+                    if encrypted_block_0[img_ok_addr - img_ok_block_addr] == IMG_OK_VALUE or \
+                       encrypted_block_1[img_ok_addr - img_ok_block_addr] == IMG_OK_VALUE:
+                        break
+                else:
+                    break
+            else:
+                print("\nERROR: Can't generate valid NONCE sequence", file=sys.stderr)
+                sys.exit(Error.VALUE)
+
+            try:
+                if '/' in params.nonce_file or '\\' in params.nonce_file:
+                    os.makedirs(os.path.dirname(params.nonce_file), exist_ok=True)
+                with open(params.nonce_file, "wb") as nonce_f:
+                    nonce_f.write(random_bytes)
+            except (FileNotFoundError, OSError):
+                print('\nERROR: Cannot create ', params.nonce_file, file=sys.stderr)
+                sys.exit(Error.IO)
 
 if __name__ == '__main__':
     main()
diff --git a/boot/cypress/scripts/memorymap_rework.py b/boot/cypress/scripts/memorymap_rework.py
index 01b541f..5167475 100644
--- a/boot/cypress/scripts/memorymap_rework.py
+++ b/boot/cypress/scripts/memorymap_rework.py
@@ -1,5 +1,5 @@
 """
-Copyright 2024 Cypress Semiconductor Corporation (an Infineon company)
+Copyright 2025 Cypress Semiconductor Corporation (an Infineon company)
 or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
 
 Licensed under the Apache License, Version 2.0 (the "License");
@@ -57,6 +57,8 @@
     ,   'secondary_image_start'     :   'SECONDARY_IMG_START'
     ,   'secondary_image_area'      :   'SECONDARY_IMG_AREA'
     ,   'image_size'                :   'SLOT_SIZE'
+    ,   'erase_size'                :   'MIN_ERASE_SIZE'
+    ,   'erase_value'               :   'ERASE_VALUE'
 }
 
 def header_guard_generate(file):
@@ -316,8 +318,7 @@
 
         if region_name_alt:
             if "boot" in key:
-                if region_name_alt not in self.region_types_alt:
-                    self.region_types_alt.append(region_name_alt)
+                self.region_types_alt.append(region_name_alt)
 
         offset = area.addr - region.addr
         size = area.sz
@@ -409,14 +410,13 @@
             f_out.write('struct flash_device flash_devices[] =\n')
             f_out.write('{\n')
             for region in self.regions:
-                if region.mem_type[0] in self.region_types:
-                    f_out.write('\t{\n')
-                    f_out.write(f'\t\t.address      = {hex(region.addr)}U,\n')
-                    f_out.write(f'\t\t.size         = {hex(region.sz)}U,\n')
-                    f_out.write(f'\t\t.erase_size   = {hex(region.erase_sz)}U,\n')
-                    f_out.write(f'\t\t.erase_val    = {hex(region.erase_val)}U,\n')
-                    f_out.write(f'\t\t.device_id    = {str(region.mem_type[0])},\n')
-                    f_out.write('\t},\n')
+                f_out.write(f'\t[{region.mem_type[0]}] = ' + '{\n')
+                f_out.write(f'\t\t.address      = {hex(region.addr)}U,\n')
+                f_out.write(f'\t\t.size         = {hex(region.sz)}U,\n')
+                f_out.write(f'\t\t.erase_size   = {hex(region.erase_sz)}U,\n')
+                f_out.write(f'\t\t.erase_val    = {hex(region.erase_val)}U,\n')
+                f_out.write(f'\t\t.device_id    = {str(region.mem_type[0])},\n')
+                f_out.write('\t},\n')
             f_out.write('};\n\n')
 
             f_out.write(f'struct flash_area flash_areas[] =\n')
@@ -450,7 +450,7 @@
             f_out.write('\n};\n\n')
 
             f_out.write('image_boot_config_t image_boot_config[BOOT_IMAGE_NUMBER] = {\n')
-            
+
             for app in self.apps:
                 f_out.writelines('\n'.join([
                     '\t{\n'
@@ -484,8 +484,7 @@
             # because it fixes the bug when enum {INTERNAL_RRAM, EXTERNAL_FLASH,}
             # is generated in incorrect sequence.
             for region in self.regions:
-                if region.mem_type[0] in self.region_types:
-                    f_out.write(f'\t{str(region.mem_type[0])},\n')
+                f_out.write(f'\t{str(region.mem_type[0])},\n')
             f_out.write('};\n\n')
 
             f_out.write('enum \n{\n')
@@ -539,6 +538,11 @@
             print(f'{settings_dict["shared_data_size"]} :=', hex(shared_data.sz))
             print(f'{settings_dict["shared_data_record_size"]} :=', hex(shared_data.sz))
 
+        print('# Bootloader erase area')
+        for region in self.regions:
+            print(f'{region.mem_type[0]}_{settings_dict["erase_size"]} :=', hex(region.erase_sz))
+            print(f'{region.mem_type[0]}_{settings_dict["erase_value"]} :=', hex(region.erase_val))
+
         print('# Bootloader app area')
         for region in self.regions:
             if boot.bootloader_area.fits_with(region):
@@ -552,7 +556,7 @@
             print('# Bootloader ram area')
             print(f'{settings_dict["bootloader_ram_address"]} :=', hex(boot.ram.addr))
             print(f'{settings_dict["bootloader_ram_size"]} :=', hex(boot.ram.sz))
-        
+
         if boot.ram_boot:
             print(f'{settings_dict["bootloader_ram_load"]} := 1')
             print(f'{settings_dict["bootloader_ram_address"]} :=',  hex(boot.ram_boot.addr))
@@ -628,6 +632,12 @@
             print(settings_dict['scratch'], f':= {0 if boot.scratch_area is None else 1}')
             print(settings_dict['status'], f':= {0 if boot.status_area is None else 1}')
 
+        print('# Application erase area')
+        for region in self.regions:
+            print(f'{region.mem_type[0]}_{settings_dict["erase_size"]} :=', hex(region.erase_sz))
+            print(f'{region.mem_type[0]}_{settings_dict["erase_value"]} :=', hex(region.erase_val))
+
+        print('# Application area')
         print(settings_dict['application_count'], f'= {len(self.apps)}')
         print(settings_dict['boot_image'], ':=', self.app_id)
         print(settings_dict['primary_image_start'], ':=', hex(app.boot_area.addr))
diff --git a/boot/cypress/scripts/verbose_make.py b/boot/cypress/scripts/verbose_make.py
index c9cc037..c9d2d34 100644
--- a/boot/cypress/scripts/verbose_make.py
+++ b/boot/cypress/scripts/verbose_make.py
@@ -1,5 +1,5 @@
 """VERBOSE Makefile Generator
-Copyright (c) 2022 Infineon Technologies AG
+Copyright (c) 2025 Infineon Technologies AG
 """
 
 import os
diff --git a/boot/cypress/toolchains.mk b/boot/cypress/toolchains.mk
index 1208def..39876fe 100644
--- a/boot/cypress/toolchains.mk
+++ b/boot/cypress/toolchains.mk
@@ -7,7 +7,7 @@
 #
 ################################################################################
 # \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2025 Cypress Semiconductor Corporation
 # SPDX-License-Identifier: Apache-2.0
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -39,7 +39,7 @@
 # NOTE: Absolute pathes for now for the sake of development
 ifeq ($(HOST_OS), win)
     ifeq ($(COMPILER), GCC_ARM)
-        TOOLCHAIN_PATH ?= c:/Users/$(USERNAME)/ModusToolbox/tools_3.2/gcc
+        TOOLCHAIN_PATH ?= c:/Users/$(USERNAME)/Infineon/Tools/mtb-gcc-arm-eabi/11.3.1/gcc
         MY_TOOLCHAIN_PATH := $(call get_os_path, $(TOOLCHAIN_PATH))
         TOOLCHAIN_PATH := $(MY_TOOLCHAIN_PATH)
         GCC_PATH := $(TOOLCHAIN_PATH)
@@ -49,14 +49,14 @@
     endif
 
 else ifeq ($(HOST_OS), osx)
-    TOOLCHAIN_PATH ?= /opt/gcc-arm-none-eabi
+    TOOLCHAIN_PATH ?= /Applications/mtb-gcc-arm-eabi/11.3.1/gcc
     GCC_PATH := $(TOOLCHAIN_PATH)
-
+    # executables
     CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
     LD := $(CC)
 
 else ifeq ($(HOST_OS), linux)
-    TOOLCHAIN_PATH ?= /opt/gcc-arm-none-eabi
+    TOOLCHAIN_PATH ?= /opt/Tools/mtb-gcc-arm-eabi/11.3.1/gcc
     GCC_PATH := $(TOOLCHAIN_PATH)
     # executables
     CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
@@ -90,11 +90,11 @@
     $(error BUILDCFG : '$(BUILDCFG)' is not supported)
     endif
 
-    CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_PLATFORM) $(INCLUDES)
+    CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_PLATFORM) $(INCLUDES)  -ffreestanding -fno-builtin-memset -fno-builtin-memcpy
 
     CC_DEPEND = -MD -MP -MF
 
-    LDFLAGS_COMMON := -mcpu=cortex-$(CORE_SUFFIX) -mthumb -specs=nano.specs -ffunction-sections -fdata-sections  -Wl,--gc-sections -ffat-lto-objects -g --enable-objc-gc
+    LDFLAGS_COMMON := -mcpu=cortex-$(CORE_SUFFIX) -mthumb -specs=nano.specs -ffunction-sections -fdata-sections  -Wl,--gc-sections -ffat-lto-objects -g --enable-objc-gc  -ffreestanding -fno-builtin-memset -fno-builtin-memcpy
 
     ifeq ($(WARN_AS_ERR), 1)
         LDFLAGS_COMMON += -Wl,--fatal-warnings
diff --git a/ext/mbedtls b/ext/mbedtls
index 8df2f8e..1873d3b 160000
--- a/ext/mbedtls
+++ b/ext/mbedtls
@@ -1 +1 @@
-Subproject commit 8df2f8e7b9c7bb9390ac74bb7bace27edca81a2b
+Subproject commit 1873d3bfc2da771672bd8e7e8f41f57e0af77f33
diff --git a/sim/mcuboot-sys/build.rs b/sim/mcuboot-sys/build.rs
index 294aea6..c00162b 100644
--- a/sim/mcuboot-sys/build.rs
+++ b/sim/mcuboot-sys/build.rs
@@ -42,7 +42,8 @@
     conf.conf.define("MCUBOOT_USE_FLASH_AREA_GET_SECTORS", None);
     conf.conf.define("MCUBOOT_HAVE_ASSERT_H", None);
     conf.conf.define("MCUBOOT_MAX_IMG_SECTORS", Some("128"));
-
+    conf.conf.define("MCUBOOT_DEPENDENCY_CHECK", None);
+    
     if max_align_32 {
         conf.conf.define("MCUBOOT_BOOT_MAX_ALIGN", Some("32"));
     } else {
@@ -100,7 +101,11 @@
         conf.file("csupport/keys.c");
 
         conf.file("../../ext/mbedtls/library/rsa.c");
+        conf.file("../../ext/mbedtls/library/hash_info.c");
         conf.file("../../ext/mbedtls/library/bignum.c");
+        conf.file("../../ext/mbedtls/library/bignum_core.c");
+        conf.file("../../ext/mbedtls/library/bignum_mod_raw.c");
+        conf.file("../../ext/mbedtls/library/constant_time.c");
         conf.file("../../ext/mbedtls/library/platform.c");
         conf.file("../../ext/mbedtls/library/platform_util.c");
         conf.file("../../ext/mbedtls/library/asn1parse.c");
@@ -132,6 +137,9 @@
 
         conf.file("../../ext/mbedtls/library/asn1parse.c");
         conf.file("../../ext/mbedtls/library/bignum.c");
+        conf.file("../../ext/mbedtls/library/bignum_core.c");
+        conf.file("../../ext/mbedtls/library/bignum_mod_raw.c");
+        conf.file("../../ext/mbedtls/library/constant_time.c");
         conf.file("../../ext/mbedtls/library/ecdsa.c");
         conf.file("../../ext/mbedtls/library/ecp.c");
         conf.file("../../ext/mbedtls/library/ecp_curves.c");
@@ -201,10 +209,14 @@
         conf.file("../../ext/mbedtls/library/platform.c");
         conf.file("../../ext/mbedtls/library/platform_util.c");
         conf.file("../../ext/mbedtls/library/rsa.c");
+        conf.file("../../ext/mbedtls/library/hash_info.c");
         conf.file("../../ext/mbedtls/library/rsa_alt_helpers.c");
         conf.file("../../ext/mbedtls/library/md.c");
         conf.file("../../ext/mbedtls/library/aes.c");
         conf.file("../../ext/mbedtls/library/bignum.c");
+        conf.file("../../ext/mbedtls/library/bignum_core.c");
+        conf.file("../../ext/mbedtls/library/bignum_mod_raw.c");
+        conf.file("../../ext/mbedtls/library/constant_time.c");
         conf.file("../../ext/mbedtls/library/asn1parse.c");
     }
 
@@ -228,6 +240,7 @@
         conf.conf.include("../../ext/mbedtls/library");
         conf.file("../../ext/mbedtls/library/platform_util.c");
         conf.file("../../ext/mbedtls/library/nist_kw.c");
+        conf.file("../../ext/mbedtls/library/constant_time.c");
         conf.file("../../ext/mbedtls/library/cipher.c");
         conf.file("../../ext/mbedtls/library/cipher_wrap.c");
         conf.file("../../ext/mbedtls/library/aes.c");
@@ -292,6 +305,9 @@
         conf.file("../../ext/mbedtls/library/sha256.c");
         conf.file("../../ext/mbedtls/library/asn1parse.c");
         conf.file("../../ext/mbedtls/library/bignum.c");
+        conf.file("../../ext/mbedtls/library/bignum_core.c");
+        conf.file("../../ext/mbedtls/library/bignum_mod_raw.c");
+        conf.file("../../ext/mbedtls/library/constant_time.c");
         conf.file("../../ext/mbedtls/library/ecdh.c");
         conf.file("../../ext/mbedtls/library/md.c");
         conf.file("../../ext/mbedtls/library/aes.c");
@@ -391,8 +407,7 @@
     conf.conf.include("../../boot/zephyr/include");
     conf.conf.debug(true);
     conf.conf.flag("-Wall");
-    conf.conf.flag("-Werror");
-
+    
     // FIXME: travis-ci still uses gcc 4.8.4 which defaults to std=gnu90.
     // It has incomplete std=c11 and std=c99 support but std=c99 was checked
     // to build correctly so leaving it here to updated in the future...
