diff --git a/bl2/ext/mcuboot/CMakeLists.txt b/bl2/ext/mcuboot/CMakeLists.txt
index f82a738..2dd924b 100644
--- a/bl2/ext/mcuboot/CMakeLists.txt
+++ b/bl2/ext/mcuboot/CMakeLists.txt
@@ -242,13 +242,10 @@
             DEPENDS tfm_s_ns_bin tfm_s_ns.bin
             DEPENDS signing_layout_s
 
-        # Use the non-secure key to sign the combined image if FORWARD_PROT_MSG is set.
-        # In such a configuration there is a subsystem with higher privileges controlling the
-        # the boot process and current implementation requires to use the non-secure key here.
         COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/wrapper/wrapper.py
             -v ${MCUBOOT_IMAGE_VERSION_S}
             --layout $<TARGET_OBJECTS:signing_layout_s>
-            -k $<IF:$<BOOL:${FORWARD_PROT_MSG}>,${MCUBOOT_KEY_NS},${MCUBOOT_KEY_S}>
+            -k ${MCUBOOT_KEY_S}
             --public-key-format $<IF:$<BOOL:${MCUBOOT_HW_KEY}>,full,hash>
             --align ${MCUBOOT_ALIGN_VAL}
             --pad
diff --git a/cmake/install.cmake b/cmake/install.cmake
index a9971de..ff38cfa 100644
--- a/cmake/install.cmake
+++ b/cmake/install.cmake
@@ -60,14 +60,14 @@
             DESTINATION ${INSTALL_INTERFACE_INC_DIR}/tfm/veneers)
 endif()
 
-if (TFM_PARTITION_PROTECTED_STORAGE OR FORWARD_PROT_MSG)
+if (TFM_PARTITION_PROTECTED_STORAGE)
     install(FILES       ${INTERFACE_INC_DIR}/psa/protected_storage.h
             DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa)
     install(FILES       ${INTERFACE_INC_DIR}/tfm_ps_defs.h
             DESTINATION ${INSTALL_INTERFACE_INC_DIR})
 endif()
 
-if (TFM_PARTITION_INTERNAL_TRUSTED_STORAGE OR FORWARD_PROT_MSG)
+if (TFM_PARTITION_INTERNAL_TRUSTED_STORAGE)
     install(FILES       ${INTERFACE_INC_DIR}/psa/internal_trusted_storage.h
                         ${INTERFACE_INC_DIR}/psa/storage_common.h
             DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa)
@@ -75,7 +75,7 @@
             DESTINATION ${INSTALL_INTERFACE_INC_DIR})
 endif()
 
-if (TFM_PARTITION_CRYPTO OR FORWARD_PROT_MSG)
+if (TFM_PARTITION_CRYPTO)
     install(FILES       ${INTERFACE_INC_DIR}/psa/crypto_extra.h
                         ${INTERFACE_INC_DIR}/psa/crypto_compat.h
                         ${INTERFACE_INC_DIR}/psa/crypto.h
@@ -89,7 +89,7 @@
             DESTINATION ${INSTALL_INTERFACE_INC_DIR})
 endif()
 
-if (TFM_PARTITION_INITIAL_ATTESTATION OR FORWARD_PROT_MSG)
+if (TFM_PARTITION_INITIAL_ATTESTATION)
     install(FILES       ${INTERFACE_INC_DIR}/psa/initial_attestation.h
             DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa)
     install(FILES       ${INTERFACE_INC_DIR}/tfm_attest_defs.h
@@ -102,7 +102,7 @@
             DESTINATION ${INSTALL_INTERFACE_INC_DIR})
 endif()
 
-if(TFM_PARTITION_PLATFORM OR FORWARD_PROT_MSG)
+if(TFM_PARTITION_PLATFORM)
     install(FILES       ${INTERFACE_INC_DIR}/tfm_platform_api.h
             DESTINATION ${INSTALL_INTERFACE_INC_DIR})
 endif()
@@ -135,7 +135,7 @@
             DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
 endif()
 
