diff --git a/Readme.md b/Readme.md
index 9f79d21..4567a72 100644
--- a/Readme.md
+++ b/Readme.md
@@ -108,6 +108,7 @@
   - [Testing and benchmarking](./docs/documentation.md#testing-and-benchmarking)
   - [Troubleshooting](./docs/documentation.md#troubleshooting)
   - [Appendix](./docs/documentation.md#appendix)
+  - [FAQ](./docs/documentation.md#faq)
 
 ## Contribution guidelines
 
diff --git a/docs/documentation.md b/docs/documentation.md
index ca49575..0934e8e 100644
--- a/docs/documentation.md
+++ b/docs/documentation.md
@@ -13,6 +13,7 @@
   - [Memory Considerations](./documentation.md#memory-considerations)
   - [Troubleshooting](./documentation.md#troubleshooting)
   - [Appendix](./documentation.md#appendix)
+  - [FAQ](./documentation.md#faq)
 
 ## Trademarks
 
@@ -356,6 +357,8 @@
   - [Inference results are incorrect for my custom files](./sections/troubleshooting.md#inference-results-are-incorrect-for-my-custom-files)
   - [The application does not work with my custom model](./sections/troubleshooting.md#the-application-does-not-work-with-my-custom-model)
   - [NPU configuration mismatch error when running inference](./sections/troubleshooting.md#npu-configuration-mismatch-error-when-running-inference)
+  - [Problem installing Vela](./sections/troubleshooting.md#roblem-installing-vela)
+  - [Errors when cloning the repository](./sections/troubleshooting.md#errors-when-cloning-the-repository)
 
 ## Appendix
 
diff --git a/docs/sections/building.md b/docs/sections/building.md
index df21250..2f122f9 100644
--- a/docs/sections/building.md
+++ b/docs/sections/building.md
@@ -226,6 +226,8 @@
 - `ETHOS_U_NPU_TIMING_ADAPTER_SRC_PATH`: The path to timing adapter sources. The default value points to the
   `timing_adapter` dependencies folder.
 
+- `ETHOS_U_NPU_TIMING_ADAPTER_ENABLED`: Specifies if the *Ethos-U* timing adapter is enabled.
+
 - `TA_CONFIG_FILE`: The path to the CMake configuration file that contains the timing adapter parameters. Used only if
   the timing adapter build is enabled. Default for Ethos-U55 NPU is
   [ta_config_u55_high_end.cmake](../../scripts/timing_adapter/ta_config_u55_high_end.cmake),
diff --git a/docs/sections/troubleshooting.md b/docs/sections/troubleshooting.md
index 8b40e46..612e40e 100644
--- a/docs/sections/troubleshooting.md
+++ b/docs/sections/troubleshooting.md
@@ -5,7 +5,7 @@
   - [The application does not work with my custom model](./troubleshooting.md#the-application-does-not-work-with-my-custom-model)
   - [NPU configuration mismatch error when running inference](./troubleshooting.md#npu-configuration-mismatch-error-when-running-inference)
   - [Problem installing Vela](./troubleshooting.md#problem-installing-vela)
-  - [Errors when cloning the repository](/troubleshooting.md#errors-when-cloning-the-repository)
+  - [Errors when cloning the repository](./troubleshooting.md#errors-when-cloning-the-repository)
 
 ## Inference results are incorrect for my custom files
 
diff --git a/scripts/cmake/common_user_options.cmake b/scripts/cmake/common_user_options.cmake
index ae35925..7dc68de 100644
--- a/scripts/cmake/common_user_options.cmake
+++ b/scripts/cmake/common_user_options.cmake
@@ -133,8 +133,14 @@
             set(DEFAULT_TA_CONFIG_FILE_PATH "${CMAKE_CURRENT_LIST_DIR}/timing_adapter/ta_config_u65_high_end.cmake")
         endif ()
 
-        USER_OPTION(TA_CONFIG_FILE "Path to the timing adapter configuration file"
-                ${DEFAULT_TA_CONFIG_FILE_PATH}
-                FILEPATH)
+        USER_OPTION(ETHOS_U_NPU_TIMING_ADAPTER_ENABLED "Specifies if the Ethos-U timing adapter is enabled"
+            ON
+            BOOL)
+
+        if (ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
+            USER_OPTION(TA_CONFIG_FILE "Path to the timing adapter configuration file"
+                    ${DEFAULT_TA_CONFIG_FILE_PATH}
+                    FILEPATH)
+        endif()
     endif()
 endif()
diff --git a/source/hal/CMakeLists.txt b/source/hal/CMakeLists.txt
index 536682f..f720cdf 100644
--- a/source/hal/CMakeLists.txt
+++ b/source/hal/CMakeLists.txt
@@ -108,16 +108,18 @@
         PUBLIC
         PLATFORM_HAL=PLATFORM_UNKNOWN_LINUX_OS
         ACTIVATION_BUF_SRAM_SZ=0)
+else()
+    message(FATAL_ERROR "PLATFORM_PROFILE ${PLATFORM_PROFILE} not supported")
 endif()
 
-# Add platform-drivers target
+# Add platform_drivers target
 add_subdirectory(${PLATFORM_DRIVERS_DIR} ${CMAKE_BINARY_DIR}/platform_driver)
 
 # Link time library targets:
 target_link_libraries(${HAL_TARGET}
     PUBLIC
     log
-    platform-drivers)
+    platform_drivers)
 
 # Display status:
 message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/source/hal/components/ethosu_npu_init/CMakeLists.txt b/source/hal/components/ethosu_npu_init/CMakeLists.txt
new file mode 100644
index 0000000..57eef61
--- /dev/null
+++ b/source/hal/components/ethosu_npu_init/CMakeLists.txt
@@ -0,0 +1,98 @@
+#----------------------------------------------------------------------------
+#  Copyright (c) 2022 Arm Limited. All rights reserved.
+#  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.
+#----------------------------------------------------------------------------
+
+#########################################################
+#         Ethos-U NPU initialization library            #
+#########################################################
+
+cmake_minimum_required(VERSION 3.15.6)
+set(ETHOS_U_NPU_INIT_COMPONENT ethosu_npu_init_component)
+project(${ETHOS_U_NPU_INIT_COMPONENT}
+    DESCRIPTION     "Ethos-U NPU initialization library"
+    LANGUAGES       C CXX ASM)
+
+if (NOT DEFINED ETHOS_U_NPU_DRIVER_SRC_PATH)
+    message(FATAL_ERROR "ETHOS_U_NPU_DRIVER_SRC_PATH should"
+            " be defined when ETHOS_U_NPU_ENABLED=${ETHOS_U_NPU_ENABLED}")
+endif()
+
+# For the driver, we need to provide the CMSIS_PATH variable
+set(CMSIS_PATH ${CMSIS_SRC_PATH} CACHE PATH "Path to CMSIS directory")
+add_subdirectory(${ETHOS_U_NPU_DRIVER_SRC_PATH} ${CMAKE_BINARY_DIR}/ethos-u-driver)
+
+# Create static library
+add_library(${ETHOS_U_NPU_INIT_COMPONENT} STATIC)
+
+## Include directories - public
+target_include_directories(${ETHOS_U_NPU_INIT_COMPONENT}
+    PUBLIC
+    include
+    ${SOURCE_GEN_DIR})
+
+## Component sources
+target_sources(${ETHOS_U_NPU_INIT_COMPONENT}
+    PRIVATE
+    ethosu_npu_init.c)
+
+## Add dependencies:
+target_link_libraries(${ETHOS_U_NPU_INIT_COMPONENT} PUBLIC
+    cmsis_device
+    ethosu_core_driver
+    log)
+
+## Memory mode target definition
+if (NOT DEFINED ETHOS_U_NPU_ID)
+    set(ETHOS_U_NPU_ID U55)
+endif()
+
+if (NOT DEFINED ETHOS_U_NPU_MEMORY_MODE)
+    set(ETHOS_U_NPU_MEMORY_MODE Shared_Sram)
+endif()
+
+if (ETHOS_U_NPU_MEMORY_MODE STREQUAL Sram_Only)
+    if (ETHOS_U_NPU_ID STREQUAL U55)
+        set(ETHOS_U_NPU_MEMORY_MODE_FLAG "-DETHOS_U_NPU_MEMORY_MODE=ETHOS_U_NPU_MEM_MODE_SRAM_ONLY")
+    else ()
+        message(FATAL_ERROR "Non compatible Ethos-U NPU memory mode and processor ${ETHOS_U_NPU_MEMORY_MODE} - ${ETHOS_U_NPU_ID}. `sram_only` can be used only for Ethos-U55.")
+    endif ()
+
+elseif (ETHOS_U_NPU_MEMORY_MODE STREQUAL Shared_Sram)
+    # Shared Sram can be used for Ethos-U55 and Ethos-U65
+    set(ETHOS_U_NPU_MEMORY_MODE_FLAG "-DETHOS_U_NPU_MEMORY_MODE=ETHOS_U_NPU_MEMORY_MODE_SHARED_SRAM")
+
+elseif (ETHOS_U_NPU_MEMORY_MODE STREQUAL Dedicated_Sram)
+    # Dedicated Sram is used only for Ethos-U65
+    if (ETHOS_U_NPU_ID STREQUAL U65)
+        list(APPEND ETHOS_U_NPU_MEMORY_MODE_FLAG "-DETHOS_U_NPU_MEMORY_MODE=ETHOS_U_NPU_MEMORY_MODE_DEDICATED_SRAM" "-DETHOS_U_NPU_CACHE_SIZE=${ETHOS_U_NPU_CACHE_SIZE}")
+    else ()
+        message(FATAL_ERROR "Non compatible Ethos-U NPU memory mode and processor ${ETHOS_U_NPU_MEMORY_MODE} - ${ETHOS_U_NPU_ID}. `dedicated_sram` can be used only for Ethos-U65.")
+    endif ()
+
+else ()
+    message(FATAL_ERROR "Non compatible Ethos-U NPU memory mode ${ETHOS_U_NPU_MEMORY_MODE}")
+
+endif ()
+
+target_compile_definitions(${ETHOS_U_NPU_INIT_COMPONENT}
+    PUBLIC
+    ${ETHOS_U_NPU_MEMORY_MODE_FLAG})
+
+# Display status
+message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
+message(STATUS "*******************************************************")
+message(STATUS "Library                                : " ${ETHOS_U_NPU_INIT_COMPONENT})
+message(STATUS "*******************************************************")
diff --git a/source/hal/platform/mps3/include/ethosu_mem_config.h b/source/hal/components/ethosu_npu_init/include/ethosu_mem_config.h
similarity index 100%
rename from source/hal/platform/mps3/include/ethosu_mem_config.h
rename to source/hal/components/ethosu_npu_init/include/ethosu_mem_config.h
diff --git a/source/hal/components/ethosu_ta_init/CMakeLists.txt b/source/hal/components/ethosu_ta_init/CMakeLists.txt
new file mode 100644
index 0000000..b5f94c1
--- /dev/null
+++ b/source/hal/components/ethosu_ta_init/CMakeLists.txt
@@ -0,0 +1,67 @@
+#----------------------------------------------------------------------------
+#  Copyright (c) 2022 Arm Limited. All rights reserved.
+#  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.
+#----------------------------------------------------------------------------
+
+#########################################################
+#  Ethos-U NPU timing adapter initialization library    #
+#########################################################
+
+cmake_minimum_required(VERSION 3.15.6)
+set(ETHOS_U_NPU_TA_COMPONENT ethosu_ta_init_component)
+project(${ETHOS_U_NPU_TA_COMPONENT}
+    DESCRIPTION     "Ethos-U NPU timing adapter initialization library"
+    LANGUAGES       C CXX ASM)
+
+# Checks
+## If a TA config file is provided, we generate a settings file
+if (DEFINED TA_CONFIG_FILE)
+    include(${TA_CONFIG_FILE})
+    set(TA_SETTINGS_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/timing_adapter_settings.template)
+    configure_file("${TA_SETTINGS_TEMPLATE}" "${SOURCE_GEN_DIR}/timing_adapter_settings.h")
+endif()
+
+## Timing adapter Source path check
+if (NOT DEFINED ETHOS_U_NPU_TIMING_ADAPTER_SRC_PATH)
+    message(FATAL_ERROR "ETHOS_U_NPU_TIMING_ADAPTER_SRC_PATH should"
+            " be defined when ETHOS_U_NPU_ENABLED=${ETHOS_U_NPU_ENABLED}")
+endif()
+
+add_subdirectory(${ETHOS_U_NPU_TIMING_ADAPTER_SRC_PATH} ${CMAKE_BINARY_DIR}/timing_adapter)
+
+# Create static library
+add_library(${ETHOS_U_NPU_TA_COMPONENT} STATIC)
+
+## Include directories - public
+target_include_directories(${ETHOS_U_NPU_TA_COMPONENT}
+    PUBLIC
+    include
+    ${SOURCE_GEN_DIR})
+
+## Component sources
+target_sources(${ETHOS_U_NPU_TA_COMPONENT}
+    PRIVATE
+    ethosu_ta_init.c)
+
+## Add dependencies
+target_link_libraries(${ETHOS_U_NPU_TA_COMPONENT} PUBLIC
+    timing_adapter
+    log)
+
+# Display status
+message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
+message(STATUS "*******************************************************")
+message(STATUS "Library                                : " ${ETHOS_U_NPU_TA_COMPONENT})
+message(STATUS "*******************************************************")
diff --git a/source/hal/components/ethosu_ta_init/cmake/templates/timing_adapter_settings.template b/source/hal/components/ethosu_ta_init/cmake/templates/timing_adapter_settings.template
new file mode 100644
index 0000000..5b6c43d
--- /dev/null
+++ b/source/hal/components/ethosu_ta_init/cmake/templates/timing_adapter_settings.template
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * 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.
+ */
+// Auto-generated file
+// ** DO NOT EDIT **
+
+#ifndef TIMING_ADAPTER_SETTINGS_H
+#define TIMING_ADAPTER_SETTINGS_H
+
+#cmakedefine TA0_BASE       (@TA0_BASE@)
+#cmakedefine TA1_BASE       (@TA1_BASE@)
+
+/* Timing adapter settings for AXI0 */
+#if defined(TA0_BASE)
+
+#define TA0_MAXR           (@TA0_MAXR@)
+#define TA0_MAXW           (@TA0_MAXW@)
+#define TA0_MAXRW          (@TA0_MAXRW@)
+#define TA0_RLATENCY       (@TA0_RLATENCY@)
+#define TA0_WLATENCY       (@TA0_WLATENCY@)
+#define TA0_PULSE_ON       (@TA0_PULSE_ON@)
+#define TA0_PULSE_OFF      (@TA0_PULSE_OFF@)
+#define TA0_BWCAP          (@TA0_BWCAP@)
+#define TA0_PERFCTRL       (@TA0_PERFCTRL@)
+#define TA0_PERFCNT        (@TA0_PERFCNT@)
+#define TA0_MODE           (@TA0_MODE@)
+#define TA0_HISTBIN        (@TA0_HISTBIN@)
+#define TA0_HISTCNT        (@TA0_HISTCNT@)
+
+#endif /* defined(TA0_BASE) */
+
+/* Timing adapter settings for AXI1 */
+#if defined(TA1_BASE)
+
+#define TA1_MAXR           (@TA1_MAXR@)
+#define TA1_MAXW           (@TA1_MAXW@)
+#define TA1_MAXRW          (@TA1_MAXRW@)
+#define TA1_RLATENCY       (@TA1_RLATENCY@)
+#define TA1_WLATENCY       (@TA1_WLATENCY@)
+#define TA1_PULSE_ON       (@TA1_PULSE_ON@)
+#define TA1_PULSE_OFF      (@TA1_PULSE_OFF@)
+#define TA1_BWCAP          (@TA1_BWCAP@)
+#define TA1_PERFCTRL       (@TA1_PERFCTRL@)
+#define TA1_PERFCNT        (@TA1_PERFCNT@)
+#define TA1_MODE           (@TA1_MODE@)
+#define TA1_HISTBIN        (@TA1_HISTBIN@)
+#define TA1_HISTCNT        (@TA1_HISTCNT@)
+
+#endif /* defined(TA1_BASE) */
+
+#endif /* TIMING_ADAPTER_SETTINGS_H */
diff --git a/source/hal/components/ethosu_ta_init/ethosu_ta_init.c b/source/hal/components/ethosu_ta_init/ethosu_ta_init.c
index 26eeb5c..323ab73 100644
--- a/source/hal/components/ethosu_ta_init/ethosu_ta_init.c
+++ b/source/hal/components/ethosu_ta_init/ethosu_ta_init.c
@@ -19,8 +19,6 @@
 
 #include "log_macros.h"                 /* Logging functions */
 
-#if defined(TIMING_ADAPTER_AVAILABLE)
-
 #include "timing_adapter.h"             /* Arm Ethos-U timing adapter driver header */
 #include "timing_adapter_settings.h"    /* Arm Ethos-U timing adapter settings */
 
@@ -82,5 +80,3 @@
 
     return 0;
 }
-
-#endif /* TIMING_ADAPTER_AVAILABLE */
diff --git a/source/hal/components/ethosu_ta_init/include/ethosu_ta_init.h b/source/hal/components/ethosu_ta_init/include/ethosu_ta_init.h
index 2ab7fb2..7e6df6c 100644
--- a/source/hal/components/ethosu_ta_init/include/ethosu_ta_init.h
+++ b/source/hal/components/ethosu_ta_init/include/ethosu_ta_init.h
@@ -17,14 +17,10 @@
 #ifndef ETHOS_U_TA_INIT_H
 #define ETHOS_U_TA_INIT_H
 
-#if defined(ARM_NPU) && defined(TIMING_ADAPTER_AVAILABLE)
-
 /**
  * @brief   Initialises the Arm Ethos-U NPU timing adapter
  * @return  0 if successful, error code otherwise
  **/
 int arm_ethosu_timing_adapter_init(void);
 
-#endif /* ARM_NPU && TIMING_ADAPTER_AVAILABLE */
-
 #endif /* ETHOS_U_TA_INIT_H */
diff --git a/source/hal/components/uart_cmsdk/include/uart_stdout.h b/source/hal/components/uart_cmsdk/include/uart_stdout.h
deleted file mode 100644
index 9c5fbcf..0000000
--- a/source/hal/components/uart_cmsdk/include/uart_stdout.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
- * 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 UART_STDOUT_H
-#define UART_STDOUT_H
-
-#include <stdbool.h>
-
-/**
- * @brief       Initialised the UART block.
- **/
-extern void UartStdOutInit(void);
-
-/**
- * @brief       Transmits a character over UART (blocking call).
- * @param[in]   my_ch Character to be transmitted.
- * @return      Character transmitted.
- **/
-extern unsigned char UartPutc(unsigned char my_ch);
-
-/**
- * @brief       Receives a character from the UART block (blocking call).
- * @return      Character received.
- **/
-extern unsigned char UartGetc(void);
-
-/**
- * @brief       Reads characters from the UART block until a line feed or
- *              carriage return terminates the function. NULL character
- *              also terminates the function, error is returned.
- * @param[out]  lp      Characters read from the UART block.
- * @param[in]   len     Character to be transmitted.
- * @return      true if successful, false otherwise.
- **/
-extern bool GetLine(char *lp, unsigned int len);
-
-/**
- * @brief       Terminates UART simulation. This is useful when a Fixed
- *              Virtual Platform's session needs to be gracefully terminated.
- * @param[in]   code Terminating code displayed on the UART before the end of the simulation.
- **/
-extern void UartEndSimulation(int code);
-
-#endif /* UART_STDOUT_H */
diff --git a/source/hal/components/uart_cmsdk/uart_cmsdk.c b/source/hal/components/uart_cmsdk/uart_cmsdk.c
deleted file mode 100644
index 35d4160..0000000
--- a/source/hal/components/uart_cmsdk/uart_cmsdk.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
- * 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 "uart_stdout.h"
-
-#include "device_mps3.h"
-
-#include <stdio.h>
-
-#define CNTLQ       0x11
-#define CNTLS       0x13
-#define DEL         0x7F
-#define BACKSPACE   0x08
-#define CR          0x0D
-#define LF          0x0A
-#define ESC         0x1B
-
-void UartStdOutInit(void)
-{
-    CMSDK_UART0->BAUDDIV = PERIF_CLK / 115200;   /* => (25 or 32 MHz) / (115200 bps). */
-    CMSDK_UART0->CTRL    = ((1ul <<  0) |              /* TX enable. */
-                            (1ul <<  1) );             /* RX enable. */
-    return;
-}
-
-unsigned char UartPutc(unsigned char my_ch)
-{
-    while ((CMSDK_UART0->STATE & 1)); /* Wait if Transmit Holding register is full. */
-
-    if (my_ch == '\n') {
-        CMSDK_UART0->DATA  = '\r';
-        while ((CMSDK_UART0->STATE & 1)); /* Wait if Transmit Holding register is full. */
-    }
-
-    CMSDK_UART0->DATA = my_ch; /* Write to transmit holding register. */
-    return (my_ch);
-}
-
-unsigned char UartGetc(void)
-{
-    unsigned char my_ch;
-    unsigned int  cnt;
-
-    /* Wait if Receive Holding register is empty. */
-    while (0 == (CMSDK_UART0->STATE & 2)) {
-        cnt = MPS3_FPGAIO->CLK100HZ / 50;
-        if (cnt & 0x8) {
-            MPS3_FPGAIO->LED = 0x01 << (cnt & 0x7);
-        }
-        else {
-            MPS3_FPGAIO->LED = 0x80 >> (cnt & 0x7);
-        }
-    }
-
-    my_ch = CMSDK_UART0->DATA;
-
-    /* Convert CR to LF. */
-    if(my_ch == '\r') {
-        my_ch = '\n';
-    }
-
-    return (my_ch);
-}
-
-bool GetLine(char *lp, unsigned int len)
-{
-    unsigned int cnt = 0;
-    char c;
-
-    do {
-        c = UartGetc ();
-        switch (c) {
-            case CNTLQ:                       /* Ignore Control S/Q.            */
-            case CNTLS:
-                break;
-
-            case BACKSPACE:
-            case DEL:
-                if (cnt == 0) {
-                    break;
-                }
-                cnt--;                         /* Decrement count.               */
-                lp--;                          /* Decrement line pointer.        */
-                UartPutc (0x08);               /* Echo backspace.                */
-                UartPutc (' ');
-                UartPutc (0x08);
-                fflush (stdout);
-                break;
-
-            case ESC:
-            case 0:
-                *lp = 0;                        /* ESC - stop editing line.       */
-                return false;
-
-            case CR:                            /* CR - done, stop editing line.  */
-                UartPutc (*lp = c);             /* Echo and store character.      */
-                lp++;                           /* Increment line pointer         */
-                cnt++;                          /* and count.                     */
-                c = LF;
-                UartPutc (*lp = c);             /* Echo and store character.      */
-                fflush (stdout);
-                lp++;                           /* Increment line pointer         */
-                    cnt++;                      /* and count.                     */
-                break;
-            default:
-                UartPutc (*lp = c);             /* Echo and store character.      */
-                fflush (stdout);
-                lp++;                           /* Increment line pointer         */
-                    cnt++;                      /* and count.                     */
-                break;
-        }
-    } while (cnt < len - 2  &&  c != LF);       /* Check limit and CR.            */
-    *lp = 0;                                    /* Mark end of string.            */
-
-    return true;
-}
-
-__attribute__((noreturn)) void UartEndSimulation(int code)
-{
-    UartPutc((char) 0x4);   /* End of simulation */
-    UartPutc((char) code);  /* End of simulation */
-    while(1);
-}
diff --git a/source/hal/components/uart_pl011/include/uart_stdout.h b/source/hal/components/uart_pl011/include/uart_stdout.h
deleted file mode 100644
index 9c5fbcf..0000000
--- a/source/hal/components/uart_pl011/include/uart_stdout.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
- * 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 UART_STDOUT_H
-#define UART_STDOUT_H
-
-#include <stdbool.h>
-
-/**
- * @brief       Initialised the UART block.
- **/
-extern void UartStdOutInit(void);
-
-/**
- * @brief       Transmits a character over UART (blocking call).
- * @param[in]   my_ch Character to be transmitted.
- * @return      Character transmitted.
- **/
-extern unsigned char UartPutc(unsigned char my_ch);
-
-/**
- * @brief       Receives a character from the UART block (blocking call).
- * @return      Character received.
- **/
-extern unsigned char UartGetc(void);
-
-/**
- * @brief       Reads characters from the UART block until a line feed or
- *              carriage return terminates the function. NULL character
- *              also terminates the function, error is returned.
- * @param[out]  lp      Characters read from the UART block.
- * @param[in]   len     Character to be transmitted.
- * @return      true if successful, false otherwise.
- **/
-extern bool GetLine(char *lp, unsigned int len);
-
-/**
- * @brief       Terminates UART simulation. This is useful when a Fixed
- *              Virtual Platform's session needs to be gracefully terminated.
- * @param[in]   code Terminating code displayed on the UART before the end of the simulation.
- **/
-extern void UartEndSimulation(int code);
-
-#endif /* UART_STDOUT_H */
diff --git a/source/hal/components/uart_pl011/uart_pl011.c b/source/hal/components/uart_pl011/uart_pl011.c
deleted file mode 100644
index 1cbf70c..0000000
--- a/source/hal/components/uart_pl011/uart_pl011.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
- * 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 "uart_stdout.h"
-#include "peripheral_memmap.h"      /* peripheral memory map definitions */
-
-#include <stdio.h>
-#include <stdint.h>
-
-#define CNTLQ       0x11
-#define CNTLS       0x13
-#define DEL         0x7F
-#define BACKSPACE   0x08
-#define CR          0x0D
-#define LF          0x0A
-#define ESC         0x1B
-
-#define UARTBASE    (PL011_UART0_BASE)
-
-/*****************************************************************************/
-/*  UART Control Register Locations                                          */
-/*****************************************************************************/
-#define UART0_DR   *((volatile unsigned *) UARTBASE)
-#define UART0_RSR  *((volatile unsigned *)(UARTBASE + 0x04))
-#define UART0_ECR  *((volatile unsigned *)(UARTBASE + 0x04))
-#define UART0_LCRH *((volatile unsigned *)(UARTBASE + 0x2C))
-#define UART0_LCRM *((volatile unsigned *)(UARTBASE + 0x28))
-#define UART0_LCRL *((volatile unsigned *)(UARTBASE + 0x24))
-#define UART0_CR   *((volatile unsigned *)(UARTBASE + 0x30))
-#define UART0_FR   *((volatile unsigned *)(UARTBASE + 0x18))
-#define UART0_IIR  *((volatile unsigned *)(UARTBASE + 0x1C))
-#define UART0_ICR  *((volatile unsigned *)(UARTBASE + 0x44))
-
-/*****************************************************************************/
-/* Received Status Register - RSR                                            */
-/*****************************************************************************/
-#define RSR_OVERRUN_ERROR   0x08
-#define RSR_BREAK_ERROR     0x04
-#define RSR_PARITY_ERROR    0x02
-#define RSR_FRAMING_ERROR   0x01
-
-/*****************************************************************************/
-/* Line Control High Byte Register - LCRH                                    */
-/*****************************************************************************/
-#define LCRH_WORD_LENGTH_8  0x60
-#define LCRH_WORD_LENGTH_7  0x40
-#define LCRH_WORD_LENGTH_6  0x20
-#define LCRH_WORD_LENGTH_5  0x00
-#define LCRH_FIFO_ENABLED   0x10
-#define LCRH_2_STOP_BITS    0x08
-#define LCRH_EVEN_PARITY    0x04
-#define LCRH_PARITY_ENABLE  0x02
-#define LCRH_SEND_BREAK     0x01
-
-/*****************************************************************************/
-/* Line Control Medium Byte Register - LCRM                                  */
-/* This register specifies the high byte of the Baud rate divisor            */
-/*****************************************************************************/
-#define LCRM_BAUD_460800  0x00
-#define LCRM_BAUD_230400  0x00
-#define LCRM_BAUD_115200  0x00
-#define LCRM_BAUD_76800   0x00
-#define LCRM_BAUD_57600   0x00
-#define LCRM_BAUD_38400   0x00
-#define LCRM_BAUD_19200   0x00
-#define LCRM_BAUD_14400   0x00
-#define LCRM_BAUD_9600    0x00
-#define LCRM_BAUD_2400    0x01
-#define LCRM_BAUD_1200    0x02
-
-/*****************************************************************************/
-/* Line Control Low Byte Register - LCRL                                     */
-/* This register specifies the low byte of the Baud rate divisor             */
-/*****************************************************************************/
-#define LCRL_BAUD_460800  0x01
-#define LCRL_BAUD_230400  0x03
-#define LCRL_BAUD_115200  0x07
-#define LCRL_BAUD_76800   0x0B
-#define LCRL_BAUD_57600   0x0F
-#define LCRL_BAUD_38400   0xC
-#define LCRL_BAUD_19200   0x2F
-#define LCRL_BAUD_14400   0x3F
-#define LCRL_BAUD_9600    0x5F
-#define LCRL_BAUD_2400    0x7F
-#define LCRL_BAUD_1200    0xFF
-
-/*****************************************************************************/
-/* Control Register - CR                                                     */
-/*****************************************************************************/
-#define CR_LOOP_BACK_EN   0x80
-#define CR_TIMEOUT_INT_EN 0x40
-#define CR_TX_INT_ENABLE  0x100
-#define CR_RX_INT_ENABLE  0x200
-#define CR_MODSTAT_INT_EN 0x08
-#define CR_UART_ENABLE    0x01
-
-/*****************************************************************************/
-/* Flag Register - FR                                                        */
-/*****************************************************************************/
-#define FR_TX_FIFO_EMPTY  0x80
-#define FR_RX_FIFO_FULL   0x40
-#define FR_TX_FIFO_FULL   0x20
-#define FR_RX_FIFO_EMPTY  0x10
-#define FR_BUSY           0x08
-#define FR_CARRIER_DETECT 0x04
-#define FR_SET_READY      0x02
-#define FR_CLEAR_TO_SEND  0x01
-
-/*****************************************************************************/
-/* Interrupt Identification Register - IIR                                   */
-/*****************************************************************************/
-#define IIR_RX_TIME_OUT   0x08
-#define IIR_TX            0x04
-#define IIR_RX            0x02
-#define IIR_MODEM         0x01
-
-void UartStdOutInit(void)
-{
-    /* Disable the serial port while setting the baud rate and word length. */
-    UART0_CR = 0;
-
-    /* Clear the receive status register. */
-    UART0_ECR = 0;
-
-    /* Set the correct baud rate and word length. */
-    UART0_LCRL = LCRL_BAUD_115200;
-    UART0_LCRM = LCRM_BAUD_115200;
-    UART0_LCRH = LCRH_WORD_LENGTH_8;
-
-    /* Explicitly disable FIFO's for char mode. */
-    UART0_LCRH &= ~LCRH_FIFO_ENABLED;
-
-    /* Enable UART0 (and RX/TX) without interrupts. */
-    UART0_CR = CR_UART_ENABLE | CR_TX_INT_ENABLE | CR_RX_INT_ENABLE;
-}
-
-unsigned char UartPutc(unsigned char ch)
-{
-    if (ch == '\n') {
-        (void) UartPutc('\r');
-    }
-    while (UART0_FR & FR_TX_FIFO_FULL)
-        ;
-    UART0_DR = ch;
-
-    return ch;
-}
-
-unsigned char UartGetc(void)
-{
-    unsigned char c;
-    while (UART0_FR & FR_RX_FIFO_EMPTY)
-        ;
-    c = UART0_DR;
-    if (c == '\r') {
-        c = '\n';
-    }
-
-    return c;
-}
-
-bool GetLine (char *lp, unsigned int len)
-{
-    unsigned int cnt = 0;
-    char c;
-
-    do {
-        c = UartGetc();
-        switch (c) {
-            case CNTLQ:                       /* ignore Control S/Q.            */
-            case CNTLS:
-                break;
-            case BACKSPACE:
-            case DEL:
-                if (cnt == 0) {
-                    break;
-                }
-                cnt--;                         /* decrement count.               */
-                lp--;                          /* and line pointer.              */
-                UartPutc (0x08);               /* echo backspace.                */
-                UartPutc (' ');
-                UartPutc (0x08);
-                fflush (stdout);
-                break;
-            case ESC:
-            case 0:
-                *lp = 0;                       /* ESC - stop editing line.       */
-                return false;
-            case CR:                            /* CR - done, stop editing line. */
-                UartPutc (*lp = c);             /* Echo and store character.     */
-                lp++;                           /* Increment line pointer        */
-                cnt++;                          /* and count.                    */
-                c = LF;
-                UartPutc (*lp = c);             /* Echo and store character.      */
-                fflush (stdout);
-                lp++;                           /* Increment line pointer         */
-                cnt++;                          /* and count.                     */
-                break;
-            default:
-                UartPutc (*lp = c);            /* echo and store character.      */
-                fflush (stdout);
-                lp++;                          /* increment line pointer.        */
-                cnt++;                         /* and count.                     */
-                break;
-        }
-    } while (cnt < len - 2  &&  c != LF);      /* check limit and CR.            */
-    *lp = 0;                                   /* mark end of string.            */
-    return true;
-}
-
-__attribute__((noreturn)) void UartEndSimulation(int code)
-{
-    UartPutc((char) 0x4);  // End of simulation
-    UartPutc((char) code); // Exit code
-    while(1);
-}
diff --git a/source/hal/platform/mps3/CMakeLists.txt b/source/hal/platform/mps3/CMakeLists.txt
index 75e70a2..7ef4ed4 100644
--- a/source/hal/platform/mps3/CMakeLists.txt
+++ b/source/hal/platform/mps3/CMakeLists.txt
@@ -20,7 +20,7 @@
 #########################################################
 
 cmake_minimum_required(VERSION 3.15.6)
-set(PLATFORM_DRIVERS_TARGET platform-drivers)
+set(PLATFORM_DRIVERS_TARGET platform_drivers)
 project(${PLATFORM_DRIVERS_TARGET}
     DESCRIPTION     "Platform drivers library for MPS3 FPGA/FVP targets"
     LANGUAGES       C CXX ASM)
@@ -54,145 +54,75 @@
 configure_file("${IRQ_PROFILE_TEMPLATE}" "${SOURCE_GEN_DIR}/peripheral_irqs.h")
 configure_file("${MEM_REGIONS_TEMPLATE}" "${SOURCE_GEN_DIR}/mem_regions.h")
 
-# If a TA config file is provided, we generate a settings file
-if (DEFINED TA_CONFIG_FILE)
-    include(${TA_CONFIG_FILE})
-    set(TA_SETTINGS_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/timing_adapter_settings.template)
-    configure_file("${TA_SETTINGS_TEMPLATE}" "${SOURCE_GEN_DIR}/timing_adapter_settings.h")
-endif()
-
 # 4. Create static library
 add_library(${PLATFORM_DRIVERS_TARGET} STATIC)
 
+## Include directories - private
+target_include_directories(${PLATFORM_DRIVERS_TARGET}
+    PRIVATE
+    source)
+
 ## Include directories - public
 target_include_directories(${PLATFORM_DRIVERS_TARGET}
     PUBLIC
     include
     ${SOURCE_GEN_DIR})
 
-## Include directories - private
-target_include_directories(${PLATFORM_DRIVERS_TARGET}
-    PRIVATE
-    source/include)
-
 ## Platform sources
 target_sources(${PLATFORM_DRIVERS_TARGET}
     PRIVATE
     source/device_mps3.c
     source/timer_mps3.c
-    source/platform_drivers.c)
+    source/platform_drivers.c
+    source/glcd_mps3.c)
 
 ## Directory for additional components required by MPS3:
 if (NOT DEFINED COMPONENTS_DIR)
     set(COMPONENTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../components)
 endif()
 
-## Platform component: uart
-target_sources(${PLATFORM_DRIVERS_TARGET}
-        PRIVATE
-        ${COMPONENTS_DIR}/uart_cmsdk/uart_cmsdk.c)
-target_include_directories(${PLATFORM_DRIVERS_TARGET}
-        PUBLIC
-        ${COMPONENTS_DIR}/uart_cmsdk/include)
-
-## Platform component: LCD
-target_sources(${PLATFORM_DRIVERS_TARGET}
-        PRIVATE
-        ${COMPONENTS_DIR}/lcd_mps3/glcd_mps3.c)
-target_include_directories(${PLATFORM_DRIVERS_TARGET}
-        PUBLIC
-        ${COMPONENTS_DIR}/lcd_mps3/include)
-
 ## This target provides the following definitions for MPS3 specific behaviour
 ## TODO: We should aim to remove this now with platform refactoring..
 target_compile_definitions(${PLATFORM_DRIVERS_TARGET}
     PUBLIC
     MPS3_PLATFORM
-    ACTIVATION_BUF_SRAM_SZ=${ACTIVATION_BUF_SRAM_SZ}
-    $<$<BOOL:TA_CONFIG_FILE>:TIMING_ADAPTER_AVAILABLE>)
+    ACTIVATION_BUF_SRAM_SZ=${ACTIVATION_BUF_SRAM_SZ})
+
+## Platform component: uart
+add_subdirectory(${DEPENDENCY_ROOT_DIR}/core-platform/drivers/uart ${CMAKE_BINARY_DIR}/uart)
 
 # Add dependencies:
 target_link_libraries(${PLATFORM_DRIVERS_TARGET} PUBLIC
-    log cmsis_device)
+    log
+    cmsis_device
+    ethosu_uart_cmsdk_apb)
 
 # If Ethos-U is enabled, we need the driver library too
 if (ETHOS_U_NPU_ENABLED)
 
-
-    ## Platform component: Ethos-U initialization
-    target_sources(${PLATFORM_DRIVERS_TARGET}
-            PRIVATE
-            ${COMPONENTS_DIR}/ethosu_npu_init/ethosu_npu_init.c)
-    target_include_directories(${PLATFORM_DRIVERS_TARGET}
-            PUBLIC
-            ${COMPONENTS_DIR}/ethosu_npu_init/include)
-
-    ## Platform component: Ethos-U timing apadpter initialization
-    target_sources(${PLATFORM_DRIVERS_TARGET}
-            PRIVATE
-            ${COMPONENTS_DIR}/ethosu_ta_init/ethosu_ta_init.c)
-    target_include_directories(${PLATFORM_DRIVERS_TARGET}
-            PUBLIC
-            ${COMPONENTS_DIR}/ethosu_ta_init/include)
-
-    if (NOT DEFINED ETHOS_U_NPU_DRIVER_SRC_PATH)
-        message(FATAL_ERROR "ETHOS_U_NPU_DRIVER_SRC_PATH should"
-                " be defined when ETHOS_U_NPU_ENABLED=${ETHOS_U_NPU_ENABLED}")
-    endif()
-
-    # Timing adapter
-    if (NOT DEFINED ETHOS_U_NPU_TIMING_ADAPTER_SRC_PATH)
-        message(FATAL_ERROR "ETHOS_U_NPU_TIMING_ADAPTER_SRC_PATH should"
-                " be defined when ETHOS_U_NPU_ENABLED=${ETHOS_U_NPU_ENABLED}")
-    endif()
-
     target_compile_definitions(${PLATFORM_DRIVERS_TARGET}
         PUBLIC
         ARM_NPU)
 
-    # For the driver, we need to provide the CMSIS_PATH variable
-    set(CMSIS_PATH ${CMSIS_SRC_PATH} CACHE PATH "Path to CMSIS directory")
-    add_subdirectory(${ETHOS_U_NPU_DRIVER_SRC_PATH} ${CMAKE_BINARY_DIR}/ethos-u-driver)
-    add_subdirectory(${ETHOS_U_NPU_TIMING_ADAPTER_SRC_PATH} ${CMAKE_BINARY_DIR}/timing-adapter)
+    ## Platform component: Ethos-U initialization
+    add_subdirectory(${COMPONENTS_DIR}/ethosu_npu_init ${CMAKE_BINARY_DIR}/ethosu_npu_init)
 
     target_link_libraries(${PLATFORM_DRIVERS_TARGET}
         PUBLIC
-        ethosu_core_driver
-        timing_adapter)
+        ethosu_npu_init_component)
 
-    if (NOT DEFINED ETHOS_U_NPU_ID)
-        set(ETHOS_U_NPU_ID U55)
+    if (ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
+        ## Platform component: Ethos-U timing adapter initialization
+        add_subdirectory(${COMPONENTS_DIR}/ethosu_ta_init ${CMAKE_BINARY_DIR}/ethosu_ta_init)
+
+        target_link_libraries(${PLATFORM_DRIVERS_TARGET}
+            PUBLIC
+            ethosu_ta_init_component)
+        target_compile_definitions(${PLATFORM_DRIVERS_TARGET}
+            PUBLIC
+            ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
     endif()
 
-    if (NOT DEFINED ETHOS_U_NPU_MEMORY_MODE)
-        set(ETHOS_U_NPU_MEMORY_MODE Shared_Sram)
-    endif()
-
-    if (ETHOS_U_NPU_MEMORY_MODE STREQUAL Sram_Only)
-        if (ETHOS_U_NPU_ID STREQUAL U55)
-            set(ETHOS_U_NPU_MEMORY_MODE_FLAG "-DETHOS_U_NPU_MEMORY_MODE=ETHOS_U_NPU_MEM_MODE_SRAM_ONLY")
-        else ()
-            message(FATAL_ERROR "Non compatible Ethos-U NPU memory mode and processor ${ETHOS_U_NPU_MEMORY_MODE} - ${ETHOS_U_NPU_ID}. `sram_only` can be used only for Ethos-U55.")
-        endif ()
-
-    elseif (ETHOS_U_NPU_MEMORY_MODE STREQUAL Shared_Sram)
-        # Shared Sram can be used for Ethos-U55 and Ethos-U65
-        set(ETHOS_U_NPU_MEMORY_MODE_FLAG "-DETHOS_U_NPU_MEMORY_MODE=ETHOS_U_NPU_MEMORY_MODE_SHARED_SRAM")
-
-    elseif (ETHOS_U_NPU_MEMORY_MODE STREQUAL Dedicated_Sram)
-        # Dedicated Sram is used only for Ethos-U65
-        if (ETHOS_U_NPU_ID STREQUAL U65)
-            list(APPEND ETHOS_U_NPU_MEMORY_MODE_FLAG "-DETHOS_U_NPU_MEMORY_MODE=ETHOS_U_NPU_MEMORY_MODE_DEDICATED_SRAM" "-DETHOS_U_NPU_CACHE_SIZE=${ETHOS_U_NPU_CACHE_SIZE}")
-        else ()
-            message(FATAL_ERROR "Non compatible Ethos-U NPU memory mode and processor ${ETHOS_U_NPU_MEMORY_MODE} - ${ETHOS_U_NPU_ID}. `dedicated_sram` can be used only for Ethos-U65.")
-        endif ()
-    else ()
-        message(FATAL_ERROR "Non compatible Ethos-U NPU memory mode ${ETHOS_U_NPU_MEMORY_MODE}")
-    endif ()
-
-    target_compile_definitions(${PLATFORM_DRIVERS_TARGET}
-        PUBLIC
-        ${ETHOS_U_NPU_MEMORY_MODE_FLAG})
 endif()
 
 # 5. Display status:
diff --git a/source/hal/components/lcd_mps3/include/glcd_mps3.h b/source/hal/platform/mps3/include/glcd_mps3.h
similarity index 96%
rename from source/hal/components/lcd_mps3/include/glcd_mps3.h
rename to source/hal/platform/mps3/include/glcd_mps3.h
index 313d4ca..5cb5a54 100644
--- a/source/hal/components/lcd_mps3/include/glcd_mps3.h
+++ b/source/hal/platform/mps3/include/glcd_mps3.h
@@ -57,7 +57,7 @@
 #define ROTATE180   1               /* 1 to rotate the screen for 180 deg. */
 #endif
 
-/*------------------------- Speed dependant settings -------------------------*/
+/*------------------------- Speed dependent settings -------------------------*/
 
 /* If processor works on high frequency delay has to be increased, it can be
    increased by factor 2^N by this constant. */
@@ -66,10 +66,10 @@
 /*---------------------- Graphic LCD size definitions ------------------------*/
 #if (LANDSCAPE == 1)
    #define GLCD_WIDTH       320                 /* Screen Width (in pixels). */
-   #define GLCD_HEIGHT      240                 /* Screen Hight (in pixels). */
+   #define GLCD_HEIGHT      240                 /* Screen Height (in pixels). */
 #else
    #define GLCD_WIDTH       240                 /* Screen Width (in pixels). */
-   #define GLCD_HEIGHT      320                 /* Screen Hight (in pixels). */
+   #define GLCD_HEIGHT      320                 /* Screen Height (in pixels). */
 #endif
 
 #define BPP                 16                  /* Bits per pixel.           */
diff --git a/source/hal/platform/mps3/source/device_mps3.h b/source/hal/platform/mps3/source/device_mps3.h
new file mode 100644
index 0000000..9447c07
--- /dev/null
+++ b/source/hal/platform/mps3/source/device_mps3.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2022 Arm Limited. All rights reserved.
+ * 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 DEVICE_MPS3_H
+#define DEVICE_MPS3_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdio.h>
+#include <stdint.h>
+
+/**
+ * @brief   Gets the core clock set for MPS3.
+ * @return  Clock value in Hz.
+ **/
+uint32_t GetMPS3CoreClock(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DEVICE_MPS3_H */
diff --git a/source/hal/components/lcd_mps3/include/font_9x15_h.h b/source/hal/platform/mps3/source/font_9x15_h.h
similarity index 99%
rename from source/hal/components/lcd_mps3/include/font_9x15_h.h
rename to source/hal/platform/mps3/source/font_9x15_h.h
index b8b6bdc..bbfb930 100644
--- a/source/hal/components/lcd_mps3/include/font_9x15_h.h
+++ b/source/hal/platform/mps3/source/font_9x15_h.h
@@ -125,4 +125,4 @@
 };
 
 
-#endif /* FONT_9x15_H_H */
\ No newline at end of file
+#endif /* FONT_9x15_H_H */
diff --git a/source/hal/components/lcd_mps3/glcd_mps3.c b/source/hal/platform/mps3/source/glcd_mps3.c
similarity index 98%
rename from source/hal/components/lcd_mps3/glcd_mps3.c
rename to source/hal/platform/mps3/source/glcd_mps3.c
index 55a6575..9a375f2 100644
--- a/source/hal/components/lcd_mps3/glcd_mps3.c
+++ b/source/hal/platform/mps3/source/glcd_mps3.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
+ * Copyright (c) 2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,6 +20,8 @@
 #include "font_9x15_h.h"
 #include "smm_mps3.h"
 
+#include "peripheral_memmap.h"      /* Peripheral memory map definitions. */
+
 /*-------------- CLCD Controller Internal Register addresses ----------------*/
 #define CHAR_COM        ((volatile unsigned int *)(CLCD_CONFIG_BASE + 0x000))
 #define CHAR_DAT        ((volatile unsigned int *)(CLCD_CONFIG_BASE + 0x004))
diff --git a/source/hal/platform/mps3/source/include/device_mps3.h b/source/hal/platform/mps3/source/include/device_mps3.h
deleted file mode 100644
index 445965d..0000000
--- a/source/hal/platform/mps3/source/include/device_mps3.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
- * 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 DEVICE_MPS3_H
-#define DEVICE_MPS3_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "smm_mps3.h"   /* Memory map for MPS3. */
-
-#include <stdio.h>
-
-#define PERIF_CLK               (25000000) /* Clock source for APB peripherals */
-
-typedef struct _CMSDK_UART_TypeDef_
-{
-    __IO uint32_t  DATA;        /* Offset: 0x000 (R/W) Data Register.    */
-    __IO uint32_t  STATE;       /* Offset: 0x004 (R/W) Status Register.  */
-    __IO uint32_t  CTRL;        /* Offset: 0x008 (R/W) Control Register. */
-
-    union {
-    __I  uint32_t  INTSTATUS;   /* Offset: 0x00C (R/ ) Interrupt Status Register. */
-    __O  uint32_t  INTCLEAR;    /* Offset: 0x00C ( /W) Interrupt Clear Register. */
-    };
-    __IO uint32_t  BAUDDIV;     /* Offset: 0x010 (R/W) Baudrate Divider Register. */
-
-} CMSDK_UART_TypeDef;
-
-#define CMSDK_UART0             ((CMSDK_UART_TypeDef *)CMSDK_UART0_BASE)
-
-/* CMSDK_UART DATA Register Definitions. */
-#define CMSDK_UART_DATA_Pos               0                                             /* CMSDK_UART_DATA_Pos: DATA Position. */
-#define CMSDK_UART_DATA_Msk              (0xFFul << CMSDK_UART_DATA_Pos)                /* CMSDK_UART DATA: DATA Mask. */
-
-/* CMSDK_UART STATE Register Definitions. */
-#define CMSDK_UART_STATE_RXOR_Pos         3                                             /* CMSDK_UART STATE: RXOR Position. */
-#define CMSDK_UART_STATE_RXOR_Msk         (0x1ul << CMSDK_UART_STATE_RXOR_Pos)          /* CMSDK_UART STATE: RXOR Mask. */
-
-#define CMSDK_UART_STATE_TXOR_Pos         2                                             /* CMSDK_UART STATE: TXOR Position. */
-#define CMSDK_UART_STATE_TXOR_Msk         (0x1ul << CMSDK_UART_STATE_TXOR_Pos)          /* CMSDK_UART STATE: TXOR Mask. */
-
-#define CMSDK_UART_STATE_RXBF_Pos         1                                             /* CMSDK_UART STATE: RXBF Position. */
-#define CMSDK_UART_STATE_RXBF_Msk         (0x1ul << CMSDK_UART_STATE_RXBF_Pos)          /* CMSDK_UART STATE: RXBF Mask. */
-
-#define CMSDK_UART_STATE_TXBF_Pos         0                                             /* CMSDK_UART STATE: TXBF Position. */
-#define CMSDK_UART_STATE_TXBF_Msk         (0x1ul << CMSDK_UART_STATE_TXBF_Pos )         /* CMSDK_UART STATE: TXBF Mask. */
-
-/* CMSDK_UART CTRL Register Definitions. */
-#define CMSDK_UART_CTRL_HSTM_Pos          6                                             /* CMSDK_UART CTRL: HSTM Position. */
-#define CMSDK_UART_CTRL_HSTM_Msk          (0x01ul << CMSDK_UART_CTRL_HSTM_Pos)          /* CMSDK_UART CTRL: HSTM Mask. */
-
-#define CMSDK_UART_CTRL_RXORIRQEN_Pos     5                                             /* CMSDK_UART CTRL: RXORIRQEN Position. */
-#define CMSDK_UART_CTRL_RXORIRQEN_Msk     (0x01ul << CMSDK_UART_CTRL_RXORIRQEN_Pos)     /* CMSDK_UART CTRL: RXORIRQEN Mask. */
-
-#define CMSDK_UART_CTRL_TXORIRQEN_Pos     4                                             /* CMSDK_UART CTRL: TXORIRQEN Position. */
-#define CMSDK_UART_CTRL_TXORIRQEN_Msk     (0x01ul << CMSDK_UART_CTRL_TXORIRQEN_Pos)     /* CMSDK_UART CTRL: TXORIRQEN Mask. */
-
-#define CMSDK_UART_CTRL_RXIRQEN_Pos       3                                             /* CMSDK_UART CTRL: RXIRQEN Position. */
-#define CMSDK_UART_CTRL_RXIRQEN_Msk       (0x01ul << CMSDK_UART_CTRL_RXIRQEN_Pos)       /* CMSDK_UART CTRL: RXIRQEN Mask. */
-
-#define CMSDK_UART_CTRL_TXIRQEN_Pos       2                                             /* CMSDK_UART CTRL: TXIRQEN Position. */
-#define CMSDK_UART_CTRL_TXIRQEN_Msk       (0x01ul << CMSDK_UART_CTRL_TXIRQEN_Pos)       /* CMSDK_UART CTRL: TXIRQEN Mask. */
-
-#define CMSDK_UART_CTRL_RXEN_Pos          1                                             /* CMSDK_UART CTRL: RXEN Position. */
-#define CMSDK_UART_CTRL_RXEN_Msk          (0x01ul << CMSDK_UART_CTRL_RXEN_Pos)          /* CMSDK_UART CTRL: RXEN Mask. */
-
-#define CMSDK_UART_CTRL_TXEN_Pos          0                                             /* CMSDK_UART CTRL: TXEN Position. */
-#define CMSDK_UART_CTRL_TXEN_Msk          (0x01ul << CMSDK_UART_CTRL_TXEN_Pos)          /* CMSDK_UART CTRL: TXEN Mask. */
-
-/* CMSDK_UART INTSTATUS\INTCLEAR Register Definitions. */
-#define CMSDK_UART_INT_RXORIRQ_Pos        3                                             /* CMSDK_UART INT: RXORIRQ Position. */
-#define CMSDK_UART_INT_RXORIRQ_Msk        (0x01ul << CMSDK_UART_INT_RXORIRQ_Pos)        /* CMSDK_UART INT: RXORIRQ Mask. */
-
-#define CMSDK_UART_INT_TXORIRQ_Pos        2                                             /* CMSDK_UART INT: TXORIRQ Position. */
-#define CMSDK_UART_INT_TXORIRQ_Msk        (0x01ul << CMSDK_UART_INT_TXORIRQ_Pos)        /* CMSDK_UART INT: TXORIRQ Mask. */
-
-#define CMSDK_UART_INT_RXIRQ_Pos          1                                             /* CMSDK_UART INT: RXIRQ Position. */
-#define CMSDK_UART_INT_RXIRQ_Msk          (0x01ul << CMSDK_UART_INT_RXIRQ_Pos)          /* CMSDK_UART INT: RXIRQ Mask. */
-
-#define CMSDK_UART_INT_TXIRQ_Pos          0                                             /* CMSDK_UART INT: TXIRQ Position. */
-#define CMSDK_UART_INT_TXIRQ_Msk          (0x01ul << CMSDK_UART_INT_TXIRQ_Pos)          /* CMSDK_UART INT: TXIRQ Mask. */
-
-/* CMSDK_UART BAUDDIV Register Definitions. */
-#define CMSDK_UART_BAUDDIV_Pos            0                                             /* CMSDK_UART BAUDDIV: BAUDDIV Position. */
-#define CMSDK_UART_BAUDDIV_Msk           (0xFFFFFul << CMSDK_UART_BAUDDIV_Pos)
-
-/**
- * @brief   Gets the core clock set for MPS3.
- * @return  Clock value in Hz.
- **/
-uint32_t GetMPS3CoreClock(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* DEVICE_MPS3_H */
diff --git a/source/hal/platform/mps3/source/platform_drivers.c b/source/hal/platform/mps3/source/platform_drivers.c
index fc119ab..00afb78 100644
--- a/source/hal/platform/mps3/source/platform_drivers.c
+++ b/source/hal/platform/mps3/source/platform_drivers.c
@@ -21,14 +21,16 @@
 #include "device_mps3.h"    /* FPGA level definitions and functions. */
 #include "uart_stdout.h"    /* stdout over UART. */
 
+#include "smm_mps3.h"   /* Memory map for MPS3. */
+
 #include <string.h>         /* For strncpy */
 
 #if defined(ARM_NPU)
 #include "ethosu_npu_init.h"
 
-#if defined(TIMING_ADAPTER_AVAILABLE)
+#if defined(ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
 #include "ethosu_ta_init.h"
-#endif /* TIMING_ADAPTER_AVAILABLE */
+#endif /* ETHOS_U_NPU_TIMING_ADAPTER_ENABLED */
 
 #endif /* ARM_NPU */
 
@@ -56,14 +58,14 @@
 
 #if defined(ARM_NPU)
 
-#if defined(TIMING_ADAPTER_AVAILABLE)
+#if defined(ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
     /* If the platform has timing adapter blocks along with Ethos-U core
      * block, initialise them here. */
     if (0 != (err = arm_ethosu_timing_adapter_init()))
     {
         return err;
     }
-#endif /* TIMING_ADAPTER_AVAILABLE */
+#endif /* ETHOS_U_NPU_TIMING_ADAPTER_ENABLED */
 
     int state;
 
diff --git a/source/hal/platform/mps3/source/include/smm_mps3.h b/source/hal/platform/mps3/source/smm_mps3.h
similarity index 99%
rename from source/hal/platform/mps3/source/include/smm_mps3.h
rename to source/hal/platform/mps3/source/smm_mps3.h
index bc93fdf..8d5614a 100644
--- a/source/hal/platform/mps3/source/include/smm_mps3.h
+++ b/source/hal/platform/mps3/source/smm_mps3.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
+ * Copyright (c) 2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/source/hal/platform/mps3/source/timer_mps3.c b/source/hal/platform/mps3/source/timer_mps3.c
index 16ff4cd..6da026f 100644
--- a/source/hal/platform/mps3/source/timer_mps3.c
+++ b/source/hal/platform/mps3/source/timer_mps3.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
+ * Copyright (c) 2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,6 +18,7 @@
 
 #include "log_macros.h"
 #include "device_mps3.h"
+#include "smm_mps3.h"   /* Memory map for MPS3. */
 
 static uint64_t cpu_cycle_count = 0;    /* 64-bit cpu cycle counter */
 
diff --git a/source/hal/platform/native/CMakeLists.txt b/source/hal/platform/native/CMakeLists.txt
index 0435cf1..0b9fee1 100644
--- a/source/hal/platform/native/CMakeLists.txt
+++ b/source/hal/platform/native/CMakeLists.txt
@@ -21,7 +21,7 @@
 
 cmake_minimum_required(VERSION 3.15.6)
 
-set(PLATFORM_DRIVERS_TARGET platform-drivers)
+set(PLATFORM_DRIVERS_TARGET platform_drivers)
 
 project(${PLATFORM_DRIVERS_TARGET}
     DESCRIPTION     "Platform drivers library for native target"
diff --git a/source/hal/platform/simple/CMakeLists.txt b/source/hal/platform/simple/CMakeLists.txt
index 105fc9b..df4df00 100644
--- a/source/hal/platform/simple/CMakeLists.txt
+++ b/source/hal/platform/simple/CMakeLists.txt
@@ -20,7 +20,7 @@
 #########################################################
 
 cmake_minimum_required(VERSION 3.15.6)
-set(PLATFORM_DRIVERS_TARGET platform-drivers)
+set(PLATFORM_DRIVERS_TARGET platform_drivers)
 project(${PLATFORM_DRIVERS_TARGET}
     DESCRIPTION     "Platform drivers library for a generic target"
     LANGUAGES       C CXX ASM)
@@ -52,13 +52,6 @@
 configure_file("${IRQ_PROFILE_TEMPLATE}" "${SOURCE_GEN_DIR}/peripheral_irqs.h")
 configure_file("${MEM_REGIONS_TEMPLATE}" "${SOURCE_GEN_DIR}/mem_regions.h")
 
-## If a TA config file is provided, we generate a settings file
-if (DEFINED TA_CONFIG_FILE)
-    include(${TA_CONFIG_FILE})
-    set(TA_SETTINGS_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/timing_adapter_settings.template)
-    configure_file("${TA_SETTINGS_TEMPLATE}" "${SOURCE_GEN_DIR}/timing_adapter_settings.h")
-endif()
-
 # 4. Create static library
 add_library(${PLATFORM_DRIVERS_TARGET} STATIC)
 
@@ -81,101 +74,45 @@
 endif()
 
 ## Platform component: uart
-target_sources(${PLATFORM_DRIVERS_TARGET}
-        PRIVATE
-        ${COMPONENTS_DIR}/uart_pl011/uart_pl011.c)
-target_include_directories(${PLATFORM_DRIVERS_TARGET}
-        PUBLIC
-        ${COMPONENTS_DIR}/uart_pl011/include)
+add_subdirectory(${DEPENDENCY_ROOT_DIR}/core-platform/drivers/uart ${CMAKE_BINARY_DIR}/uart)
 
 ## Compile defs
 target_compile_definitions(${PLATFORM_DRIVERS_TARGET}
     PUBLIC
-    ACTIVATION_BUF_SRAM_SZ=${ACTIVATION_BUF_SRAM_SZ}
-    $<$<BOOL:TA_CONFIG_FILE>:TIMING_ADAPTER_AVAILABLE>)
+    ACTIVATION_BUF_SRAM_SZ=${ACTIVATION_BUF_SRAM_SZ})
 
 # Add dependencies:
 target_link_libraries(${PLATFORM_DRIVERS_TARGET}  PUBLIC
         cmsis_device
-        log)
+        log
+        ethosu_uart_pl011)
 
 # If Ethos-U is enabled, we need the driver library too
 if (ETHOS_U_NPU_ENABLED)
 
-    ## Platform component: Ethos-U initialization
-    target_sources(${PLATFORM_DRIVERS_TARGET}
-            PRIVATE
-            ${COMPONENTS_DIR}/ethosu_npu_init/ethosu_npu_init.c)
-    target_include_directories(${PLATFORM_DRIVERS_TARGET}
-            PUBLIC
-            ${COMPONENTS_DIR}/ethosu_npu_init/include)
-
-    ## Platform component: Ethos-U timing apadpter initialization
-    target_sources(${PLATFORM_DRIVERS_TARGET}
-            PRIVATE
-            ${COMPONENTS_DIR}/ethosu_ta_init/ethosu_ta_init.c)
-    target_include_directories(${PLATFORM_DRIVERS_TARGET}
-            PUBLIC
-            ${COMPONENTS_DIR}/ethosu_ta_init/include)
-
-    if (NOT DEFINED ETHOS_U_NPU_DRIVER_SRC_PATH)
-        message(FATAL_ERROR "ETHOS_U_NPU_DRIVER_SRC_PATH should"
-                " be defined when ETHOS_U_NPU_ENABLED=${ETHOS_U_NPU_ENABLED}")
-    endif()
-
-    # Timing adapter
-    if (NOT DEFINED ETHOS_U_NPU_TIMING_ADAPTER_SRC_PATH)
-        message(FATAL_ERROR "ETHOS_U_NPU_TIMING_ADAPTER_SRC_PATH should"
-                " be defined when ETHOS_U_NPU_ENABLED=${ETHOS_U_NPU_ENABLED}")
-    endif()
-
     target_compile_definitions(${PLATFORM_DRIVERS_TARGET}
         PUBLIC
         ARM_NPU)
 
-    # For the driver, we need to provide the CMSIS_PATH variable
-    set(CMSIS_PATH ${CMSIS_SRC_PATH} CACHE PATH "Path to CMSIS directory")
-    add_subdirectory(${ETHOS_U_NPU_DRIVER_SRC_PATH} ${CMAKE_BINARY_DIR}/ethos-u-driver)
-    add_subdirectory(${ETHOS_U_NPU_TIMING_ADAPTER_SRC_PATH} ${CMAKE_BINARY_DIR}/timing-adapter)
+    ## Platform component: Ethos-U initialization
+    add_subdirectory(${COMPONENTS_DIR}/ethosu_npu_init ${CMAKE_BINARY_DIR}/ethosu_npu_init)
 
     target_link_libraries(${PLATFORM_DRIVERS_TARGET}
         PUBLIC
-        ethosu_core_driver
-        timing_adapter)
+        ethosu_npu_init_component)
 
-    if (NOT DEFINED ETHOS_U_NPU_ID)
-        set(ETHOS_U_NPU_ID U55)
+    if (ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
+        ## Platform component: Ethos-U timing apadpter initialization
+        add_subdirectory(${COMPONENTS_DIR}/ethosu_ta_init ${CMAKE_BINARY_DIR}/ethosu_ta_init)
+
+        target_link_libraries(${PLATFORM_DRIVERS_TARGET}
+            PUBLIC
+            ethosu_ta_init_component)
+        target_compile_definitions(${PLATFORM_DRIVERS_TARGET}
+                PUBLIC
+                ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
     endif()
 
-    if (NOT DEFINED ETHOS_U_NPU_MEMORY_MODE)
-        set(ETHOS_U_NPU_MEMORY_MODE Shared_Sram)
-    endif()
-
-    if (ETHOS_U_NPU_MEMORY_MODE STREQUAL Sram_Only)
-        if (ETHOS_U_NPU_ID STREQUAL U55)
-            set(ETHOS_U_NPU_MEMORY_MODE_FLAG "-DETHOS_U_NPU_MEMORY_MODE=ETHOS_U_NPU_MEM_MODE_SRAM_ONLY")
-        else ()
-            message(FATAL_ERROR "Non compatible Ethos-U NPU memory mode and processor ${ETHOS_U_NPU_MEMORY_MODE} - ${ETHOS_U_NPU_ID}. `sram_only` can be used only for Ethos-U55.")
-        endif ()
-
-    elseif (ETHOS_U_NPU_MEMORY_MODE STREQUAL Shared_Sram)
-        # Shared Sram can be used for Ethos-U55 and Ethos-U65
-        set(ETHOS_U_NPU_MEMORY_MODE_FLAG "-DETHOS_U_NPU_MEMORY_MODE=ETHOS_U_NPU_MEMORY_MODE_SHARED_SRAM")
-
-    elseif (ETHOS_U_NPU_MEMORY_MODE STREQUAL Dedicated_Sram)
-        # Dedicated Sram is used only for Ethos-U65
-        if (ETHOS_U_NPU_ID STREQUAL U65)
-            list(APPEND ETHOS_U_NPU_MEMORY_MODE_FLAG "-DETHOS_U_NPU_MEMORY_MODE=ETHOS_U_NPU_MEMORY_MODE_DEDICATED_SRAM" "-DETHOS_U_NPU_CACHE_SIZE=${ETHOS_U_NPU_CACHE_SIZE}")
-        else ()
-            message(FATAL_ERROR "Non compatible Ethos-U NPU memory mode and processor ${ETHOS_U_NPU_MEMORY_MODE} - ${ETHOS_U_NPU_ID}. `dedicated_sram` can be used only for Ethos-U65.")
-        endif ()
-    else ()
-        message(FATAL_ERROR "Non compatible Ethos-U NPU memory mode ${ETHOS_U_NPU_MEMORY_MODE}")
-    endif ()
-
-    target_compile_definitions(${PLATFORM_DRIVERS_TARGET}
-        PUBLIC
-        ${ETHOS_U_NPU_MEMORY_MODE_FLAG})
 endif()
 
 # 5. Display status:
diff --git a/source/hal/platform/simple/include/ethosu_mem_config.h b/source/hal/platform/simple/include/ethosu_mem_config.h
deleted file mode 100644
index aa0cfda..0000000
--- a/source/hal/platform/simple/include/ethosu_mem_config.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2022 Arm Limited. All rights reserved.
- * 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 ETHOS_U_NPU_MEM_CONFIG_H
-#define ETHOS_U_NPU_MEM_CONFIG_H
-
-#define ETHOS_U_NPU_MEMORY_MODE_SRAM_ONLY           0
-#define ETHOS_U_NPU_MEMORY_MODE_SHARED_SRAM         1
-#define ETHOS_U_NPU_MEMORY_MODE_DEDICATED_SRAM      2
-
-#define ETHOS_U_MEM_BYTE_ALIGNMENT                  16
-
-#ifndef ETHOS_U_NPU_MEMORY_MODE
-    #define ETHOS_U_NPU_MEMORY_MODE                 ETHOS_U_MEMORY_MODE_SHARED_SRAM
-#endif /* ETHOS_U_NPU_MEMORY_MODE */
-
-#if (ETHOS_U_NPU_MEMORY_MODE==ETHOS_U_NPU_MEMORY_MODE_DEDICATED_SRAM)
-    #ifndef ETHOS_U_NPU_CACHE_SIZE
-        #define ETHOS_U_CACHE_BUF_SZ                (393216U)  /* See vela doc for reference */
-    #else
-        #define ETHOS_U_CACHE_BUF_SZ                ETHOS_U_NPU_CACHE_SIZE
-    #endif /* ETHOS_U_NPU_CACHE_SIZE */
-#else
-    #define ETHOS_U_CACHE_BUF_SZ    (0U)
-#endif /* CACHE_BUF_SZ */
-
-/**
- * Activation buffer aka tensor arena section name
- * We have to place the tensor arena in different region based on the memory config.
- **/
-#if (ETHOS_U_NPU_MEMORY_MODE==ETHOS_U_NPU_MEMORY_MODE_SHARED_SRAM)
-    #define ACTIVATION_BUF_SECTION      section(".bss.NoInit.activation_buf_sram")
-    #define ACTIVATION_BUF_SECTION_NAME ("SRAM")
-#elif (ETHOS_U_NPU_MEMORY_MODE==ETHOS_U_NPU_MEMORY_MODE_SRAM_ONLY)
-    #define ACTIVATION_BUF_SECTION      section(".bss.NoInit.activation_buf_sram")
-    #define ACTIVATION_BUF_SECTION_NAME ("SRAM")
-#elif (ETHOS_U_NPU_MEMORY_MODE==ETHOS_U_NPU_MEMORY_MODE_DEDICATED_SRAM)
-    #define ACTIVATION_BUF_SECTION      section("activation_buf_dram")
-    #define CACHE_BUF_SECTION           section(".bss.NoInit.ethos_u_cache")
-    #define ACTIVATION_BUF_SECTION_NAME ("DDR/DRAM")
-    #define CACHE_BUF_ATTRIBUTE         __attribute__((aligned(ETHOS_U_MEM_BYTE_ALIGNMENT), CACHE_BUF_SECTION))
-#endif
-
-#endif /* ETHOS_U_NPU_MEM_CONFIG_H */
diff --git a/source/hal/platform/simple/source/platform_drivers.c b/source/hal/platform/simple/source/platform_drivers.c
index 6a89c61..aae867c 100644
--- a/source/hal/platform/simple/source/platform_drivers.c
+++ b/source/hal/platform/simple/source/platform_drivers.c
@@ -23,9 +23,9 @@
 #if defined(ARM_NPU)
 #include "ethosu_npu_init.h"
 
-#if defined(TIMING_ADAPTER_AVAILABLE)
+#if defined(ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
 #include "ethosu_ta_init.h"
-#endif /* TIMING_ADAPTER_AVAILABLE */
+#endif /* ETHOS_U_NPU_TIMING_ADAPTER_ENABLED */
 
 #endif /* ARM_NPU */
 
@@ -45,13 +45,13 @@
 
     /* If the platform has timing adapter blocks along with Ethos-U core
      * block, initialise them here. */
-#if defined(TIMING_ADAPTER_AVAILABLE)
+#if defined(ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
     int err;
 
     if (0 != (err = arm_ethosu_timing_adapter_init())) {
         return err;
     }
-#endif /* TIMING_ADAPTER_AVAILABLE */
+#endif /* ETHOS_U_NPU_TIMING_ADAPTER_ENABLED */
 
     /* If Arm Ethos-U NPU is to be used, we initialise it here */
     if (0 != (state = arm_ethosu_npu_init())) {
diff --git a/source/hal/profiles/bare-metal/bsp/retarget.c b/source/hal/profiles/bare-metal/bsp/retarget.c
index 9ed3004..ac9b282 100644
--- a/source/hal/profiles/bare-metal/bsp/retarget.c
+++ b/source/hal/profiles/bare-metal/bsp/retarget.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -64,6 +64,13 @@
 const char __stdout_name[] __attribute__((aligned(4))) = "STDOUT";
 const char __stderr_name[] __attribute__((aligned(4))) = "STDERR";
 
+__attribute__((noreturn)) static void UartEndSimulation(int code)
+{
+    UartPutc((char) 0x4);  // End of simulation
+    UartPutc((char) code); // Exit code
+    while(1);
+}
+
 void _ttywrch(int ch) {
     (void)fputc(ch, stdout);
 }
diff --git a/source/hal/profiles/bare-metal/data_acquisition/data_acq.c b/source/hal/profiles/bare-metal/data_acquisition/data_acq.c
index b7eba2d..84d80a6 100644
--- a/source/hal/profiles/bare-metal/data_acquisition/data_acq.c
+++ b/source/hal/profiles/bare-metal/data_acquisition/data_acq.c
@@ -32,7 +32,7 @@
  **/
 static int get_uart_user_input(char* user_input, int size)
 {
-    if (true != GetLine(user_input, size - 1)) {
+    if (1 != GetLine(user_input, size - 1)) {
         return 1;
     }
     return 0;
diff --git a/source/profiler/CMakeLists.txt b/source/profiler/CMakeLists.txt
index b02b276..8fcea1f 100644
--- a/source/profiler/CMakeLists.txt
+++ b/source/profiler/CMakeLists.txt
@@ -43,6 +43,8 @@
 target_compile_definitions(profiler PUBLIC
         $<$<BOOL:${CPU_PROFILE_ENABLED}>:CPU_PROFILE_ENABLED>)
 
+# Display status
+message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
 message(STATUS "*******************************************************")
 message(STATUS "Library                                : " profiler)
 message(STATUS "CMAKE_SYSTEM_PROCESSOR                 : " ${CMAKE_SYSTEM_PROCESSOR})
