zephyr/soc/arm/nordic_nrf/common/soc_secure.c

48 lines
1.0 KiB
C

/*
* Copyright (c) 2022 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <soc_secure.h>
#include <errno.h>
#include "nrf.h"
#include "tfm_platform_api.h"
#include "tfm_ioctl_api.h"
#if NRF_GPIO_HAS_SEL
void soc_secure_gpio_pin_mcu_select(uint32_t pin_number, nrf_gpio_pin_sel_t mcu)
{
uint32_t result;
enum tfm_platform_err_t err;
err = tfm_platform_gpio_pin_mcu_select(pin_number, mcu, &result);
__ASSERT(err == TFM_PLATFORM_ERR_SUCCESS, "TFM platform error (%d)", err);
__ASSERT(result == 0, "GPIO service error (%d)", result);
}
#endif /* NRF_GPIO_HAS_SEL */
int soc_secure_mem_read(void *dst, void *src, size_t len)
{
enum tfm_platform_err_t status;
uint32_t result;
status = tfm_platform_mem_read(dst, (uintptr_t)src, len, &result);
switch (status) {
case TFM_PLATFORM_ERR_INVALID_PARAM:
return -EINVAL;
case TFM_PLATFORM_ERR_NOT_SUPPORTED:
return -ENOTSUP;
case TFM_PLATFORM_ERR_SUCCESS:
if (result == 0) {
return 0;
}
/* Fallthrough */
default:
return -EPERM;
}
}