-if (TFM_PARTITION_PROTECTED_STORAGE OR FORWARD_PROT_MSG)
+if (TFM_PARTITION_PROTECTED_STORAGE)
     if (TFM_PSA_API)
         install(FILES       ${INTERFACE_SRC_DIR}/tfm_ps_ipc_api.c
                 DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
@@ -145,7 +145,7 @@
     endif()
 endif()
 
-if (TFM_PARTITION_INTERNAL_TRUSTED_STORAGE OR FORWARD_PROT_MSG)
+if (TFM_PARTITION_INTERNAL_TRUSTED_STORAGE)
     if (TFM_PSA_API)
         install(FILES       ${INTERFACE_SRC_DIR}/tfm_its_ipc_api.c
                 DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
@@ -155,7 +155,7 @@
     endif()
 endif()
 
-if (TFM_PARTITION_CRYPTO OR FORWARD_PROT_MSG)
+if (TFM_PARTITION_CRYPTO)
     if (TFM_PSA_API)
         install(FILES       ${INTERFACE_SRC_DIR}/tfm_crypto_ipc_api.c
                 DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
@@ -165,7 +165,7 @@
     endif()
 endif()
 
-if (TFM_PARTITION_INITIAL_ATTESTATION OR FORWARD_PROT_MSG)
+if (TFM_PARTITION_INITIAL_ATTESTATION)
     if (TFM_PSA_API)
         install(FILES       ${INTERFACE_SRC_DIR}/tfm_initial_attestation_ipc_api.c
                 DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
@@ -180,7 +180,7 @@
             DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
 endif()
 
-if(TFM_PARTITION_PLATFORM OR FORWARD_PROT_MSG)
+if(TFM_PARTITION_PLATFORM)
     if(TFM_PSA_API)
         install(FILES       ${INTERFACE_SRC_DIR}/tfm_platform_ipc_api.c
                 DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
diff --git a/config/config_default.cmake b/config/config_default.cmake
index 80c7fca..7da2bff 100755
--- a/config/config_default.cmake
+++ b/config/config_default.cmake
@@ -159,9 +159,6 @@
 
 set(TFM_PARTITION_AUDIT_LOG             OFF         CACHE BOOL      "Enable Audit Log partition")
 
-set(TFM_PARTITION_PSA_PROXY             OFF         CACHE BOOL      "Enable PSA Proxy partition")
-
-set(FORWARD_PROT_MSG                    OFF         CACHE BOOL      "Whether to forward all PSA RoT messages to a Secure Enclave")
 set(TFM_PARTITION_FIRMWARE_UPDATE       OFF         CACHE BOOL      "Enable firmware update partition")
 set(TFM_FWU_BOOTLOADER_LIB              "mcuboot"   CACHE STRING    "Bootloader configure file for Firmware Update partition")
 set(PSA_FWU_MAX_BLOCK_SIZE              1024        CACHE STRING    "The maximum permitted size for block in psa_fwu_write, in bytes.")
diff --git a/docs/integration_guide/platform/porting_TFM_to_a_new_hardware.rst b/docs/integration_guide/platform/porting_TFM_to_a_new_hardware.rst
index 65f1294..2f4b68b 100644
--- a/docs/integration_guide/platform/porting_TFM_to_a_new_hardware.rst
+++ b/docs/integration_guide/platform/porting_TFM_to_a_new_hardware.rst
@@ -400,11 +400,6 @@
     +----------------------------------+-----------------------------------------------------------------------+-----------------------------------+
     |CMSE_VENEER_REGION_SIZE           | Size of the veneer Code                                               | if library mode and not multicore |
     +----------------------------------+-----------------------------------------------------------------------+-----------------------------------+
-    |PSA_PROXY_SHARED_MEMORY_BASE      | Start of shared memory                                                | if IPC mode and secure enclave    |
-    +----------------------------------+-----------------------------------------------------------------------+-----------------------------------+
-    |PSA_PROXY_SHARED_MEMORY_SIZE      | Size of shared memory                                                 | if IPC mode and secure enclave    |
-    +----------------------------------+-----------------------------------------------------------------------+-----------------------------------+
-
 
 CMSIS_Driver/Config/cmsis_driver_config.h:
 ------------------------------------------
diff --git a/docs/integration_guide/services/index.rst b/docs/integration_guide/services/index.rst
index 4ad012d..e8d2caa 100644
--- a/docs/integration_guide/services/index.rst
+++ b/docs/integration_guide/services/index.rst
@@ -11,7 +11,6 @@
     Internal Storage <tfm_its_integration_guide>
     Platform <tfm_platform_integration_guide>
     Protected Storage <tfm_ps_integration_guide>
-    PSA Proxy <tfm_psa_proxy_integration_guide>
     Adding a New Service <tfm_secure_partition_addition>
     The manifest tool <tfm_manifest_tool_user_guide>
 
diff --git a/docs/integration_guide/services/tfm_psa_proxy_integration_guide.rst b/docs/integration_guide/services/tfm_psa_proxy_integration_guide.rst
deleted file mode 100644
index d0a2f34..0000000
--- a/docs/integration_guide/services/tfm_psa_proxy_integration_guide.rst
+++ /dev/null
@@ -1,85 +0,0 @@
-#####################################
-PSA Proxy Partition Integration Guide
-#####################################
-
-************
-Introduction
-************
-TF-M PSA Proxy partition is responsible for forwarding all the PSA RoT messages
-to a Secure Enclave, this way virtually providing all the PSA RoT services.
-Proxy can only be used in IPC model, for context and design details please
-check the
-:doc:`Secure Enclave design document </technical_references/design_docs/secure_enclave_solution>`.
-
-Currently to forward the PSA Client call parameters Proxy must read them with
-``psa_read`` into a memory area shared with the Secure Enclave. (Similarily
-``psa_write`` is used to give back the results to the caller.) By default this
-memory is allocated from BSS, but if that is not accessible to the Secure
-Enclave other memory area can be used. To communicate with the Secure Enclave
-the mailbox solution is used, and Proxy uses the Non-secure side of mailbox.
-(The secure side of the mailbox is handled by the Secure Enclave.)
-
-***************************************
-Current PSA Proxy partition limitations
-***************************************
-- Client IDs are not forwarded to Secure Enclave. For Non-secure clients this
-  is straightforward, but for calls coming from other secure partitions the IDs
-  must be translated to a negative value. The reason is all clients on Host
-  are treated as non-secure from Secure Enclave's point of view. (This is the
-  cause why Protected Storage messages also forwarded. Protected Storage uses
-  Internal Trusted Storage partition to manage the PS flash area. But as client
-  IDs are not forwarded the ITS partition running on Secure Enclave can not
-  know whether should work on ITS or PS flash.)
-- Sending of the mailbox messages is a blocking call in Proxy, so control is
-  not given back to Host's SPM while waiting for Secure Enclave's answer.
-- Only one message can be put into the mailbox at a time.
-- Current platform partition provides Non Volatile (NV) counter, System Reset,
-  and IOCTL services. But while NV counters and System Reset shall be provided
-  by the Secure Enclave, IOCTL probably shall be provided by Host, as the
-  underlaying HW probably placed in Host subsystem. So the current platform
-  partition should be split into two halves by conditional compilation, and
-  Proxy should forward only the calls provided by Secure Enclave.
-- PSA Proxy can only get the IPC parameters by PSA read, so the parameters need
-  to be copied to a shared memory, because the partition cannot forward the
-  original pointers. This copy might be omitted on platforms where Secure
-  Enclave has access to all Host memory areas, if all security risks are
-  addressed. Note that IOVECs shall be verified by Host's SPM and sent to SE
-  with the mailbox message.
-
-**************
-Code Structure
-**************
-PSA Proxy partition code is located in ``secure_fw/partitions/psa_proxy/``.
-As Proxy can be treated as an alternative implementation of all the PSA RoT
-services, the Secure and Non-secure interface implementations of the forwarded
-services are reused without modification.
-
-Files
-=====
-- ``psa_proxy.c`` - Handles IPC messages and manages communication with the
-  Secure Enclave.
-
-- ``psa_proxy_shared_mem_mngr.c`` - Responsible to manage the shared memory
-  area used to share the input and output parameters with Secure Enclave.
-
-*****************
-Integration Guide
-*****************
-- Non-secure mailbox interface must be provided.
-- Shared memory must be configured:
-
-  - If Secure Enclave can access TF-M's BSS section it is enough to set the
-    area's size by the ``SHARED_BUFFER_SIZE`` macro.
-  - If a special memory region must be used as the shared memory the
-    ``PSA_PROXY_SHARED_MEMORY_BASE`` and ``PSA_PROXY_SHARED_MEMORY_SIZE``
-    macros must be set. (Not just for compilation but for linking as well,
-    becuase these macros used in the linker script/scatter file too.)
-
-- If memories are mapped to different addresses for Host and Secure Enclave
-  address translation can be turned on by setting
-  ``PSA_PROXY_ADDR_TRANSLATION`` macro and implementing the interface defined
-  by ``platform/include/tfm_plat_psa_proxy_addr_trans.h`` header.
-
---------------
-
-*Copyright (c) 2020-2021, Arm Limited. All rights reserved.*
diff --git a/docs/technical_references/design_docs/secure_enclave_solution.rst b/docs/technical_references/design_docs/secure_enclave_solution.rst
deleted file mode 100644
index 669b868..0000000
--- a/docs/technical_references/design_docs/secure_enclave_solution.rst
+++ /dev/null
@@ -1,122 +0,0 @@
-##############################################
-Secure Enclave solution for Trusted Firmware-M
-##############################################
-
-:Author: Mark Horvath
-:Organization: Arm Limited
-:Contact: Mark Horvath <mark.horvath@arm.com>
-
-********
-Abstract
-********
-
-This document summarizes the design goals and one possible implementation
-of the TF-M Secure Enclave solution.
-
-************
-Introduction
-************
-
-If a separate subsystem can provide the PSA Root of Trust (RoT) in a system
-then an additional physical separation exists between the most trusted and
-other domains. In such a system at least two subsystems are present, a Secure
-Enclave (SE) whose only task is to provide PSA RoT and an application core
-where any other application specific functionality can be placed. The latter
-core (or cores) are referred as *Host* in this document.
-
-The current design assumes that Host is a v8-m core with security extension.
-
-************
-Requirements
-************
-
-- Secure Enclave shall implement secure boot-flow (start-up first at reset and
-  validate its own and the Host image or images before release Host from reset)
-- Secure Enclave shall provide the PSA RoT services
-- Host shall provide not just the non-secure context but the Application RoT as
-  well
-- It shall be transparent to the (secure or non-secure) applications running on
-  host whether the RoT services are provided by the same subsystem or by a
-  Secure Enclave.
-
-.. Note::
-
-   In comparison, in a Dual Core system the whole secure context is placed on a
-   separate subsystem, while a Secure Enclave only implements the PSA RoT
-   security domain.
-
-***************
-Proposed design
-***************
-
-As the clients and the services are running on different cores only the IPC
-model can be used on both Secure Enclave and Host.
-
-Secure Enclave
-==============
-
-To provide the required functionality it is enough to run the current PSA RoT
-secure partitions on the Secure Enclave, so no need for non-secure context
-there. (It is enough if the Secure Enclave's architecture is v6-m, v7-m or v8-m
-without the security extension.)
-
-Secure Enclave can treat all clients running on Host as non-secure (even the
-services running on Host's secure side). This means that fom Secure Enclave's
-point of view all Host images, Host's RAM and shared memory between Host and
-Secure Enclave if present are treated as non-secure. (Just like in the Dual CPU
-solution.) But the clients need to be distinguished, otherwise some
-functionalities are not working, for example:
-
-- Protected Storage partition shall run on Host, but the PS area is handled by
-  Internal Trusted Storage partition (running on Secure Enclave). ITS partition
-  decides whether it should work on PS or ITS assets by checking the client ID.
-- If a secure partition on host creates a crypto key, no other client shall be
-  able to destroy it.
-
-Communication
-=============
-
-To communicate between Host and Secure Enclave, the existing mailbox solution
-can be reused as it is.
-
-Host
-====
-
-On Host the current TF-M software architecture can be placed to provide
-non-secure context and Application RoT domain.
-
-One solution to forward a PSA RoT IPC message from a client running on Host to
-the Secure Enclave is to add a proxy partition to the secure side. This PSA
-Proxy partition can provide all the RoT services to the system by forwarding
-the messages over the mailbox solution.
-
-If the new partition's manifest contains all the PSA RoT service IDs SPM will
-deliver all IPC messages there. Then the messages just must be blindly copied
-into the mailbox. PSA proxy can use the non-secure interface of the mailbox,
-but it is placed on the secure side of Host. (From SE's point of view this is
-in fact the non-secure side of the mailbox as whole Host is treated as
-non-secure.)
-
-It is important to verify IOVECs before forwarding them to SE, otherwise a
-malicous actor could use SE to access a memory area otherwise unaccessable. If
-PSA proxy uses the current secure partition interface then this is ensured by
-Host's SPM.
-
-SE treats all clients of Host as non-secure, so all PSA messages shall have a
-negative client ID when pushed into SE's SPM. This is given for the clients on
-the non-secure side of Host, but the secure side clients of Host have positive
-client IDs. The straightforward solution is to translate the positive client
-IDs into a predefined negative range in PSA proxy, and push the translated
-values into the mailbox. Of course this range shall be reserved for this use
-only and no clients on non-secure side of Host shall have client ID from this
-range.
-
-To avoid blocking Host when a message is sent PSA Proxy shall handle the
-service requests in non-blocking mode. And to maximize bandwidth PSA Proxy
-shall be able to push new messages into the mailbox, while others still not
-answered. To achieve these the mailbox interrupts needs to be handled in the
-PSA Proxy partition.
-
---------------
-
-*Copyright (c) 2020-2022, Arm Limited. All rights reserved.*
diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt
index 932dc10..b6c96ac 100644
--- a/interface/CMakeLists.txt
+++ b/interface/CMakeLists.txt
@@ -30,7 +30,7 @@
     INTERFACE
         ${CMAKE_CURRENT_SOURCE_DIR}/include
         ${CMAKE_BINARY_DIR}/generated/interface/include
-        $<$<OR:$<BOOL:${FORWARD_PROT_MSG}>,$<BOOL:${TFM_MULTI_CORE_TOPOLOGY}>>:${CMAKE_CURRENT_SOURCE_DIR}/include/multi_core>
+        $<$<BOOL:${TFM_MULTI_CORE_TOPOLOGY}>:${CMAKE_CURRENT_SOURCE_DIR}/include/multi_core>
 )
 
 # PSA interface files are generated from a template
@@ -50,7 +50,6 @@
         $<$<BOOL:${TFM_ISOLATION_LEVEL}>:TFM_LVL=${TFM_ISOLATION_LEVEL}>
         $<$<BOOL:${CONFIG_TFM_USE_TRUSTZONE}>:CONFIG_TFM_USE_TRUSTZONE>
         $<$<BOOL:${TFM_MULTI_CORE_TOPOLOGY}>:TFM_MULTI_CORE_TOPOLOGY>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:FORWARD_PROT_MSG=${FORWARD_PROT_MSG}>
         $<$<BOOL:${CONFIG_TFM_PARTITION_META}>:CONFIG_TFM_PARTITION_META>
         $<$<BOOL:${CONFIG_TFM_DOORBELL_API}>:CONFIG_TFM_DOORBELL_API=1>
 )
@@ -69,7 +68,7 @@
 
 ###################### Export configurations to NS #############################
 
-if (TFM_MULTI_CORE_TOPOLOGY OR FORWARD_PROT_MSG)
+if (TFM_MULTI_CORE_TOPOLOGY)
     configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/multi_core/tfm_mailbox_config.h.in
                    ${CMAKE_BINARY_DIR}/generated/interface/include/tfm_mailbox_config.h
                    NEWLINE_STYLE UNIX
diff --git a/platform/CMakeLists.txt b/platform/CMakeLists.txt
index 76346cb..e3cd388 100755
--- a/platform/CMakeLists.txt
+++ b/platform/CMakeLists.txt
@@ -272,7 +272,6 @@
         $<$<STREQUAL:${MCUBOOT_SIGNATURE_TYPE},RSA>:MCUBOOT_SIGN_RSA_LEN=${MCUBOOT_SIGNATURE_KEY_LEN}>
         $<$<STREQUAL:${MCUBOOT_EXECUTION_SLOT},2>:LINK_TO_SECONDARY_PARTITION>
         $<$<BOOL:${TEST_PSA_API}>:PSA_API_TEST_${TEST_PSA_API}>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:FORWARD_PROT_MSG=${FORWARD_PROT_MSG}>
         $<$<BOOL:${TFM_CODE_SHARING}>:CODE_SHARING>
         $<$<OR:$<CONFIG:Debug>,$<CONFIG:relwithdebinfo>>:ENABLE_HEAP>
         PLATFORM_NS_NV_COUNTERS=${TFM_NS_NV_COUNTER_AMOUNT}
diff --git a/platform/ext/common/armclang/tfm_common_s.sct b/platform/ext/common/armclang/tfm_common_s.sct
index 3d937a7..cde360c 100644
--- a/platform/ext/common/armclang/tfm_common_s.sct
+++ b/platform/ext/common/armclang/tfm_common_s.sct
@@ -263,12 +263,6 @@
     }
 #endif
 
-#if defined(PSA_PROXY_SHARED_MEMORY_BASE)
-    PSA_PROXY_SHARED_MEMORY PSA_PROXY_SHARED_MEMORY_BASE PSA_PROXY_SHARED_MEMORY_SIZE {
-        *(PSA_PROXY_SHARED_MEMORY_SECTION)
-    }
-#endif
-
 #if defined (S_RAM_CODE_START)
     /* Executable code allocated in RAM */
     TFM_RAM_CODE S_RAM_CODE_START {
diff --git a/platform/ext/common/gcc/tfm_common_s.ld b/platform/ext/common/gcc/tfm_common_s.ld
index 44f59e8..4b216ea 100644
--- a/platform/ext/common/gcc/tfm_common_s.ld
+++ b/platform/ext/common/gcc/tfm_common_s.ld
@@ -31,11 +31,6 @@
 #if defined(S_CODE_SRAM_ALIAS_BASE)
   CODE_RAM (rwx) : ORIGIN = S_CODE_SRAM_ALIAS_BASE, LENGTH = TOTAL_CODE_SRAM_SIZE
 #endif
-
-#if defined(PSA_PROXY_SHARED_MEMORY_BASE)
-  PSA_PROXY_SHARED_MEMORY_RAM (rw) : ORIGIN = PSA_PROXY_SHARED_MEMORY_BASE, LENGTH = PSA_PROXY_SHARED_MEMORY_SIZE
-#endif
-
 }
 
 #if !defined(TFM_PSA_API)
@@ -122,10 +117,6 @@
 
         LONG (ADDR(.TFM_APP_ROT_LINKER_BSS))
         LONG (SIZEOF(.TFM_APP_ROT_LINKER_BSS))
-#if defined(PSA_PROXY_SHARED_MEMORY_BASE)
-        LONG (PSA_PROXY_SHARED_MEMORY_BASE)
-        LONG (PSA_PROXY_SHARED_MEMORY_SIZE)
-#endif
 #if defined(CONFIG_TFM_PARTITION_META)
         LONG (ADDR(.TFM_SP_META_PTR))
         LONG (SIZEOF(.TFM_SP_META_PTR))
@@ -520,17 +511,6 @@
     Image$$ER_TFM_DATA$$Base = ADDR(.TFM_DATA);
     Image$$ER_TFM_DATA$$Limit = ADDR(.TFM_DATA) + SIZEOF(.TFM_DATA) + SIZEOF(.TFM_BSS);
 
-#if defined(PSA_PROXY_SHARED_MEMORY_BASE)
-    /* If a variable defined with __attribute__((section())) keyword the
-     * variable is treated like an initialized variable. To not waste memory
-     * NOLOAD attribute used here. The whole section is zero initialized by
-     * adding section information to .zero.table */
-    .PSA_PROXY_SHARED_MEMORY (NOLOAD) :
-    {
-        KEEP(*(PSA_PROXY_SHARED_MEMORY_SECTION))
-    } > PSA_PROXY_SHARED_MEMORY_RAM
-#endif
-
 #if defined (S_RAM_CODE_START)
     /* Code executed from RAM */
     .TFM_RAM_CODE S_RAM_CODE_START :
diff --git a/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt b/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt
index 14b791d..4faa450 100644
--- a/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt
+++ b/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt
@@ -19,10 +19,6 @@
 
 #========================= Platform common defs ===============================#
 
-if (${CMAKE_C_COMPILER_ID} STREQUAL IAR AND FORWARD_PROT_MSG)
-    message(FATAL_ERROR "IAR is currently not supported if FORWARD_PROT_MSG is set.")
-endif()
-
 # Specify the location of platform specific build dependencies.
 target_sources(tfm_s
     PRIVATE
@@ -74,10 +70,6 @@
     )
 endif()
 
-if(BL0)
-    add_subdirectory(bl0)
-endif()
-
 #========================= Platform Secure ====================================#
 
 target_include_directories(platform_s
@@ -92,15 +84,14 @@
         services/include
         ${CMAKE_MUSCA_B1_COMMON_DIR}/Libraries
         ${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver
-        $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/mailbox>
     INTERFACE
         ${CMAKE_MUSCA_B1_COMMON_DIR}/cc312
 )
 
 target_sources(platform_s
     PRIVATE
-        $<$<NOT:$<BOOL:${FORWARD_PROT_MSG}>>:${CMAKE_MUSCA_B1_COMMON_DIR}/CMSIS_Driver/Driver_QSPI_Flash.c>
-        $<$<NOT:$<BOOL:${FORWARD_PROT_MSG}>>:${CMAKE_MUSCA_B1_COMMON_DIR}/CMSIS_Driver/Driver_GFC100_EFlash.c>
+        ${CMAKE_MUSCA_B1_COMMON_DIR}/CMSIS_Driver/Driver_QSPI_Flash.c
+        ${CMAKE_MUSCA_B1_COMMON_DIR}/CMSIS_Driver/Driver_GFC100_EFlash.c
         CMSIS_Driver/Driver_MPC.c
         CMSIS_Driver/Driver_PPC.c
         CMSIS_Driver/Driver_USART.c
@@ -110,22 +101,16 @@
         Native_Driver/mpu_armv8m_drv.c
         Native_Driver/ppc_sse200_drv.c
         Native_Driver/gpio_cmsdk_drv.c
-        $<$<NOT:$<BOOL:${FORWARD_PROT_MSG}>>:${CMAKE_MUSCA_B1_COMMON_DIR}/Libraries/mt25ql_flash_lib.c>
-        $<$<NOT:$<BOOL:${FORWARD_PROT_MSG}>>:${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver/qspi_ip6514e_drv.c>
-        $<$<NOT:$<BOOL:${FORWARD_PROT_MSG}>>:${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver/gfc100_eflash_drv.c>
-        $<$<NOT:$<BOOL:${FORWARD_PROT_MSG}>>:${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver/musca_b1_eflash_drv.c>
+        ${CMAKE_MUSCA_B1_COMMON_DIR}/Libraries/mt25ql_flash_lib.c
+        ${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver/qspi_ip6514e_drv.c
+        ${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver/gfc100_eflash_drv.c
+        ${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver/musca_b1_eflash_drv.c
         Native_Driver/musca_b1_scc_drv.c
         Native_Driver/ppc_sse200_drv.c
         Native_Driver/uart_pl011_drv.c
         $<$<NOT:$<BOOL:${TEST_NS_SLIH_IRQ}>>:${CMAKE_CURRENT_SOURCE_DIR}/Native_Driver/timer_cmsdk_drv.c>
         $<$<OR:$<BOOL:${TFM_S_REG_TEST}>,$<BOOL:${TFM_NS_REG_TEST}>>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
         $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/mailbox/platform_multicore.c>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/mailbox/platform_ns_mailbox.c>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver/mhu_v2_x.c>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/dummy_nv_counters.c>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/dummy_otp.c>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/dummy_provisioning.c>
 )
 
 target_compile_options(platform_s
@@ -140,14 +125,6 @@
         $<$<BOOL:${TEST_NS_SLIH_IRQ}>:${CMAKE_CURRENT_SOURCE_DIR}/Native_Driver/timer_cmsdk_drv.c>
 )
 
-target_compile_definitions(platform_s
-    PUBLIC
-        $<$<BOOL:${FORWARD_PROT_MSG}>:FORWARD_PROT_MSG=${FORWARD_PROT_MSG}>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:PSA_PROXY_ADDR_TRANSLATION=1>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:LINK_TO_EFLASH1=1>
-        $<$<BOOL:${FORWARD_PROT_MSG}>:USE_SECURE_ENCLAVE_MAILBOX=1>
-)
-
 #========================= Platform Non-Secure ================================#
 
 target_sources(platform_ns
@@ -187,9 +164,6 @@
             ${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver/gfc100_eflash_drv.c
             ${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver/musca_b1_eflash_drv.c
             Native_Driver/musca_b1_scc_drv.c
-            $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/dummy_nv_counters.c>
-            $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/dummy_otp.c>
-            $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/dummy_provisioning.c>
     )
 
     target_include_directories(platform_bl2
diff --git a/platform/ext/target/arm/musca_b1/sse_200/Device/Source/armclang/musca_bl0.sct b/platform/ext/target/arm/musca_b1/sse_200/Device/Source/armclang/musca_bl0.sct
deleted file mode 100644
index c1bdecf..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/Device/Source/armclang/musca_bl0.sct
+++ /dev/null
@@ -1,52 +0,0 @@
-;/*
-; * Copyright (c) 2018-2019 Arm Limited
-; *
-; * 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 "region_defs_bl0.h"
-
-LR_CODE BL0_FLASH_BASE {
-    ER_CODE BL0_FLASH_BASE BL0_FLASH_SIZE {
-        *.o (RESET +First)
-        * (+RO)
-    }
-
-    ER_CODE_SRAM BL0_CODE_SRAM_BASE BL0_CODE_SRAM_SIZE {
-        bl0_main.o (+RO)
-    }
-
-    ER_DATA BL0_DATA_BASE BL0_DATA_SIZE {
-        * (+ZI +RW)
-    }
-
-    /* MSP */
-    ARM_LIB_STACK +0 ALIGN 32 EMPTY BL0_MSP_STACK_SIZE {
-    }
-
-    ARM_LIB_HEAP +0 ALIGN 8 EMPTY BL0_HEAP_SIZE {
-    }
-
-    /* This empty, zero long execution region is here to mark the limit address
-     * of the last execution region that is allocated in SRAM.
-     */
-    SRAM_WATERMARK +0 EMPTY 0x0 {
-    }
-
-    /* Make sure that the sections allocated in the SRAM does not exceed the
-     * size of the SRAM available.
-     */
-    ScatterAssert(ImageLimit(SRAM_WATERMARK) <= BL0_DATA_BASE + BL0_DATA_SIZE)
-}
-
diff --git a/platform/ext/target/arm/musca_b1/sse_200/Device/Source/gcc/musca_bl0.ld b/platform/ext/target/arm/musca_b1/sse_200/Device/Source/gcc/musca_bl0.ld
deleted file mode 100644
index 01bb980..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/Device/Source/gcc/musca_bl0.ld
+++ /dev/null
@@ -1,234 +0,0 @@
-;/*
-; * Copyright (c) 2009-2019 Arm Limited
-; *
-; * 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.
-; */
-
-;/*
-; * This file is derivative of CMSIS V5.00 gcc_arm.ld
-; */
-
-/* Linker script to configure memory regions. */
-/* This file will be run trough the pre-processor. */
-
-#include "region_defs_bl0.h"
-
-MEMORY
-{
-  FLASH (rx)  : ORIGIN = BL0_FLASH_BASE, LENGTH = BL0_FLASH_SIZE
-  CODE_RAM (rwx) : ORIGIN = BL0_CODE_SRAM_BASE, LENGTH = BL0_CODE_SRAM_SIZE
-  RAM   (rwx) : ORIGIN = BL0_DATA_BASE, LENGTH = BL0_DATA_SIZE
-}
-
-__heap_size__  = BL0_HEAP_SIZE;
-__msp_stack_size__ = BL0_MSP_STACK_SIZE;
-
-/* Library configurations */
-GROUP(libgcc.a libc.a libm.a libnosys.a)
-
-/* Linker script to place sections and symbol values. Should be used together
- * with other linker script that defines memory regions FLASH and RAM.
- * It references following symbols, which must be defined in code:
- *   Reset_Handler : Entry of reset handler
- *
- * It defines following symbols, which code can use without definition:
- *   __exidx_start
- *   __exidx_end
- *   __copy_table_start__
- *   __copy_table_end__
- *   __zero_table_start__
- *   __zero_table_end__
- *   __etext
- *   __data_start__
- *   __preinit_array_start
- *   __preinit_array_end
- *   __init_array_start
- *   __init_array_end
- *   __fini_array_start
- *   __fini_array_end
- *   __data_end__
- *   __bss_start__
- *   __bss_end__
- *   __end__
- *   end
- *   __HeapBase
- *   __HeapLimit
- *   __StackLimit
- *   __StackTop
- *   __stack
- *   __Vectors_End
- *   __Vectors_Size
- */
-ENTRY(Reset_Handler)
-
-SECTIONS
-{
-    /* Startup section is loaded to Flash and runs from Flash */
-    .startup :
-    {
-        KEEP(*(.vectors))
-        __Vectors_End = .;
-        __Vectors_Size = __Vectors_End - __Vectors;
-        __end__ = .;
-
-
-        KEEP(*(.init))
-        KEEP(*(.fini))
-
-        *startup_cmsdk_musca_bl2.*
-    } > FLASH
-
-    .ER_CODE_SRAM :
-    {
-        *bl0_main.o(.text*)
-        *bl0_main.o(.rodata*)
-        . = ALIGN(4); /* This alignment is needed to make the section size 4 bytes aligned */
-    } > CODE_RAM AT > FLASH
-    Image$$ER_CODE_SRAM$$Base = ADDR(.ER_CODE_SRAM);
-    Image$$ER_CODE_SRAM$$Limit = ADDR(.ER_CODE_SRAM) + SIZEOF(.ER_CODE_SRAM);
-
-    .text :
-    {
-        *(.text*)
-
-        /* .ctors */
-        *crtbegin.o(.ctors)
-        *crtbegin?.o(.ctors)
-        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
-        *(SORT(.ctors.*))
-        *(.ctors)
-
-        /* .dtors */
-         *crtbegin.o(.dtors)
-         *crtbegin?.o(.dtors)
-         *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
-         *(SORT(.dtors.*))
-         *(.dtors)
-
-        *(.rodata*)
-
-        KEEP(*(.eh_frame*))
-    } > FLASH
-
-    .ARM.extab : ALIGN(32)
-    {
-        *(.ARM.extab* .gnu.linkonce.armextab.*)
-    } > FLASH
-
-    __exidx_start = .;
-    .ARM.exidx :
-    {
-        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
-    } > FLASH
-    __exidx_end = .;
-
-    /* To copy multiple ROM to RAM sections,
-     * define etext2/data2_start/data2_end and
-     * define __STARTUP_COPY_MULTIPLE in startup_cmsdk_mps2_sse_200.S */
-    .copy.table : ALIGN(4)
-    {
-        __copy_table_start__ = .;
-        LONG (__etext)
-        LONG (__data_start__)
-        LONG (__data_end__ - __data_start__)
-        LONG (LOADADDR(.ER_CODE_SRAM))
-        LONG (ADDR(.ER_CODE_SRAM))
-        LONG (SIZEOF(.ER_CODE_SRAM))
-        LONG (DEFINED(__etext2) ? __etext2 : 0)
-        LONG (DEFINED(__data2_start__) ? __data2_start__ : 0)
-        LONG (DEFINED(__data2_start__) ? __data2_end__ - __data2_start__ : 0)
-        __copy_table_end__ = .;
-    } > FLASH
-
-    /* To clear multiple BSS sections,
-     * uncomment .zero.table section and,
-     * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
-    .zero.table : ALIGN(4)
-    {
-        __zero_table_start__ = .;
-        LONG (__bss_start__)
-        LONG (__bss_end__ - __bss_start__)
-        LONG (DEFINED(__bss2_start__) ? __bss2_start__ : 0)
-        LONG (DEFINED(__bss2_start__) ? __bss2_end__ - __bss2_start__ : 0)
-        __zero_table_end__ = .;
-    } > FLASH
-
-    __etext = ALIGN(4);
-
-    .data : ALIGN(4)
-    {
-        __data_start__ = .;
-        *(vtable)
-        *(.data*)
-
-        . = ALIGN(4);
-        /* preinit data */
-        PROVIDE_HIDDEN (__preinit_array_start = .);
-        KEEP(*(.preinit_array))
-        PROVIDE_HIDDEN (__preinit_array_end = .);
-
-        . = ALIGN(4);
-        /* init data */
-        PROVIDE_HIDDEN (__init_array_start = .);
-        KEEP(*(SORT(.init_array.*)))
-        KEEP(*(.init_array))
-        PROVIDE_HIDDEN (__init_array_end = .);
-
-
-        . = ALIGN(4);
-        /* finit data */
-        PROVIDE_HIDDEN (__fini_array_start = .);
-        KEEP(*(SORT(.fini_array.*)))
-        KEEP(*(.fini_array))
-        PROVIDE_HIDDEN (__fini_array_end = .);
-
-        KEEP(*(.jcr*))
-        . = ALIGN(4);
-        /* All data end */
-        __data_end__ = .;
-
-    } > RAM AT> FLASH
-
-    .bss :
-    {
-        . = ALIGN(4);
-        __bss_start__ = .;
-        *(.bss*)
-        *(COMMON)
-        . = ALIGN(4);
-        __bss_end__ = .;
-    } > RAM
-
-    bss_size = __bss_end__ - __bss_start__;
-
-    .msp_stack : ALIGN(32)
-    {
-        . += __msp_stack_size__;
-    } > RAM
-    Image$$ARM_LIB_STACK$$ZI$$Base = ADDR(.msp_stack);
-    Image$$ARM_LIB_STACK$$ZI$$Limit = ADDR(.msp_stack) + SIZEOF(.msp_stack);
-
-    .heap : ALIGN(8)
-    {
-        . = ALIGN(8);
-        __end__ = .;
-        PROVIDE(end = .);
-        __HeapBase = .;
-        . += __heap_size__;
-        __HeapLimit = .;
-        __heap_limit = .; /* Add for _sbrk */
-    } > RAM
-    Image$$ARM_LIB_HEAP$$ZI$$Limit = ADDR(.heap) + SIZEOF(.heap);
-
-    PROVIDE(__stack = Image$$ARM_LIB_STACK$$ZI$$Limit);
-}
diff --git a/platform/ext/target/arm/musca_b1/sse_200/bl0/CMakeLists.txt b/platform/ext/target/arm/musca_b1/sse_200/bl0/CMakeLists.txt
deleted file mode 100644
index c10c954..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/bl0/CMakeLists.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-#-------------------------------------------------------------------------------
-# Copyright (c) 2020-2021, Arm Limited. All rights reserved.
-#
-# SPDX-License-Identifier: BSD-3-Clause
-#
-#-------------------------------------------------------------------------------
-
-cmake_policy(SET CMP0076 NEW)
-set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR})
-
-add_executable(bl0)
-
-target_add_scatter_file(bl0
-        $<$<C_COMPILER_ID:ARMClang>:${CMAKE_MUSCA_B1_SSE_200_SOURCE_DIR}/Device/Source/armclang/musca_bl0.sct>
-        $<$<C_COMPILER_ID:GNU>:${CMAKE_MUSCA_B1_SSE_200_SOURCE_DIR}/Device/Source/gcc/musca_bl0.ld>
-)
-
-target_sources(bl0
-    PRIVATE
-        # Reuse BL2 startup cmsdk
-        $<$<C_COMPILER_ID:ARMClang>:${CMAKE_MUSCA_B1_SSE_200_SOURCE_DIR}/Device/Source/armclang/startup_cmsdk_musca_bl2.s>
-        $<$<C_COMPILER_ID:GNU>:${CMAKE_MUSCA_B1_SSE_200_SOURCE_DIR}/Device/Source/gcc/startup_cmsdk_musca_bl2.S>
-        bl0_main.c
-        ${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver/mhu_v2_x.c
-        ${CMAKE_MUSCA_B1_SSE_200_SOURCE_DIR}/Native_Driver/musca_b1_scc_drv.c
-        ${CMAKE_MUSCA_B1_SSE_200_SOURCE_DIR}/Device/Source/device_definition.c
-        ${CMAKE_MUSCA_B1_SSE_200_SOURCE_DIR}/Device/Source/system_core_init.c
-)
-
-target_include_directories(bl0
-    PUBLIC
-        ${CMAKE_MUSCA_B1_SSE_200_SOURCE_DIR}/Device/Include
-    PRIVATE
-        .
-        ${CMAKE_MUSCA_B1_SSE_200_SOURCE_DIR}/Native_Driver
-        ${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver
-)
-
-target_include_directories(bl0
-    PUBLIC
-        ${CMAKE_SOURCE_DIR}/platform/ext/cmsis
-        ${CMAKE_SOURCE_DIR}/platform/include
-)
-
-target_compile_definitions(bl0
-    PUBLIC
-        $<$<C_COMPILER_ID:GNU>:__STARTUP_CLEAR_BSS_MULTIPLE>
-        $<$<C_COMPILER_ID:GNU>:__STARTUP_COPY_MULTIPLE>
-)
-
-set_target_properties(bl0
-    PROPERTIES
-        SUFFIX ".axf"
-        RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
-)
-
-add_convert_to_bin_target(bl0)
diff --git a/platform/ext/target/arm/musca_b1/sse_200/bl0/bl0_main.c b/platform/ext/target/arm/musca_b1/sse_200/bl0/bl0_main.c
deleted file mode 100644
index bd38017..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/bl0/bl0_main.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2020 Arm Limited
- *
- * 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 "cmsis.h"
-#include "mhu_v2_x.h"
-#include "platform_irq.h"
-#include "platform_regs.h"
-#include "musca_b1_scc_drv.h"
-#include "device_definition.h"
-/*
- * Semihosting is a mechanism that enables code running on an ARM target
- * to communicate and use the Input/Output facilities of a host computer
- * that is running a debugger.
- * There is an issue where if you use armclang at -O0 optimisation with
- * no parameters specified in the main function, the initialisation code
- * contains a breakpoint for semihosting by default. This will stop the
- * code from running before main is reached.
- * Semihosting can be disabled by defining __ARM_use_no_argv symbol
- * (or using higher optimization level).
- */
-#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
-__asm("  .global __ARM_use_no_argv\n");
-#endif
-
-void start_secure_enclave(void);
-void jump_to_vtor(uint32_t addr);
-
-#define AZ_SYS_RESET_VTOR     0xA0
-#define AZ_CODE_RESET_VTOR    0x38
-#define AZ_ROM_RESET_VTOR     0x00
-
-#define AZ_ROM_REMAP_OFFSET   0x1A020000
-#define AZ_ROM_REMAP_MASK     0x0001FFFF
-
-#define AZ_CODE_REMAP_OFFSET  0x1A200000
-#define AZ_CODE_REMAP_MASK    0x003FFFFF
-
-#define AZ_SYS_REMAP_OFFSET   0x52000000
-#define AZ_SYS_REMAP_MASK     0x00FFFFFF
-
-void start_secure_enclave(void)
-{
-    musca_b1_scc_set_az_cpu_vtor(&MUSCA_B1_SCC_DEV_S, AZ_SYS_RESET_VTOR,
-                                 AZ_CODE_RESET_VTOR, AZ_ROM_RESET_VTOR);
-
-    musca_b1_scc_set_az_rom_remap(&MUSCA_B1_SCC_DEV_S, AZ_ROM_REMAP_OFFSET,
-                                  AZ_ROM_REMAP_MASK);
-
-    musca_b1_scc_set_az_code_remap(&MUSCA_B1_SCC_DEV_S, AZ_CODE_REMAP_OFFSET,
-                                   AZ_CODE_REMAP_MASK);
-
-    musca_b1_scc_set_az_sys_remap(&MUSCA_B1_SCC_DEV_S, AZ_SYS_REMAP_OFFSET,
-                                  AZ_SYS_REMAP_MASK);
-
-    musca_b1_scc_enable_az_boot_remap(&MUSCA_B1_SCC_DEV_S);
-
-    musca_b1_scc_az_release_from_reset(&MUSCA_B1_SCC_DEV_S);
-}
-
-int main()
-{
-    uint32_t new_vtor = 0;
-
-    mhu_v2_x_driver_init(&SE_MHU_RECEIVER_DEV, MHU_REV_2_0);
-
-    start_secure_enclave();
-
-    while(!NVIC_GetPendingIRQ(HostMHUR0_IRQ_Reg0_IRQn)) {
-        ;
-    }
-
-    /* Receive the new SSE-200 Reset Vector Address */
-    mhu_v2_x_channel_receive(&SE_MHU_RECEIVER_DEV, 0, &new_vtor);
-    mhu_v2_x_channel_clear(&SE_MHU_RECEIVER_DEV, 0);
-
-    jump_to_vtor(new_vtor);
-}
-
-__attribute__ ((naked)) void jump_to_vtor(uint32_t addr)
-{
-    /* Read the Initial Stack Pointer and the address of the Reset Handler from
-     * the address given as the input argument. Than update the MSP with the
-     * read value and jump to the read Reset Handler.
-     */
-    __asm volatile("LDRD R1, [R0]\n"
-                   "MSR MSP, R1\n"
-                   "BX  R2");
-}
diff --git a/platform/ext/target/arm/musca_b1/sse_200/bl0/device_cfg.h b/platform/ext/target/arm/musca_b1/sse_200/bl0/device_cfg.h
deleted file mode 100644
index eb1fe75..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/bl0/device_cfg.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2018 Arm Limited
- *
- * 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 __ARM_LTD_DEVICE_CFG_H__
-#define __ARM_LTD_DEVICE_CFG_H__
-
-/* MUSCA B1 SCC */
-#define MUSCA_B1_SCC_S
-#define MUSCA_B1_SCC_DEV      MUSCA_B1_SCC_DEV_S
-
-/* CMSDK GPIO */
-#define GPIO0_CMSDK_S
-#define GPIO0_CMSDK_DEV      GPIO0_CMSDK_DEV_S
-
-/* CMSDK Timers */
-#define CMSDK_TIMER0_S
-#define CMSDK_TIMER0_DEV     CMSDK_TIMER0_DEV_S
-
-#define SE_MHU_RECEIVER_S
-#define SE_MHU_RECEIVER_DEV  SE_MHU_RECEIVER_DEV_S
-
-#endif  /* __ARM_LTD_DEVICE_CFG_H__ */
diff --git a/platform/ext/target/arm/musca_b1/sse_200/config.cmake b/platform/ext/target/arm/musca_b1/sse_200/config.cmake
index 0e297bf..d1725d5 100644
--- a/platform/ext/target/arm/musca_b1/sse_200/config.cmake
+++ b/platform/ext/target/arm/musca_b1/sse_200/config.cmake
@@ -14,32 +14,10 @@
 set(CONFIG_TFM_USE_TRUSTZONE            ON          CACHE BOOL      "Enable use of TrustZone to transition between NSPE and SPE")
 set(TFM_MULTI_CORE_TOPOLOGY             OFF         CACHE BOOL      "Whether to build for a dual-cpu architecture")
 
-if (NOT FORWARD_PROT_MSG)
-    set(CRYPTO_HW_ACCELERATOR               ON          CACHE BOOL      "Whether to enable the crypto hardware accelerator on supported platforms")
-    set(CRYPTO_NV_SEED                      OFF         CACHE BOOL      "Use stored NV seed to provide entropy")
-    set(MCUBOOT_DATA_SHARING                ON         CACHE BOOL      "Add sharing of application specific data using the same shared data area as for the measured boot")
-    set(TFM_PARTITION_FIRMWARE_UPDATE       ON         CACHE BOOL      "Enable firmware update partition")
-    set(BL0 OFF)
-else()
-    set(MCUBOOT_IMAGE_NUMBER                1           CACHE STRING    "Whether to combine S and NS into either 1 image, or sign each seperately")
-    set(CONFIG_TFM_BOOT_STORE_MEASUREMENTS  OFF         CACHE BOOL      "Store measurement values from all the boot stages. Used for initial attestation token.")
-    set(TFM_PARTITION_PROTECTED_STORAGE     OFF         CACHE BOOL      "Enable Protected Storage partition")
-    set(TFM_PARTITION_INTERNAL_TRUSTED_STORAGE OFF      CACHE BOOL      "Enable Internal Trusted Storage partition")
-    set(TFM_PARTITION_CRYPTO                OFF         CACHE BOOL      "Enable Crypto partition")
-    set(TFM_PARTITION_INITIAL_ATTESTATION   OFF         CACHE BOOL      "Enable Initial Attestation partition")
-    set(TFM_PARTITION_PLATFORM              OFF         CACHE BOOL      "Enable Platform partition")
-    set(TFM_PARTITION_PSA_PROXY             ON          CACHE BOOL      "Enable PSA Proxy partition")
-
-    set(PLATFORM_DEFAULT_OTP                OFF         CACHE BOOL      "Use trusted on-chip flash to implement OTP memory")
-    set(PLATFORM_DEFAULT_PROVISIONING       OFF         CACHE BOOL      "Use default provisioning implementation")
-    set(PLATFORM_DEFAULT_NV_COUNTERS        OFF         CACHE BOOL      "Use default nv counter implementation.")
-
-    # In case of forwarding, there is no CRYPTO partition compiled,
-    # thus no need for crypto hw accelerator.
-    set(CRYPTO_HW_ACCELERATOR               OFF         CACHE BOOL      "Whether to enable the crypto hardware accelerator on supported platforms")
-    set(PS_TEST_NV_COUNTERS                 OFF         CACHE BOOL      "Use the test NV counters to test Protected Storage rollback scenarios")
-    set(BL0 ON)
-endif()
+set(CRYPTO_HW_ACCELERATOR               ON          CACHE BOOL      "Whether to enable the crypto hardware accelerator on supported platforms")
+set(CRYPTO_NV_SEED                      OFF         CACHE BOOL      "Use stored NV seed to provide entropy")
+set(MCUBOOT_DATA_SHARING                ON         CACHE BOOL      "Add sharing of application specific data using the same shared data area as for the measured boot")
+set(TFM_PARTITION_FIRMWARE_UPDATE       ON         CACHE BOOL      "Enable firmware update partition")
 
 set(TFM_EXTRA_GENERATED_FILE_LIST_PATH  ${CMAKE_SOURCE_DIR}/platform/ext/target/arm/musca_b1/generated_file_list.yaml  CACHE PATH "Path to extra generated file list. Appended to stardard TFM generated file list." FORCE)
 
diff --git a/platform/ext/target/arm/musca_b1/sse_200/dummy_nv_counters.c b/platform/ext/target/arm/musca_b1/sse_200/dummy_nv_counters.c
deleted file mode 100644
index f9fea5b..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/dummy_nv_counters.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2021, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#include "tfm_plat_nv_counters.h"
-
-enum tfm_plat_err_t tfm_plat_init_nv_counter(void)
-{
-    return TFM_PLAT_ERR_SUCCESS;
-}
-
-enum tfm_plat_err_t tfm_plat_read_nv_counter(enum tfm_nv_counter_t counter_id,
-                                             uint32_t size, uint8_t *val)
-{
-    return TFM_PLAT_ERR_UNSUPPORTED;
-}
-
-enum tfm_plat_err_t tfm_plat_increment_nv_counter(
-                                              enum tfm_nv_counter_t counter_id)
-{
-    return TFM_PLAT_ERR_UNSUPPORTED;
-}
-
-enum tfm_plat_err_t tfm_plat_set_nv_counter(enum tfm_nv_counter_t counter_id,
-                                            uint32_t value)
-{
-    return TFM_PLAT_ERR_UNSUPPORTED;
-}
diff --git a/platform/ext/target/arm/musca_b1/sse_200/dummy_otp.c b/platform/ext/target/arm/musca_b1/sse_200/dummy_otp.c
deleted file mode 100644
index 695497c..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/dummy_otp.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2021, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#include "tfm_plat_otp.h"
-
-enum tfm_plat_err_t tfm_plat_otp_init(void)
-{
-    return TFM_PLAT_ERR_SUCCESS;
-}
-
-enum tfm_plat_err_t tfm_plat_otp_read(enum tfm_otp_element_id_t id,
-                                      size_t out_len, uint8_t *out)
-{
-    return TFM_PLAT_ERR_UNSUPPORTED;
-}
-
-enum tfm_plat_err_t tfm_plat_otp_write(enum tfm_otp_element_id_t id,
-                                       size_t in_len, const uint8_t *in)
-{
-    return TFM_PLAT_ERR_UNSUPPORTED;
-}
-
-enum tfm_plat_err_t tfm_plat_otp_get_size(enum tfm_otp_element_id_t id,
-                                          size_t *size)
-{
-    return TFM_PLAT_ERR_UNSUPPORTED;
-}
diff --git a/platform/ext/target/arm/musca_b1/sse_200/dummy_provisioning.c b/platform/ext/target/arm/musca_b1/sse_200/dummy_provisioning.c
deleted file mode 100644
index 1342c85..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/dummy_provisioning.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 2021, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#include "tfm_plat_provisioning.h"
-
-int tfm_plat_provisioning_is_required(void)
-{
-    return 0;
-}
-
-enum tfm_plat_err_t tfm_plat_provisioning_perform(void)
-{
-    return TFM_PLAT_ERR_SUCCESS;
-}
-
-void tfm_plat_provisioning_check_for_dummy_keys(void)
-{
-}
diff --git a/platform/ext/target/arm/musca_b1/sse_200/mailbox/platform_multicore.c b/platform/ext/target/arm/musca_b1/sse_200/mailbox/platform_multicore.c
deleted file mode 100644
index 1c482d7..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/mailbox/platform_multicore.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "platform_multicore.h"
-#include "cmsis.h"
-#include "mhu_v2_x.h"
-#include "device_definition.h"
-#include "tfm_plat_psa_proxy_addr_trans.h"
-
-#define SE_MEM_BASE         (0x38000000)
-#define HOST_MEM_BASE       (0x1A200000)
-
-int tfm_platform_ns_wait_for_s_cpu_ready(void)
-{
-    mhu_v2_x_driver_init(&SE_MHU_SENDER_DEV, MHU_REV_2_0);
-    mhu_v2_x_driver_init(&SE_MHU_RECEIVER_DEV, MHU_REV_2_0);
-
-    platform_mailbox_send_msg_data(IPC_SYNC_MAGIC);
-
-    return PLATFORM_MAILBOX_SUCCESS;
-}
-
-int platform_mailbox_send_msg_data(uint32_t data)
-{
-    mhu_v2_x_initiate_transfer(&SE_MHU_SENDER_DEV);
-    mhu_v2_x_channel_send(&SE_MHU_SENDER_DEV, 0, data);
-    mhu_v2_x_close_transfer(&SE_MHU_SENDER_DEV);
-
-    return PLATFORM_MAILBOX_SUCCESS;
-}
-
-int platform_mailbox_send_msg_ptr(const void *msg_ptr)
-{
-    mhu_v2_x_initiate_transfer(&SE_MHU_SENDER_DEV);
-    mhu_v2_x_channel_send(&SE_MHU_SENDER_DEV, 0, (uint32_t)msg_ptr);
-    mhu_v2_x_close_transfer(&SE_MHU_SENDER_DEV);
-
-    return PLATFORM_MAILBOX_SUCCESS;
-}
-
-void platform_mailbox_wait_for_notify(void)
-{
-    while(NVIC_GetPendingIRQ(HostMHUR0_IRQComb_IRQn) == 0);
-}
-
-int platform_mailbox_fetch_msg_data(uint32_t *data_ptr)
-{
-    mhu_v2_x_channel_receive(&SE_MHU_RECEIVER_DEV, 0, data_ptr);
-    mhu_v2_x_channel_clear(&SE_MHU_RECEIVER_DEV, 0);
-
-    NVIC_ClearPendingIRQ(HostMHUR0_IRQComb_IRQn);
-
-    return PLATFORM_MAILBOX_SUCCESS;
-}
-
-void * translate_addr_from_host_to_se(void *addr)
-{
-    return (addr + SE_MEM_BASE - HOST_MEM_BASE);
-}
-
-void * translate_addr_from_se_to_host(void *addr)
-{
-    return (addr + HOST_MEM_BASE - SE_MEM_BASE);
-}
diff --git a/platform/ext/target/arm/musca_b1/sse_200/mailbox/platform_multicore.h b/platform/ext/target/arm/musca_b1/sse_200/mailbox/platform_multicore.h
deleted file mode 100644
index cd6fa9a..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/mailbox/platform_multicore.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef _PLATFORM_MULTICORE_H_
-#define _PLATFORM_MULTICORE_H_
-
-#include <stdint.h>
-
-/* Arbitrary predefined values to sync between Host and Secure Enclave */
-#define IPC_SYNC_MAGIC                   (0x7DADE011)
-
-#define NS_MAILBOX_INIT_ENABLE           (0xAE)
-#define S_MAILBOX_READY                  (0xC3)
-
-#define PSA_CLIENT_CALL_REQ_MAGIC        (0xA5CF50C6)
-
-#define PLATFORM_MAILBOX_SUCCESS         (0x0)
-
-/**
- * \brief Fetch a data value from mailbox message
- *
- * \param[out] data_ptr    The address to write the pointer value to.
- *
- * \retval 0               The operation succeeds.
- * \retval else            The operation fails.
- */
-int platform_mailbox_fetch_msg_data(uint32_t *data_ptr);
-
-/**
- * \brief Send a pointer via mailbox message
- *
- * \param[in] msg_ptr      The pointer value to be sent.
- *
- * \retval 0               The operation succeeds.
- * \retval else            The operation fails.
- */
-int platform_mailbox_send_msg_ptr(const void *msg_ptr);
-
-/**
- * \brief Send a data value via mailbox message
- *
- * \param[in] data         The data value to be sent
- *
- * \retval 0               The operation succeeds.
- * \retval else            The operation fails.
- */
-int platform_mailbox_send_msg_data(uint32_t data);
-
-/**
- * \brief Wait for a mailbox notify event.
- */
-void platform_mailbox_wait_for_notify(void);
-
-#endif /* _PLATFORM_MULTICORE_H_ */
diff --git a/platform/ext/target/arm/musca_b1/sse_200/mailbox/platform_ns_mailbox.c b/platform/ext/target/arm/musca_b1/sse_200/mailbox/platform_ns_mailbox.c
deleted file mode 100644
index 1b25412..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/mailbox/platform_ns_mailbox.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <stdint.h>
-
-#include "platform_multicore.h"
-#include "tfm_ns_mailbox.h"
-#include "tfm_plat_psa_proxy_addr_trans.h"
-
-int32_t tfm_ns_mailbox_hal_notify_peer(void)
-{
-    platform_mailbox_send_msg_data(PSA_CLIENT_CALL_REQ_MAGIC);
-
-    return MAILBOX_SUCCESS;
-}
-
-int32_t tfm_ns_mailbox_hal_init(struct ns_mailbox_queue_t *queue)
-{
-    uint32_t stage;
-
-    if (!queue) {
-        return MAILBOX_INVAL_PARAMS;
-    }
-
-    /* Wait until SPE mailbox library is ready to receive NSPE mailbox queue
-     * address.
-     */
-    while (1) {
-        platform_mailbox_wait_for_notify();
-
-        platform_mailbox_fetch_msg_data(&stage);
-        if (stage == NS_MAILBOX_INIT_ENABLE) {
-            break;
-        }
-    }
-
-    /* Send out the address */
-    platform_mailbox_send_msg_ptr(
-            (const void *)translate_addr_from_host_to_se(queue));
-
-    /* Wait until SPE mailbox service is ready */
-    while (1) {
-        platform_mailbox_wait_for_notify();
-
-        platform_mailbox_fetch_msg_data(&stage);
-        if (stage == S_MAILBOX_READY) {
-            break;
-        }
-    }
-
-    return MAILBOX_SUCCESS;
-}
-
-void tfm_ns_mailbox_hal_enter_critical(void)
-{
-    /* Protection against concurrent access should be added
-     * if more messages are sent parallel.
-     */
-}
-
-void tfm_ns_mailbox_hal_exit_critical(void)
-{
-    /* Protection against concurrent access should be added
-     * if more messages are sent parallel.
-     */
-}
-
-void tfm_ns_mailbox_hal_enter_critical_isr(void)
-{
-    /* Protection against concurrent access should be added
-     * if more messages are sent parallel.
-     */
-}
-
-void tfm_ns_mailbox_hal_exit_critical_isr(void)
-{
-    /* Protection against concurrent access should be added
-     * if more messages are sent parallel.
-     */
-}
diff --git a/platform/ext/target/arm/musca_b1/sse_200/partition/flash_layout.h b/platform/ext/target/arm/musca_b1/sse_200/partition/flash_layout.h
index 350117d..6916023 100644
--- a/platform/ext/target/arm/musca_b1/sse_200/partition/flash_layout.h
+++ b/platform/ext/target/arm/musca_b1/sse_200/partition/flash_layout.h
@@ -18,11 +18,7 @@
 #ifndef __FLASH_LAYOUT_H__
 #define __FLASH_LAYOUT_H__
 
-#ifndef FORWARD_PROT_MSG
-/* Flash layouts if FORWARD_PROT_MSG is OFF
- *
- *
- * Flash layout on Musca-B1 with BL2 (multiple image boot, boot from eFlash 0):
+/* Flash layout on Musca-B1 with BL2 (multiple image boot, boot from eFlash 0):
  *
  * 0x0A00_0000 BL2 - MCUBoot (128 KB)
  * 0x0A02_0000 Secure image     primary slot (384 KB)
@@ -235,76 +231,4 @@
 #define TOTAL_ROM_SIZE FLASH_TOTAL_SIZE
 #define TOTAL_RAM_SIZE (0x80000)     /* 512 KB */
 
-#else /* FORWARD_PROT_MSG */
-
-/* Flash layout information if FORWARD_PROT_MSG is ON.
- * For information you can check Musca-B1 Secure Enclave's flash_layout.h
- */
-
-#define FLASH_S_PARTITION_SIZE          (0x30000) /* S partition: 192 KB */
-#define FLASH_NS_PARTITION_SIZE         (0x50000) /* NS partition: 320 KB */
-
-/* Offset and size definition in flash area used by assemble.py */
-#define SECURE_IMAGE_OFFSET             (0x0)
-#define SECURE_IMAGE_MAX_SIZE           FLASH_S_PARTITION_SIZE
-
-#define NON_SECURE_IMAGE_OFFSET         (SECURE_IMAGE_OFFSET + \
-                                         SECURE_IMAGE_MAX_SIZE)
-#define NON_SECURE_IMAGE_MAX_SIZE       FLASH_NS_PARTITION_SIZE
-
-/* Image placed in eFlash 1 */
-#define FLASH_BASE_ADDRESS              (0x1A200000)
-
-#if (MCUBOOT_IMAGE_NUMBER != 1)
-#error "If FORWARD_PROT_MSG is ON MCUBOOT_IMAGE_NUMBER must be 1"
-#endif
-
-/* Secure + Non-secure image primary slot */
-#define FLASH_AREA_0_ID            (1)
-#define FLASH_AREA_0_OFFSET        (0x60000) /* Address comes from SE */
-#define FLASH_AREA_0_SIZE          (FLASH_S_PARTITION_SIZE + \
-                                    FLASH_NS_PARTITION_SIZE)
-/* Secure + Non-secure secondary slot */
-#define FLASH_AREA_2_ID            (FLASH_AREA_0_ID + 1)
-#define FLASH_AREA_2_OFFSET        (0x160000) /* Address comes from SE */
-#define FLASH_AREA_2_SIZE          (FLASH_S_PARTITION_SIZE + \
-                                    FLASH_NS_PARTITION_SIZE)
-
-/* Image placed in eFlash 1 */
-#define S_ROM_ALIAS_BASE    (0x1A200000)
-#define NS_ROM_ALIAS_BASE   (0x0A200000)
-
-#define S_RAM_ALIAS_BASE    (0x30000000)
-#define NS_RAM_ALIAS_BASE   (0x20000000)
-
-#define TOTAL_RAM_SIZE      (0x80000)     /* 512 KB */
-
-/* Macros needed for BL2 build with dummy values.
- * This BL2 instance is not used, but the BL2 macro needs to be set, and this
- * macro and BL2 build is entangled. If this is fixed the following macros can
- * be deleted.
- */
-#define FLASH_AREA_IMAGE_SECTOR_SIZE    0
-
-#define MCUBOOT_STATUS_MAX_ENTRIES      0
-#define MCUBOOT_MAX_IMG_SECTORS         32
-
-#define FLASH_AREA_SCRATCH_ID           0
-#define FLASH_AREA_SCRATCH_OFFSET       0
-#define FLASH_AREA_SCRATCH_SIZE         0
-
-#define FLASH_DEV_NAME                  Driver_EFLASH0
-/* Smallest flash programmable unit in bytes */
-#define TFM_HAL_FLASH_PROGRAM_UNIT       (0x4)
-
-#define FLASH_AREA_BL2_OFFSET           0
-#define FLASH_AREA_BL2_SIZE             0x20000
-
-#define TFM_NV_COUNTERS_AREA_ADDR       0
-#define TFM_NV_COUNTERS_AREA_SIZE       8
-#define TFM_NV_COUNTERS_SECTOR_ADDR     0
-#define TFM_NV_COUNTERS_SECTOR_SIZE     8
-
-#endif /* FORWARD_PROT_MSG */
-
 #endif /* __FLASH_LAYOUT_H__ */
diff --git a/platform/ext/target/arm/musca_b1/sse_200/partition/region_defs.h b/platform/ext/target/arm/musca_b1/sse_200/partition/region_defs.h
index e404475..90a1964 100755
--- a/platform/ext/target/arm/musca_b1/sse_200/partition/region_defs.h
+++ b/platform/ext/target/arm/musca_b1/sse_200/partition/region_defs.h
@@ -109,12 +109,6 @@
 /* Size of vector table: 143 interrupt handlers + 4 bytes MPS initial value */
 #define S_CODE_VECTOR_TABLE_SIZE    (0x240)
 
-/* Shared memory used by PSA Proxy partition */
-#ifdef TFM_PARTITION_PSA_PROXY
-#define PSA_PROXY_SHARED_MEMORY_BASE (0x1A408000)
-#define PSA_PROXY_SHARED_MEMORY_SIZE (0x00078000) /* 476 KiB */
-#endif /* TFM_PARTITION_PSA_PROXY */
-
 /* Non-secure regions */
 #define NS_IMAGE_PRIMARY_AREA_OFFSET \
                         (NS_IMAGE_PRIMARY_PARTITION_OFFSET + BL2_HEADER_SIZE)
diff --git a/platform/ext/target/arm/musca_b1/sse_200/partition/region_defs_bl0.h b/platform/ext/target/arm/musca_b1/sse_200/partition/region_defs_bl0.h
deleted file mode 100644
index 9654cc8..0000000
--- a/platform/ext/target/arm/musca_b1/sse_200/partition/region_defs_bl0.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2017-2020 Arm Limited. All rights reserved.
- *
- * 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 __REGION_DEFS_BL0_H__
-#define __REGION_DEFS_BL0_H__
-
-#define BL0_HEAP_SIZE           (0x0000100)
-#define BL0_MSP_STACK_SIZE      (0x0000800)
-
-/* Code SRAM area */
-#define S_CODE_SRAM_ALIAS_BASE   (0x1A400000)
-
-/* SRAM area */
-#define S_RAM_ALIAS_BASE         (0x30000000)
-
-/* FLASH area */
-#define FLASH_BASE_ADDRESS       (0x1A000000)
-
-/* BL0 preloader regions */
-#define BL0_FLASH_BASE           FLASH_BASE_ADDRESS
-#define BL0_FLASH_SIZE           (0x00002000) /* 8 KB */
-#define BL0_CODE_SRAM_BASE       S_CODE_SRAM_ALIAS_BASE
-#define BL0_CODE_SRAM_SIZE       (0x00002000) /* 8 KB */
-#define BL0_DATA_BASE            S_RAM_ALIAS_BASE
-#define BL0_DATA_SIZE            (0x00004000) /* 16 KB */
-
-#endif /* __REGION_DEFS_BL0_H__ */
diff --git a/platform/include/tfm_plat_psa_proxy_addr_trans.h b/platform/include/tfm_plat_psa_proxy_addr_trans.h
deleted file mode 100644
index 05f8e1f..0000000
--- a/platform/include/tfm_plat_psa_proxy_addr_trans.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#ifndef __TFM_PLAT_PSA_PROXY_H__
-#define __TFM_PLAT_PSA_PROXY_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \brief Translates an address from Host to Secure Enclave
- *
- * \param[in]  addr    The address to be translated
- *
- * \return Returns the translated pointer
- */
-void* translate_addr_from_host_to_se(void *addr);
-
-/**
- * \brief Translates an address from Secure Enclave to Host
- *
- * \param[in]  addr    The address to be translated
- *
- * \return Returns the translated pointer
- */
-void* translate_addr_from_se_to_host(void *addr);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __TFM_PLAT_PSA_PROXY_H__ */
diff --git a/secure_fw/partitions/CMakeLists.txt b/secure_fw/partitions/CMakeLists.txt
index 8ca73f3..97add7d 100644
--- a/secure_fw/partitions/CMakeLists.txt
+++ b/secure_fw/partitions/CMakeLists.txt
@@ -27,7 +27,6 @@
 add_subdirectory(protected_storage)
 add_subdirectory(internal_trusted_storage)
 add_subdirectory(platform)
-add_subdirectory(psa_proxy)
 add_subdirectory(firmware_update)
 add_subdirectory(ns_agent_tz)
 add_subdirectory(ns_agent_mailbox)
diff --git a/secure_fw/partitions/initial_attestation/CMakeLists.txt b/secure_fw/partitions/initial_attestation/CMakeLists.txt
index 8287df8..cfab196 100644
--- a/secure_fw/partitions/initial_attestation/CMakeLists.txt
+++ b/secure_fw/partitions/initial_attestation/CMakeLists.txt
@@ -6,14 +6,6 @@
 #-------------------------------------------------------------------------------
 
 if (NOT TFM_PARTITION_INITIAL_ATTESTATION)
-    if(TFM_PARTITION_PSA_PROXY)
-        add_library(tfm_attestation_defs INTERFACE)
-
-        target_include_directories(tfm_attestation_defs
-            INTERFACE
-                .
-        )
-    endif()
     return()
 endif()
 
diff --git a/secure_fw/partitions/protected_storage/CMakeLists.txt b/secure_fw/partitions/protected_storage/CMakeLists.txt
index 7feb086..ff56c15 100644
--- a/secure_fw/partitions/protected_storage/CMakeLists.txt
+++ b/secure_fw/partitions/protected_storage/CMakeLists.txt
@@ -6,14 +6,6 @@
 #-------------------------------------------------------------------------------
 
 if (NOT TFM_PARTITION_PROTECTED_STORAGE)
-    if(TFM_PARTITION_PSA_PROXY)
-        add_library(tfm_app_rot_partition_ps INTERFACE)
-
-        target_include_directories(tfm_app_rot_partition_ps
-            INTERFACE
-                $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
-        )
-    endif()
     return()
 endif()
 
diff --git a/secure_fw/partitions/psa_proxy/CMakeLists.txt b/secure_fw/partitions/psa_proxy/CMakeLists.txt
deleted file mode 100644
index fe4c46f..0000000
--- a/secure_fw/partitions/psa_proxy/CMakeLists.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-#-------------------------------------------------------------------------------
-# Copyright (c) 2020-2022, Arm Limited. All rights reserved.
-#
-# SPDX-License-Identifier: BSD-3-Clause
-#
-#-------------------------------------------------------------------------------
-
-if(NOT TFM_PARTITION_PSA_PROXY)
-    return()
-endif()
-
-cmake_minimum_required(VERSION 3.15)
-cmake_policy(SET CMP0079 NEW)
-
-add_library(tfm_psa_rot_partition_psa_proxy STATIC)
-
-# Set include directory
-target_include_directories(tfm_psa_rot_partition_psa_proxy
-    INTERFACE
-        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
-        ${CMAKE_BINARY_DIR}/generated/secure_fw/partitions/psa_proxy
-    PUBLIC
-        # Required for spm_ipc.h
-        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/../../spm/cmsis_psa
-)
-target_include_directories(tfm_partitions
-    INTERFACE
-        ${CMAKE_BINARY_DIR}/generated/secure_fw/partitions/psa_proxy
-)
-
-target_sources(tfm_psa_rot_partition_psa_proxy
-    PRIVATE
-        psa_proxy.c
-        psa_proxy_shared_mem_mngr.c
-        ../../../interface/src/multi_core/tfm_ns_mailbox.c
-)
-
-# The generated sources
-target_sources(tfm_psa_rot_partition_psa_proxy
-    PRIVATE
-        ${CMAKE_BINARY_DIR}/generated/secure_fw/partitions/psa_proxy/auto_generated/intermedia_tfm_psa_proxy.c
-)
-target_sources(tfm_partitions
-    INTERFACE
-        ${CMAKE_BINARY_DIR}/generated/secure_fw/partitions/psa_proxy/auto_generated/load_info_tfm_psa_proxy.c
-)
-
-target_link_libraries(tfm_psa_rot_partition_psa_proxy
-    PRIVATE
-        tfm_sprt
-        secure_fw
-        platform_s
-)
-
-############################ Secure API ########################################
-
-target_sources(tfm_sprt
-    PRIVATE
-        ../crypto/tfm_crypto_secure_api.c
-        ../initial_attestation/tfm_attest_secure_api.c
-        ../internal_trusted_storage/tfm_its_secure_api.c
-        ../platform/tfm_platform_secure_api.c
-        ../protected_storage/tfm_ps_secure_api.c
-)
-
-# The veneers give warnings about not being properly declared so they get hidden
-# to not overshadow _real_ warnings.
-set_source_files_properties(tfm_ps_secure_api.c
-    PROPERTIES
-        COMPILE_FLAGS
-            $<$<C_COMPILER_ID:ARMClang>:-Wno-implicit-function-declaration>
-            $<$<C_COMPILER_ID:GNU>:-Wno-implicit-function-declaration>
-            $<$<C_COMPILER_ID:IAR>:>
-)
-
-############################ Partition Defs ####################################
-
-target_link_libraries(tfm_partitions
-    INTERFACE
-        tfm_psa_rot_partition_psa_proxy
-)
-
-target_compile_definitions(tfm_partition_defs
-    INTERFACE
-        TFM_PARTITION_PSA_PROXY
-)
diff --git a/secure_fw/partitions/psa_proxy/dir_psa_proxy.dox b/secure_fw/partitions/psa_proxy/dir_psa_proxy.dox
deleted file mode 100644
index 5ef7661..0000000
--- a/secure_fw/partitions/psa_proxy/dir_psa_proxy.dox
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-//This file holds description for the current directory. This documentation
-//will be included in the Doxygen output.
-
-/*!
-\dir
-\brief Source code for the PSA Proxy service.
-\details The PSA Proxy service can forward IPC messages to a Secure Enclave.
-
-*/
\ No newline at end of file
diff --git a/secure_fw/partitions/psa_proxy/psa_proxy.c b/secure_fw/partitions/psa_proxy/psa_proxy.c
deleted file mode 100644
index 29408f4..0000000
--- a/secure_fw/partitions/psa_proxy/psa_proxy.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2020-2022, Arm Limited. All rights reserved.
- * Copyright (c) 2021, Cypress Semiconductor Corporation. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#include <stdint.h>
-
-#include "psa/service.h"
-#include "psa_manifest/tfm_psa_proxy.h"
-#include "tfm_pools.h"
-#include "psa_manifest/sid.h"
-#include "tfm_multi_core_api.h"
-#include "tfm_ns_mailbox.h"
-#include "psa_proxy_shared_mem_mngr.h"
-
-#define NON_SECURE_CLIENT_ID            (-1)
-
-/* Maximum number of connections supported, should be platform/configuration
- * specific */
-#define SE_CONN_MAX_NUM                 (16)
-
-TFM_POOL_DECLARE(forward_handle_pool, sizeof(psa_handle_t),
-                 SE_CONN_MAX_NUM);
-
-static inline void init_forward_handle_pool(void)
-{
-    tfm_pool_init(forward_handle_pool,
-                  POOL_BUFFER_SIZE(forward_handle_pool),
-                  sizeof(psa_handle_t),
-                  SE_CONN_MAX_NUM);
-}
-
-static inline psa_handle_t * allocate_forward_handle(void)
-{
-    return (psa_handle_t *) tfm_pool_alloc(forward_handle_pool);
-}
-
-static inline void deallocate_forward_handle(psa_handle_t *h)
-{
-    tfm_pool_free(forward_handle_pool, h);
-}
-
-static psa_status_t forward_message_to_secure_enclave(psa_signal_t signal,
-                                                       const psa_msg_t *msg)
-{
-    psa_status_t status;
-    struct psa_client_params_t params;
-    int32_t ret;
-
-    /* Use stateless handle for stateless services. */
-    switch (signal) {
-    case TFM_CRYPTO_SIGNAL:
-        params.psa_call_params.handle = TFM_CRYPTO_HANDLE;
-        params.psa_call_params.type = msg->type;
-        break;
-    case TFM_PROTECTED_STORAGE_SERVICE_SIGNAL:
-        params.psa_call_params.handle = TFM_PROTECTED_STORAGE_SERVICE_HANDLE;
-        params.psa_call_params.type = msg->type;
-        break;
-    case TFM_INTERNAL_TRUSTED_STORAGE_SERVICE_SIGNAL:
-        params.psa_call_params.handle =
-                                TFM_INTERNAL_TRUSTED_STORAGE_SERVICE_HANDLE;
-        params.psa_call_params.type = msg->type;
-        break;
-    case TFM_ATTESTATION_SERVICE_SIGNAL:
-        params.psa_call_params.handle = TFM_ATTESTATION_SERVICE_HANDLE;
-        params.psa_call_params.type = msg->type;
-        break;
-    case TFM_PLATFORM_SERVICE_SIGNAL:
-        params.psa_call_params.handle = TFM_PLATFORM_SERVICE_HANDLE;
-        params.psa_call_params.type = msg->type;
-        break;
-    default:
-        params.psa_call_params.handle = *((psa_handle_t *)msg->rhandle);
-        params.psa_call_params.type = PSA_IPC_CALL;
-        break;
-    }
-
-    status = psa_proxy_put_msg_into_shared_mem(msg, &params);
-
-    if (status != PSA_SUCCESS) {
-        return status;
-    }
-
-    ret = tfm_ns_mailbox_client_call(MAILBOX_PSA_CALL, &params,
-                                     NON_SECURE_CLIENT_ID, (int32_t *)&status);
-    if (ret != MAILBOX_SUCCESS) {
-        status = PSA_ERROR_COMMUNICATION_FAILURE;
-    }
-
-    if (status == PSA_SUCCESS) {
-        psa_proxy_write_back_results_from_shared_mem(msg);
-    }
-
-    return status;
-}
-
-static void handle_signal(psa_signal_t signal)
-{
-    psa_msg_t msg;
-    psa_status_t status;
-
-    status = psa_get(signal, &msg);
-
-    status = forward_message_to_secure_enclave(signal, &msg);
-    psa_reply(msg.handle, status);
-}
-
-static psa_status_t psa_proxy_init(void)
-{
-    int32_t ret;
-
-    if (tfm_platform_ns_wait_for_s_cpu_ready()) {
-        return PSA_ERROR_HARDWARE_FAILURE;
-    }
-
-    ret = tfm_ns_mailbox_init(psa_proxy_get_ns_mailbox_queue());
-    if (ret != MAILBOX_SUCCESS) {
-        return PSA_ERROR_GENERIC_ERROR;
-    }
-
-    init_forward_handle_pool();
-
-    return PSA_SUCCESS;
-}
-
-psa_status_t psa_proxy_sp_init(void)
-{
-    psa_signal_t signal;
-    psa_status_t err;
-
-    err = psa_proxy_init();
-    if ( err != PSA_SUCCESS ) {
-        psa_panic();
-    }
-
-    while (1) {
-        /* Control is given back to SPM */
-        signal = psa_wait(PSA_WAIT_ANY, PSA_BLOCK);
-        if (signal == TFM_PROXY_DUMMY_SIGNAL) {
-            psa_panic();
-        }
-
-        handle_signal(signal);
-    }
-
-    return PSA_SUCCESS;
-}
diff --git a/secure_fw/partitions/psa_proxy/psa_proxy_shared_mem_mngr.c b/secure_fw/partitions/psa_proxy/psa_proxy_shared_mem_mngr.c
deleted file mode 100644
index 68eeee8..0000000
--- a/secure_fw/partitions/psa_proxy/psa_proxy_shared_mem_mngr.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
- * Copyright (c) 2021, Cypress Semiconductor Corporation. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#include "psa_proxy_shared_mem_mngr.h"
-#include "region_defs.h"
-#include "psa/service.h"
-#ifdef PSA_PROXY_ADDR_TRANSLATION
-#include "tfm_plat_psa_proxy_addr_trans.h"
-#endif
-
-/* If a dedicated region used for memory sharing maximum buffer size calculated
- * here. Otherwise the buffer size must be defined.
- */
-#ifdef PSA_PROXY_SHARED_MEMORY_SIZE
-#define SHARED_BUFFER_SIZE (PSA_PROXY_SHARED_MEMORY_SIZE - \
-                           sizeof(struct ns_mailbox_queue_t) - \
-                           (sizeof(psa_invec) * PSA_MAX_IOVEC)- \
-                           (sizeof(psa_outvec) * PSA_MAX_IOVEC))
-#else
-#ifndef SHARED_BUFFER_SIZE
-#error "PSA_PROXY_SHARED_MEMORY_SIZE or SHARED_BUFFER_SIZE should be defined"
-#endif
-#endif
-
-struct shared_mem_t {
-    struct ns_mailbox_queue_t ns_mailbox_queue;
-    psa_invec in_vec[PSA_MAX_IOVEC];
-    psa_outvec out_vec[PSA_MAX_IOVEC];
-    uint8_t buffer[SHARED_BUFFER_SIZE];
-};
-
-#ifdef PSA_PROXY_SHARED_MEMORY_BASE
-/* If a dedicated region used for memory sharing the shared_mem variable must
- * be allocated into it.
- * If compiled with gcc the whole section zero initialized, even if the
- * variable initialized here with some other value.
- */
-__attribute__((section("PSA_PROXY_SHARED_MEMORY_SECTION")))
-#endif
-struct shared_mem_t shared_mem;
-
-uint32_t shared_mem_buffer_actual_size = 0;
-
-static psa_status_t write_input_param_into_shared_mem(uint32_t param_num,
-                                                      const psa_msg_t *msg)
-{
-    const void *buff_input_ptr;
-
-    if (shared_mem_buffer_actual_size + msg->in_size[param_num] <=
-        SHARED_BUFFER_SIZE) {
-        buff_input_ptr = &(shared_mem.buffer[shared_mem_buffer_actual_size]);
-
-        psa_read(msg->handle,
-                 param_num,
-                 (void *) buff_input_ptr,
-                 msg->in_size[param_num]);
-        shared_mem_buffer_actual_size += msg->in_size[param_num];
-
-        shared_mem.in_vec[param_num].base = buff_input_ptr;
-        shared_mem.in_vec[param_num].len = msg->in_size[param_num];
-
-        return PSA_SUCCESS;
-    } else {
-        return PSA_ERROR_INSUFFICIENT_MEMORY;
-    }
-}
-
-static psa_status_t allocate_output_param_in_shared_mem(uint32_t param_num,
-                                                        const psa_msg_t *msg)
-{
-    void * buff_output_ptr;
-
-    if (shared_mem_buffer_actual_size + msg->out_size[param_num] <=
-        SHARED_BUFFER_SIZE) {
-        buff_output_ptr = &(shared_mem.buffer[shared_mem_buffer_actual_size]);
-
-        shared_mem_buffer_actual_size += msg->out_size[param_num];
-
-        shared_mem.out_vec[param_num].base = buff_output_ptr;
-        shared_mem.out_vec[param_num].len = msg->out_size[param_num];
-
-        return PSA_SUCCESS;
-    } else {
-        return PSA_ERROR_INSUFFICIENT_MEMORY;
-    }
-}
-
-static void clear_shared_mem_buffer(void)
-{
-    int32_t i;
-
-    shared_mem_buffer_actual_size = 0;
-
-    for (i = 0; i < PSA_MAX_IOVEC; i++) {
-        shared_mem.in_vec[i].base = NULL;
-        shared_mem.in_vec[i].len = 0;
-        shared_mem.out_vec[i].base = NULL;
-        shared_mem.out_vec[i].len = 0;
-    }
-}
-
-#ifdef PSA_PROXY_ADDR_TRANSLATION
-static void translate_shared_mem_addrs_to_send_msg(
-        struct psa_client_params_t* forward_params)
-{
-    int32_t i;
-
-    for (i = 0; i < PSA_MAX_IOVEC; i++) {
-        shared_mem.in_vec[i].base = translate_addr_from_host_to_se(
-                                            (void*)shared_mem.in_vec[i].base);
-        shared_mem.out_vec[i].base = translate_addr_from_host_to_se(
-                                            shared_mem.out_vec[i].base);
-    }
-
-    forward_params->psa_call_params.in_vec = translate_addr_from_host_to_se(
-                                                        shared_mem.in_vec);
-    forward_params->psa_call_params.out_vec = translate_addr_from_host_to_se(
-                                                        shared_mem.out_vec);
-}
-
-static void translate_shared_mem_addrs_to_write_back_results(void)
-{
-    int32_t i;
-
-    for (i = 0; i < PSA_MAX_IOVEC; i++) {
-        shared_mem.in_vec[i].base = translate_addr_from_se_to_host(
-                                            (void*)shared_mem.in_vec[i].base);
-        shared_mem.out_vec[i].base = translate_addr_from_se_to_host(
-                                            shared_mem.out_vec[i].base);
-    }
-
-}
-#endif
-
-struct ns_mailbox_queue_t * psa_proxy_get_ns_mailbox_queue(void)
-{
-    return &(shared_mem.ns_mailbox_queue);
-}
-
-psa_status_t psa_proxy_put_msg_into_shared_mem(
-        const psa_msg_t* msg,
-        struct psa_client_params_t* forward_params)
-{
-    psa_status_t status;
-    uint32_t i;
-    size_t in_vec_len = 0;
-    size_t out_vec_len = 0;
-
-    clear_shared_mem_buffer();
-
-    for (i = 0; i < PSA_MAX_IOVEC; i++) {
-        if (msg->in_size[i] > 0) {
-            status = write_input_param_into_shared_mem(i, msg);
-            if ( status != PSA_SUCCESS ) {
-                return status;
-            }
-            in_vec_len = i + 1;
-        }
-    }
-
-    for (i = 0; i < PSA_MAX_IOVEC; i++) {
-        if (msg->out_size[i] > 0) {
-            status = allocate_output_param_in_shared_mem(i, msg);
-            if ( status != PSA_SUCCESS ) {
-                return status;
-            }
-            out_vec_len = i + 1;
-        }
-    }
-
-    forward_params->psa_call_params.in_vec = shared_mem.in_vec;
-    forward_params->psa_call_params.in_len = in_vec_len;
-    forward_params->psa_call_params.out_vec = shared_mem.out_vec;
-    forward_params->psa_call_params.out_len = out_vec_len;
-
-#ifdef PSA_PROXY_ADDR_TRANSLATION
-    translate_shared_mem_addrs_to_send_msg(forward_params);
-#endif
-
-    return PSA_SUCCESS;
-}
-
-void psa_proxy_write_back_results_from_shared_mem(const psa_msg_t* msg)
-{
-    uint32_t i;
-
-#ifdef PSA_PROXY_ADDR_TRANSLATION
-    translate_shared_mem_addrs_to_write_back_results();
-#endif
-
-    for (i = 0; i < PSA_MAX_IOVEC; i++) {
-       if (shared_mem.out_vec[i].len > 0) {
-           psa_write(msg->handle,
-                     i,
-                     shared_mem.out_vec[i].base,
-                     shared_mem.out_vec[i].len);
-       }
-   }
-}
diff --git a/secure_fw/partitions/psa_proxy/psa_proxy_shared_mem_mngr.h b/secure_fw/partitions/psa_proxy/psa_proxy_shared_mem_mngr.h
deleted file mode 100644
index 62254bf..0000000
--- a/secure_fw/partitions/psa_proxy/psa_proxy_shared_mem_mngr.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#ifndef __PSA_PROXY_SHARED_MEM_MNGR_H__
-#define __PSA_PROXY_SHARED_MEM_MNGR_H__
-
-#include "tfm_mailbox.h"
-#include "psa/error.h"
-#include "psa/service.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \brief Returns the NS mailbox
- *
- * \return Returns a pointer to the NS mailbox
- */
-struct ns_mailbox_queue_t * psa_proxy_get_ns_mailbox_queue(void);
-
-/*!
- * \brief Puts message into the shared memory
- *
- * \param[in]  msg              PSA message to be forwarded
- * \param[out] forward_params   PSA client parameters to be forwarded (pointers
- *                              of the shared input and output vectors shall be
- *                              written back to this structure.
- *
- * \return Returns values as specified by the \ref psa_status_t
- */
-psa_status_t psa_proxy_put_msg_into_shared_mem(
-        const psa_msg_t *msg,
-        struct psa_client_params_t *forward_params);
-
-/*!
- * \brief Writes back the results of the forwarded PSA message
- *
- * \param[in]  msg  Original PSA message was already forwarded
- */
-void psa_proxy_write_back_results_from_shared_mem(const psa_msg_t *msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __PSA_PROXY_SHARED_MEM_MNGR_H__ */
diff --git a/secure_fw/partitions/psa_proxy/tfm_psa_proxy.yaml b/secure_fw/partitions/psa_proxy/tfm_psa_proxy.yaml
deleted file mode 100644
index af40fb9..0000000
--- a/secure_fw/partitions/psa_proxy/tfm_psa_proxy.yaml
+++ /dev/null
@@ -1,77 +0,0 @@
-#-------------------------------------------------------------------------------
-# Copyright (c) 2020-2022, Arm Limited. All rights reserved.
-#
-# SPDX-License-Identifier: BSD-3-Clause
-#
-#-------------------------------------------------------------------------------
-
-{
-  "psa_framework_version": 1.1,
-  "name": "TFM_SP_PSA_PROXY",
-  "type": "PSA-ROT",
-  "priority": "HIGH",
-  "model": "IPC",
-  "entry_point": "psa_proxy_sp_init",
-  "stack_size": "0x0A00",
-  "services": [
-    {
-      # If there is not any connection-based service being built,
-      # The psa_set_rhandle API will be excluded in building as it's for
-      # connection-based serivce only.
-      # But this Partition requires this API to save handles.
-      # So to avoid the psa_set_rhandle API beening excluded, a dummy
-      # connection-based services is added here.
-      "name": "TFM_PROXY_DUMMY",
-      "sid": "0xFFFFFFFF",
-      "non_secure_clients": false,
-      "connection_based": true,
-      "version": 1,
-      "version_policy": "STRICT"
-    },
-    {
-      "name": "TFM_CRYPTO",
-      "sid": "0x00000080",
-      "non_secure_clients": true,
-      "connection_based": false,
-      "stateless_handle": 1,
-      "version": 1,
-      "version_policy": "STRICT"
-    },
-    {
-      "name": "TFM_ATTESTATION_SERVICE",
-      "sid": "0x00000020",
-      "non_secure_clients": true,
-      "connection_based": false,
-      "stateless_handle": 4,
-      "version": 1,
-      "version_policy": "STRICT"
-    },
-    {
-      "name": "TFM_INTERNAL_TRUSTED_STORAGE_SERVICE",
-      "sid": "0x00000070",
-      "non_secure_clients": true,
-      "connection_based": false,
-      "stateless_handle": 3,
-      "version": 1,
-      "version_policy": "STRICT"
-    },
-    {
-      "name": "TFM_PLATFORM_SERVICE",
-      "sid": "0x00000040",
-      "non_secure_clients": true,
-      "connection_based": false,
-      "stateless_handle": 6,
-      "minor_version": 1,
-      "minor_policy": "STRICT"
-    },
-    {
-      "name": "TFM_PROTECTED_STORAGE_SERVICE",
-      "sid": "0x00000060",
-      "non_secure_clients": true,
-      "connection_based": false,
-      "stateless_handle": 2,
-      "version": 1,
-      "version_policy": "STRICT"
-    }
-  ]
-}
diff --git a/tools/tfm_manifest_list.yaml b/tools/tfm_manifest_list.yaml
index 72b2827..1e26d13 100644
--- a/tools/tfm_manifest_list.yaml
+++ b/tools/tfm_manifest_list.yaml
@@ -121,20 +121,6 @@
       }
     },
     {
-      "description": "TF-M PSA Proxy Partition",
-      "manifest": "../secure_fw/partitions/psa_proxy/tfm_psa_proxy.yaml",
-      "output_path": "secure_fw/partitions/psa_proxy",
-      "conditional": "TFM_PARTITION_PSA_PROXY",
-      "version_major": 0,
-      "version_minor": 1,
-      "pid": 270,
-      "linker_pattern": {
-        "library_list": [
-           "*tfm_*partition_psa_proxy.*"
-         ]
-      }
-    },
-    {
       "description": "TFM Firmware Update Partition",
       "manifest": "../secure_fw/partitions/firmware_update/tfm_firmware_update.yaml",
       "output_path": "secure_fw/partitions/firmware_update",
