From f0bac93493174b21c6514ca473c370ba10cf4908 Mon Sep 17 00:00:00 2001 From: Joakim Andersson Date: Mon, 17 Apr 2023 13:45:44 +0200 Subject: [PATCH] [nrf fromtree] platform: nordic_nrf: Add nrf9161 DK and nrf9120 SoC support Add support for the nrf9161 development kit and the nrf9120 SoC. Change-Id: I6e3c0a01b80e6d14b4bbc6befb7ab7e75b31ac4b Signed-off-by: Joakim Andersson (cherry picked from commit 4580bafdf8ab75950a3f0aca78f4cdce4d90d93b) --- .../nordic_nrf/common/nrf9120/preload.cmake | 21 +++++ .../nrf9161dk_nrf9161/CMakeLists.txt | 54 +++++++++++++ .../nordic_nrf/nrf9161dk_nrf9161/RTE_Device.h | 77 +++++++++++++++++++ .../nordic_nrf/nrf9161dk_nrf9161/config.cmake | 9 +++ .../nrf9161dk_nrf9161/config_tfm_target.h | 14 ++++ .../nordic_nrf/nrf9161dk_nrf9161/device_cfg.h | 20 +++++ .../nordic_nrf/nrf9161dk_nrf9161/nrf_board.h | 18 +++++ .../nrf9161dk_nrf9161/preload.cmake | 9 +++ .../services/include/tfm_ioctl_api.h | 43 +++++++++++ .../services/include/tfm_read_ranges.h | 28 +++++++ .../services/src/tfm_platform_system.c | 33 ++++++++ .../nrf9161dk_nrf9161/tfm_hal_platform.c | 13 ++++ .../tfm_peripherals_config.h | 38 +++++++++ 13 files changed, 377 insertions(+) create mode 100644 platform/ext/target/nordic_nrf/common/nrf9120/preload.cmake create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/CMakeLists.txt create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/RTE_Device.h create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/config.cmake create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/config_tfm_target.h create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/device_cfg.h create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/nrf_board.h create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/preload.cmake create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/include/tfm_ioctl_api.h create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/include/tfm_read_ranges.h create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/src/tfm_platform_system.c create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/tfm_hal_platform.c create mode 100644 platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/tfm_peripherals_config.h diff --git a/platform/ext/target/nordic_nrf/common/nrf9120/preload.cmake b/platform/ext/target/nordic_nrf/common/nrf9120/preload.cmake new file mode 100644 index 000000000..548083ba2 --- /dev/null +++ b/platform/ext/target/nordic_nrf/common/nrf9120/preload.cmake @@ -0,0 +1,21 @@ +# +# Copyright (c) 2023, Nordic Semiconductor ASA. +# +# SPDX-License-Identifier: BSD-3-Clause +# + +# preload.cmake is used to set things that related to the platform that are both +# immutable and global, which is to say they should apply to any kind of project +# that uses this platform. In practise this is normally compiler definitions and +# variables related to hardware. + +# Set architecture and CPU +set(TFM_SYSTEM_PROCESSOR cortex-m33) +set(TFM_SYSTEM_ARCHITECTURE armv8-m.main) +set(TFM_SYSTEM_DSP OFF) +set(CONFIG_TFM_FP_ARCH "fpv5-sp-d16") + +add_compile_definitions( + NRF9120_XXAA + NRF91_SERIES +) diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/CMakeLists.txt b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/CMakeLists.txt new file mode 100644 index 000000000..1ac111ea2 --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/CMakeLists.txt @@ -0,0 +1,54 @@ +# +# Copyright (c) 2023, Nordic Semiconductor ASA. +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +cmake_policy(SET CMP0076 NEW) +set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) +set(NRF_BOARD_SELECTED True) + +add_subdirectory(../common/nrf91 nrf91) + +target_include_directories(platform_region_defs + INTERFACE + ../common/nrf91/partition +) + +target_sources(platform_s + PRIVATE + $<$:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c> +) + +target_include_directories(platform_s + PUBLIC + . + ../common/nrf91/partition + services/include +) + +target_include_directories(platform_ns + PUBLIC + . +) + +if(BL2) + target_include_directories(platform_bl2 + PUBLIC + ../common/nrf91/partition + PRIVATE + . + ) +endif() + +if (TFM_PARTITION_PLATFORM) +install(FILES services/include/tfm_ioctl_api.h + DESTINATION ${TFM_INSTALL_PATH}/interface/include) +endif() + +#========================= tfm_spm ============================================# + +target_sources(tfm_spm + PRIVATE + tfm_hal_platform.c +) diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/RTE_Device.h b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/RTE_Device.h new file mode 100644 index 000000000..98c368ac5 --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/RTE_Device.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +#ifndef __RTE_DEVICE_H +#define __RTE_DEVICE_H + +// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART0] +// Configuration settings for Driver_USART0 in component ::Drivers:USART +#define RTE_USART0 1 +// Pin Selection (0xFFFFFFFF means Disconnected) +// TXD +#define RTE_USART0_TXD_PIN 27 +// RXD +#define RTE_USART0_RXD_PIN 26 +// RTS +#define RTE_USART0_RTS_PIN 14 +// CTS +#define RTE_USART0_CTS_PIN 15 +// Pin Configuration +// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART0] + +// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART1] +// Configuration settings for Driver_USART1 in component ::Drivers:USART +#define RTE_USART1 1 +// Pin Selection (0xFFFFFFFF means Disconnected) +// TXD +#define RTE_USART1_TXD_PIN 29 +// RXD +#define RTE_USART1_RXD_PIN 28 +// RTS +#define RTE_USART1_RTS_PIN 16 +// CTS +#define RTE_USART1_CTS_PIN 17 +// Pin Configuration +// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART1] + +// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART2] +// Configuration settings for Driver_USART2 in component ::Drivers:USART +#define RTE_USART2 0 +// Pin Selection (0xFFFFFFFF means Disconnected) +// TXD +#define RTE_USART2_TXD_PIN 0xFFFFFFFF +// RXD +#define RTE_USART2_RXD_PIN 0xFFFFFFFF +// RTS +#define RTE_USART2_RTS_PIN 0xFFFFFFFF +// CTS +#define RTE_USART2_CTS_PIN 0xFFFFFFFF +// Pin Configuration +// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART2] + +// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART3] +// Configuration settings for Driver_USART3 in component ::Drivers:USART +#define RTE_USART3 0 +// Pin Selection (0xFFFFFFFF means Disconnected) +// TXD +#define RTE_USART3_TXD_PIN 0xFFFFFFFF +// RXD +#define RTE_USART3_RXD_PIN 0xFFFFFFFF +// RTS +#define RTE_USART3_RTS_PIN 0xFFFFFFFF +// CTS +#define RTE_USART3_RTS_PIN 0xFFFFFFFF +// Pin Configuration +// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART3] + +// FLASH (Flash Memory) [Driver_FLASH0] +// Configuration settings for Driver_FLASH0 in component ::Drivers:FLASH +#define RTE_FLASH0 1 +// FLASH (Flash Memory) [Driver_FLASH0] + +#endif /* __RTE_DEVICE_H */ diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/config.cmake b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/config.cmake new file mode 100644 index 000000000..9c75b2b67 --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/config.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2023, Nordic Semiconductor ASA. +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +set(PLATFORM_PATH platform/ext/target/${TFM_PLATFORM}/..) + +include(${PLATFORM_PATH}/common/nrf91/config.cmake) diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/config_tfm_target.h b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/config_tfm_target.h new file mode 100644 index 000000000..fa8659f5a --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/config_tfm_target.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#ifndef __CONFIG_TFM_TARGET_H__ +#define __CONFIG_TFM_TARGET_H__ + +/* Include optional claims in initial attestation token */ +#undef ATTEST_INCLUDE_OPTIONAL_CLAIMS +#define ATTEST_INCLUDE_OPTIONAL_CLAIMS 0 + +#endif /* __CONFIG_TFM_TARGET_H__ */ diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/device_cfg.h b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/device_cfg.h new file mode 100644 index 000000000..e9678e57b --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/device_cfg.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#ifndef __ARM_LTD_DEVICE_CFG_H__ +#define __ARM_LTD_DEVICE_CFG_H__ + +/** + * \file device_cfg.h + * \brief + * This is the default device configuration file with all peripherals + * defined and configured to be use via the secure and/or non-secure base + * address. + */ + +#define DEFAULT_UART_BAUDRATE 115200 + +#endif /* __ARM_LTD_DEVICE_CFG_H__ */ diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/nrf_board.h b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/nrf_board.h new file mode 100644 index 000000000..0d2afcc11 --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/nrf_board.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#ifndef NRF_BOARD_H__ +#define NRF_BOARD_H__ + +#include + +#define BUTTON1_PIN (8UL) +#define BUTTON1_ACTIVE_LEVEL (0UL) +#define BUTTON1_PULL (NRF_GPIO_PIN_PULLUP) +#define LED1_PIN (2UL) +#define LED1_ACTIVE_LEVEL (1UL) + +#endif // NRF_BOARD_H__ diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/preload.cmake b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/preload.cmake new file mode 100644 index 000000000..d9fe74973 --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/preload.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2023, Nordic Semiconductor ASA. +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +set(PLATFORM_PATH platform/ext/target/${TFM_PLATFORM}/..) + +include(${PLATFORM_PATH}/common/nrf9120/preload.cmake) diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/include/tfm_ioctl_api.h b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/include/tfm_ioctl_api.h new file mode 100644 index 000000000..ddf7b1269 --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/include/tfm_ioctl_api.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/** @file + * @brief TFM IOCTL API header. + */ + + +#ifndef TFM_IOCTL_API_H__ +#define TFM_IOCTL_API_H__ + +/** + * @defgroup tfm_ioctl_api TFM IOCTL API + * @{ + * + */ + +#include +#include +#include +#include + +/* Include core IOCTL services */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Board specific IOCTL services can be added here */ + +#ifdef __cplusplus +} +#endif + +/** + * @} + */ + +#endif /* TFM_IOCTL_API_H__ */ diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/include/tfm_read_ranges.h b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/include/tfm_read_ranges.h new file mode 100644 index 000000000..11bb3912c --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/include/tfm_read_ranges.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#ifndef TFM_READ_RANGES_H__ +#define TFM_READ_RANGES_H__ + +#include + +#include "nrf.h" + +#define FICR_BASE NRF_FICR_S_BASE + +#define FICR_INFO_ADDR (FICR_BASE + offsetof(NRF_FICR_Type, INFO)) +#define FICR_INFO_SIZE (sizeof(FICR_INFO_Type)) + +/* Used by nrf_erratas.h */ +#define FICR_RESTRICTED_ADDR (FICR_BASE + 0x130) +#define FICR_RESTRICTED_SIZE 0x8 + +static const struct tfm_read_service_range ranges[] = { + { .start = FICR_INFO_ADDR, .size = FICR_INFO_SIZE }, + { .start = FICR_RESTRICTED_ADDR, .size = FICR_RESTRICTED_SIZE }, +}; + +#endif /* TFM_READ_RANGES_H__ */ diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/src/tfm_platform_system.c b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/src/tfm_platform_system.c new file mode 100644 index 000000000..5db0a6592 --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/services/src/tfm_platform_system.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "platform/include/tfm_platform_system.h" +#include "cmsis.h" +#include "tfm_platform_hal_ioctl.h" +#include "tfm_ioctl_core_api.h" + +void tfm_platform_hal_system_reset(void) +{ + /* Reset the system */ + NVIC_SystemReset(); +} + +enum tfm_platform_err_t tfm_platform_hal_ioctl(tfm_platform_ioctl_req_t request, + psa_invec *in_vec, + psa_outvec *out_vec) +{ + /* Core IOCTL services */ + switch (request) { + case TFM_PLATFORM_IOCTL_READ_SERVICE: + return tfm_platform_hal_read_service(in_vec, out_vec); + + /* Board specific IOCTL services */ + + /* Not a supported IOCTL service.*/ + default: + return TFM_PLATFORM_ERR_NOT_SUPPORTED; + } +} diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/tfm_hal_platform.c b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/tfm_hal_platform.c new file mode 100644 index 000000000..94b36dbd5 --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/tfm_hal_platform.c @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "tfm_hal_defs.h" +#include "tfm_hal_platform_common.h" + +enum tfm_hal_status_t tfm_hal_platform_init(void) +{ + return tfm_hal_platform_common_init(); +} diff --git a/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/tfm_peripherals_config.h b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/tfm_peripherals_config.h new file mode 100644 index 000000000..e1529a114 --- /dev/null +++ b/platform/ext/target/nordic_nrf/nrf9161dk_nrf9161/tfm_peripherals_config.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#ifndef TFM_PERIPHERALS_CONFIG_H__ +#define TFM_PERIPHERALS_CONFIG_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef SECURE_UART1 +#define TFM_PERIPHERAL_UARTE1_SECURE 1 +#endif + +#if TEST_NS_SLIH_IRQ || TEST_NS_FLIH_IRQ +#define TFM_PERIPHERAL_TIMER0_SECURE 1 +#endif + +#ifdef PSA_API_TEST_IPC +#define TFM_PERIPHERAL_EGU5_SECURE 1 + +#define TFM_PERIPHERAL_WDT_SECURE 1 +#endif + +#if defined(NRF91_SERIES) + #include +#else + #error "Unknown device." +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* TFM_PERIPHERAL_CONFIG_H__ */