diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/port/cy_hal.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/port/cy_hal.c
new file mode 100644
index 0000000000..f5a0716697
--- /dev/null
+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/port/cy_hal.c
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2020 Arduino SA
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** @file
+ * Provides cyhal porting to generic mbed APIs
+ */
+#include "cyhal.h"
+#include "mbed_thread.h"
+#include "mbed_wait_api.h"
+
+static cyhal_sdio_t sdio_obj;
+
+/* Edit Pin configuration */
+const pinconfig_t PinConfig[] = {
+
+ [CYBSP_WIFI_WL_REG_ON] = WIFI_WL_REG_ON,
+#ifdef CYBSP_WIFI_32K_CLK
+ [CYBSP_WIFI_32K_CLK] = WIFI_32K_CLK,
+#endif /* CYBSP_WIFI_32K_CLK */
+ [CYBSP_LED1 ] = BSP_LED1,
+ [CYBSP_LED2 ] = BSP_LED2,
+ [CYBSP_WIFI_SDIO_CMD] = WIFI_SDIO_CMD,
+ [CYBSP_WIFI_SDIO_CLK] = WIFI_SDIO_CLK,
+ [CYBSP_WIFI_SDIO_D0 ] = WIFI_SDIO_D0,
+ [CYBSP_WIFI_SDIO_D1 ] = WIFI_SDIO_D1,
+ [CYBSP_WIFI_SDIO_D2 ] = WIFI_SDIO_D2,
+ [CYBSP_WIFI_SDIO_D3 ] = WIFI_SDIO_D3,
+ [CYBSP_SDIO_OOB_IRQ ] = WIFI_SDIO_OOB_IRQ //VIKR
+};
+
+void Cy_SysLib_Delay(uint32_t milliseconds)
+{
+ thread_sleep_for(milliseconds);
+}
+
+void Cy_SysLib_DelayUs(uint16_t microseconds)
+{
+ wait_us(microseconds);
+}
+
+void cyhal_system_delay_ms(uint32_t milliseconds)
+{
+ Cy_SysLib_Delay(milliseconds);
+}
+
+cyhal_sdio_t *cybsp_get_wifi_sdio_obj(void)
+{
+ return &sdio_obj;
+}
diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/port/cy_syslib.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/port/cy_syslib.h
new file mode 100644
index 0000000000..7671d853cf
--- /dev/null
+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_WHD/port/cy_syslib.h
@@ -0,0 +1,592 @@
+/***************************************************************************//**
+* \file cy_syslib.h
+* \version 2.40.1
+*
+* Provides an API declaration of the SysLib driver.
+*
+********************************************************************************
+* \copyright
+* Copyright 2016-2019 Cypress Semiconductor Corporation
+* SPDX-License-Identifier: Apache-2.0
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*******************************************************************************/
+
+/**
+* \addtogroup group_syslib
+* \{
+* The system libraries provide APIs that can be called in the user application
+* to handle the timing, logical checking or register.
+*
+* The functions and other declarations used in this driver are in cy_syslib.h.
+* You can include cy_pdl.h (ModusToolbox only) to get access to all functions
+* and declarations in the PDL.
+*
+* The SysLib driver contains a set of different system functions. These functions
+* can be called in the application routine. Major features of the system library:
+* * Delay functions
+* * The register Read/Write macro
+* * Assert and Halt
+* * Assert Classes and Levels
+* * A software reset
+* * Reading the reset cause
+* * An API to invalidate the flash cache and buffer
+* * Data manipulation macro
+* * A variable type definition from MISRA-C which specifies signedness
+* * Cross compiler compatible attributes
+* * Getting a silicon-unique ID API
+* * Setting wait states API
+* * Resetting the backup domain API
+* * APIs to serve Fault handler
+*
+* \section group_syslib_configuration Configuration Considerations
+* Assertion Usage
+* Use the CY_ASSERT() macro to check expressions that must be true as long as the
+* program is running correctly. It is a convenient way to insert sanity checks.
+* The CY_ASSERT() macro is defined in the cy_syslib.h file which is part of
+* the PDL library. The behavior of the macro is as follows: if the expression
+* passed to the macro is false, output an error message that includes the file
+* name and line number, and then halts the CPU. \n
+* In case of fault, the CY_ASSERT() macro calls the Cy_SysLib_AssertFailed() function.
+* This is a weakly linked function. The default implementation stores the file
+* name and line number of the ASSERT into global variables, cy_assertFileName
+* and cy_assertLine . It then calls the Cy_SysLib_Halt() function.
+* \note Firmware can redefine the Cy_SysLib_AssertFailed() function for custom processing.
+*
+* The PDL source code uses this assert mechanism extensively. It is recommended
+* that you enable asserts when debugging firmware. \n
+* Assertion Classes and Levels
+* The PDL defines three assert classes, which correspond to different kinds
+* of parameters. There is a corresponding assert "level" for each class.
+*
+*
+* MISRA Rule |
+* Rule Class (Required/Advisory) |
+* Rule Description |
+* Description of Deviation(s) |
+*
+*
+* 1.2 |
+* R |
+* No reliance shall be placed on undefined or unspecified behaviour. |
+* This specific behavior is explicitly covered in rule 20.1. |
+*
+*
+* 2.1 |
+* R |
+* This function contains a mixture of in-line assembler statements and C statements. |
+* This si required by design of the Cy_SysLib_Halt function. |
+*
+*
+* 18.4 |
+* R |
+* Unions shall not be used. |
+* The unions are used for CFSR, HFSR and SHCSR Fault Status Registers
+* content access as a word in code and as a structure during debug. |
+*
+*
+* 19.13 |
+* A |
+* The # and ## operators should not be used. |
+* The ## preprocessor operator is used in macros to form the field mask. |
+*
+*
+* 20.1 |
+* R |
+* Reserved identifiers, macros and functions in the standard library, shall not be
+* defined, redefined or undefined. |
+* The driver defines the macros with leading underscores
+* (_CLR_SET_FLD/_BOOL2FLD/_FLD2BOOL) and therefore generates this MISRA violation. |
+*
+*
+*
+* \section group_syslib_changelog Changelog
+*
+* Version | Changes | Reason for Change |
+*
+* 2.40.1 |
+* Correct the CY_RAMFUNC_BEGIN macro for the IAR compiler. |
+* Removed the IAR compiler warning. |
+*
+*
+* 2.40 |
+* Added new macros CY_SYSLIB_DIV_ROUND and CY_SYSLIB_DIV_ROUNDUP to easy perform integer division with rounding. |
+* Improve PDL code base. |
+*
+*
+* 2.30 |
+* Updated implementation of the Cy_SysLib_AsmInfiniteLoop() function to be compatible with ARMC6. |
+* Provided support for the ARM Compiler 6. |
+*
+*
+* Minor documentation edits. |
+* Documentation update and clarification. |
+*
+*
+* Added new macros CY_RAMFUNC_BEGIN and CY_RAMFUNC_END for convenient placement function in RAM for all supported compilers. |
+* Improve user experience. |
+*
+*
+* 2.20 |
+* Updated implementation of the \ref Cy_SysLib_AssertFailed() function to be available in Release and Debug modes. |
+* Provided support for the PDL static library in Release mode. |
+*
+*
+* Minor documentation edits. |
+* Documentation update and clarification. |
+*
+*
+* 2.10 |
+* Flattened the organization of the driver source code into the single source directory and the single include directory. |
+* Driver library directory-structure simplification. |
+*
+*
+* Added the following macros: \ref CY_REG32_CLR_SET, \ref _CLR_SET_FLD16U, \ref CY_REG16_CLR_SET, \ref _CLR_SET_FLD8U, \ref CY_REG8_CLR_SET |
+* Register access simplification. |
+*
+*
+* Removed the Cy_SysLib_GetNumHfclkResetCause API function. |
+* This feature is not supported by SRSS_ver1. |
+*
+*
+* Added register access layer. Use register access macros instead
+* of direct register access using dereferenced pointers. |
+* Makes register access device-independent, so that the PDL does
+* not need to be recompiled for each supported part number. |
+*
+*
+* 2.0.1 |
+* Minor documentation edits |
+* Documentation update and clarification |
+*
+*
+* 2.0 |
+*
+* Added Cy_SysLib_ResetBackupDomain() API implementation. \n
+* Added CY_NOINLINE attribute implementation. \n
+* Added DIE_YEAR field to 64-bit unique ID return value of Cy_SysLib_GetUniqueId() API. \n
+* Added storing of SCB->HFSR, SCB->SHCSR registers and SCB->MMFAR, SCB->BFAR addresses to Fault Handler debug structure. \n
+* Optimized Cy_SysLib_SetWaitStates() API implementation.
+* |
+* Improvements made based on usability feedback. |
+*
+*
+* Added Assertion Classes and Levels. |
+* For error checking, parameter validation and status returns in the PDL API. |
+*
+*
+* Applied CY_NOINIT attribute to cy_assertFileName, cy_assertLine, and cy_faultFrame global variables. |
+* To store debug information into a non-zero init area for future analysis. |
+*
+*
+* Removed CY_WEAK attribute implementation. |
+* CMSIS __WEAK attribute should be used instead. |
+*
+*
+* 1.0 |
+* Initial version |
+* |
+*
+*
+*
+* \defgroup group_syslib_macros Macros
+* \defgroup group_syslib_functions Functions
+* \defgroup group_syslib_data_structures Data Structures
+* \defgroup group_syslib_enumerated_types Enumerated Types
+*
+*/
+
+#if !defined(CY_SYSLIB_H)
+#define CY_SYSLIB_H
+
+#include