Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions platform/ext/target/nordic_nrf/common/core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ target_include_directories(platform_s
.
native_drivers
${HAL_NORDIC_PATH}/nrfx
${HAL_NORDIC_PATH}/nrfx/mdk
${HAL_NORDIC_PATH}/nrfx/bsp/stable
${HAL_NORDIC_PATH}/nrfx/bsp/stable/templates
${HAL_NORDIC_PATH}/nrfx/drivers/include
common
${PLATFORM_DIR}/..
Expand Down Expand Up @@ -190,7 +191,8 @@ if(BL2)
PUBLIC
.
${HAL_NORDIC_PATH}/nrfx
${HAL_NORDIC_PATH}/nrfx/mdk
${HAL_NORDIC_PATH}/nrfx/bsp/stable
${HAL_NORDIC_PATH}/nrfx/bsp/stable/templates
${HAL_NORDIC_PATH}/nrfx/drivers/include
common
PRIVATE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,17 +120,17 @@ static int32_t ARM_Flash_Initialize(ARM_Flash_SignalEvent_t cb_event)
*/
nrfx_rramc_evt_handler_t handler = NULL;

nrfx_err_t err = nrfx_rramc_init(&config, handler);
int err = nrfx_rramc_init(&config, handler);

if(err != NRFX_SUCCESS && err != NRFX_ERROR_ALREADY) {
if(err != 0 && err != -EALREADY) {
return err;
}
#elif defined(MRAMC_PRESENT)
nrfx_mramc_config_t config = NRFX_MRAMC_DEFAULT_CONFIG();

nrfx_err_t err = nrfx_mramc_init(&config, NULL);
int err = nrfx_mramc_init(&config, NULL);

if(err != NRFX_SUCCESS && err != NRFX_ERROR_ALREADY) {
if(err != 0 && err != -EALREADY) {
return err;
}
#endif /* RRAMC_PRESENT or MRAMC_PRESENT*/
Expand Down Expand Up @@ -206,9 +206,9 @@ static int32_t ARM_Flash_ProgramData(uint32_t addr, const void *data,
static int32_t ARM_Flash_EraseSector(uint32_t addr)
{
#ifdef NRF_NVMC_S
nrfx_err_t err_code = nrfx_nvmc_page_erase(addr);
int err_code = nrfx_nvmc_page_erase(addr);

if (err_code != NRFX_SUCCESS) {
if (err_code != 0) {
return ARM_DRIVER_ERROR_PARAMETER;
}
#else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,23 +42,6 @@
#if RTE_USART0 || RTE_USART1 || RTE_USART2 || RTE_USART3 || \
RTE_UART00 || RTE_USART20 || RTE_UART21 || RTE_UART22 || RTE_USART30

#define PSEL_DISCONNECTED 0xFFFFFFFFUL

#define UART_CONFIG_INITIALIZER() \
{ \
.txd_pin = PSEL_DISCONNECTED, \
.rxd_pin = PSEL_DISCONNECTED, \
.rts_pin = PSEL_DISCONNECTED, \
.cts_pin = PSEL_DISCONNECTED, \
.baudrate = NRF_UARTE_BAUDRATE_115200, \
.interrupt_priority = NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY, \
.config = { \
.hwfc = NRF_UARTE_HWFC_DISABLED, \
.parity = NRF_UARTE_PARITY_EXCLUDED, \
.stop = NRF_UARTE_STOP_ONE, \
}, \
}

void uart_config_set_uart_pins(nrfx_uarte_config_t *uart_config,
const uint32_t uart_pins[],
size_t uart_pins_count)
Expand All @@ -67,7 +50,7 @@ void uart_config_set_uart_pins(nrfx_uarte_config_t *uart_config,
uint32_t psel = NRF_GET_PIN(uart_pins[i]);

if (psel == NRF_PIN_DISCONNECTED) {
psel = PSEL_DISCONNECTED;
psel = NRF_UARTE_PSEL_DISCONNECTED;
}

switch (NRF_GET_FUN(uart_pins[i])) {
Expand All @@ -89,14 +72,12 @@ static const ARM_USART_CAPABILITIES DriverCapabilities = {
};

typedef struct {
const nrfx_uarte_t uarte;
nrfx_uarte_t uarte;
const uint32_t *uart_pins;
size_t uart_pins_count;
size_t tx_count;
size_t rx_count;
nrf_uarte_config_t hal_cfg;
nrf_uarte_baudrate_t baudrate;
bool initialized;
nrfx_uarte_config_t cfg;
} UARTx_Resources;

static ARM_DRIVER_VERSION ARM_USART_GetVersion(void)
Expand All @@ -119,34 +100,28 @@ static int32_t ARM_USARTx_Initialize(ARM_USART_SignalEvent_t cb_event,
NVIC_ClearTargetState(NRFX_IRQ_NUMBER_GET((uint32_t)uart_resources->uarte.p_reg));
#endif

nrfx_uarte_config_t uart_config = UART_CONFIG_INITIALIZER();

uart_config_set_uart_pins(&uart_config,
uart_config_set_uart_pins(&uart_resources->cfg,
uart_resources->uart_pins,
uart_resources->uart_pins_count);

nrfx_err_t err_code = nrfx_uarte_init(&uart_resources->uarte,
&uart_config,
NULL);
if (err_code != NRFX_SUCCESS) {
int err_code = nrfx_uarte_init(&uart_resources->uarte,
&uart_resources->cfg,
NULL);
if (err_code < 0) {
return ARM_DRIVER_ERROR_BUSY;
}

uart_resources->tx_count = 0;
uart_resources->rx_count = 0;
uart_resources->hal_cfg = uart_config.config;
uart_resources->baudrate = uart_config.baudrate;

uart_resources->initialized = true;
return ARM_DRIVER_OK;
}

static int32_t ARM_USARTx_Uninitialize(UARTx_Resources *uart_resources)
{
nrfx_uarte_uninit(&uart_resources->uarte);

uart_resources->initialized = false;

#ifdef SPU_CONFIGURE_UART
spu_peripheral_config_non_secure((uint32_t)uart_resources->uarte.p_reg, false);
NVIC_SetTargetState(NRFX_IRQ_NUMBER_GET((uint32_t)uart_resources->uarte.p_reg));
Expand Down Expand Up @@ -181,7 +156,7 @@ static int32_t ARM_USARTx_PowerControl(ARM_POWER_STATE state,
static int32_t ARM_USARTx_Send(const void *data, uint32_t num,
UARTx_Resources *uart_resources)
{
if (!uart_resources->initialized) {
if (!nrfx_uarte_init_check(&uart_resources->uarte)) {
return ARM_DRIVER_ERROR;
}

Expand All @@ -198,10 +173,10 @@ static int32_t ARM_USARTx_Send(const void *data, uint32_t num,
}
}
} else {
nrfx_err_t err_code = nrfx_uarte_tx(&uart_resources->uarte, data, num, 0);
if (err_code == NRFX_ERROR_BUSY) {
int err_code = nrfx_uarte_tx(&uart_resources->uarte, data, num, 0);
if (err_code == -EBUSY) {
return ARM_DRIVER_ERROR_BUSY;
} else if (err_code != NRFX_SUCCESS) {
} else if (err_code < 0) {
return ARM_DRIVER_ERROR;
}

Expand All @@ -214,14 +189,43 @@ static int32_t ARM_USARTx_Send(const void *data, uint32_t num,
static int32_t ARM_USARTx_Receive(void *data, uint32_t num,
UARTx_Resources *uart_resources)
{
if (!uart_resources->initialized) {
if (!nrfx_uarte_init_check(&uart_resources->uarte)) {
return ARM_DRIVER_ERROR;
}

int err_code = nrfx_uarte_rx_buffer_set(&uart_resources->uarte, data, num);

if (err_code == -EBUSY) {
return ARM_DRIVER_ERROR_BUSY;
} else if (err_code < 0) {
return ARM_DRIVER_ERROR;
}

nrfx_err_t err_code = nrfx_uarte_rx(&uart_resources->uarte, data, num);
if (err_code == NRFX_ERROR_BUSY) {
uint32_t flags = NRFX_UARTE_RX_ENABLE_CONT | NRFX_UARTE_RX_ENABLE_STOP_ON_END;
err_code = nrfx_uarte_rx_enable(&uart_resources->uarte, flags);

if (err_code == -EBUSY) {
return ARM_DRIVER_ERROR_BUSY;
} else if (err_code != NRFX_SUCCESS) {
} else if (err_code < 0) {
return ARM_DRIVER_ERROR;
}

size_t rx_amount = 0;

do
{
err_code = nrfx_uarte_rx_ready(&uart_resources->uarte, &rx_amount);
} while (err_code == -EBUSY);

if ((err_code == -EALREADY) || (num > rx_amount))
{
return ARM_DRIVER_ERROR;
}

err_code = nrfx_uarte_rx_abort(&uart_resources->uarte, true, true);

if (err_code < 0)
{
return ARM_DRIVER_ERROR;
}

Expand Down Expand Up @@ -253,8 +257,8 @@ static uint32_t ARM_USARTx_GetRxCount(const UARTx_Resources *uart_resources)
static int32_t ARM_USART_Control_Mode(uint32_t control, uint32_t arg,
UARTx_Resources *uart_resources)
{
nrf_uarte_baudrate_t baudrate = uart_resources->baudrate;
nrf_uarte_config_t hal_cfg = uart_resources->hal_cfg;
nrf_uarte_baudrate_t baudrate = uart_resources->cfg.baudrate;
nrf_uarte_config_t hal_cfg = uart_resources->cfg.config;
switch (arg) {
case 1200:
baudrate = NRF_UARTE_BAUDRATE_1200;
Expand Down Expand Up @@ -369,37 +373,25 @@ static int32_t ARM_USART_Control_Mode(uint32_t control, uint32_t arg,
return ARM_USART_ERROR_FLOW_CONTROL;
}

uart_resources->baudrate = baudrate;
uart_resources->hal_cfg = hal_cfg;
uart_resources->cfg.baudrate = baudrate;
uart_resources->cfg.config = hal_cfg;

nrf_uarte_baudrate_set(uart_resources->uarte.p_reg, uart_resources->baudrate);
nrf_uarte_configure(uart_resources->uarte.p_reg, &uart_resources->hal_cfg);
nrfx_uarte_reconfigure(&uart_resources->uarte, &uart_resources->cfg);

return ARM_DRIVER_OK;
}

static void disconnect_tx_rx_pin(uint32_t operation, UARTx_Resources *uart_resources)
static int disconnect_tx_rx_pin(uint32_t operation, UARTx_Resources *uart_resources)
{
bool uart_enabled = nrf_uarte_enable_check(uart_resources->uarte.p_reg);

/* To update the PSEL register the UART needs to be disabled in case it is enabled */
if (uart_enabled) {
nrf_uarte_disable(uart_resources->uarte.p_reg);
}

switch (operation) {
case ARM_USART_CONTROL_RX:
nrf_uarte_rx_pin_set(uart_resources->uarte.p_reg, NRF_UARTE_PSEL_DISCONNECTED);
break;
uart_resources->cfg.rxd_pin = NRF_UARTE_PSEL_DISCONNECTED;
return nrfx_uarte_reconfigure(&uart_resources->uarte, &uart_resources->cfg);
case ARM_USART_CONTROL_TX:
nrf_uarte_tx_pin_set(uart_resources->uarte.p_reg, NRF_UARTE_PSEL_DISCONNECTED);
break;
uart_resources->cfg.txd_pin = NRF_UARTE_PSEL_DISCONNECTED;
return nrfx_uarte_reconfigure(&uart_resources->uarte, &uart_resources->cfg);
default:
break;
}

if (uart_enabled) {
nrf_uarte_enable(uart_resources->uarte.p_reg);
return 0;
}
}

Expand All @@ -417,7 +409,13 @@ static int32_t ARM_USARTx_Control(uint32_t control, uint32_t arg, UARTx_Resource
* which is used by the peripheral.
*/
if (arg == 0) {
disconnect_tx_rx_pin(operation, uart_resources);
int err_code = disconnect_tx_rx_pin(operation, uart_resources);

if (err_code == -EBUSY) {
return ARM_DRIVER_ERROR_BUSY;
} else if (err_code < 0) {
return ARM_DRIVER_ERROR;
}
}
return ARM_DRIVER_OK;
default:
Expand Down Expand Up @@ -446,9 +444,11 @@ static ARM_USART_MODEM_STATUS ARM_USART_GetModemStatus(void)
#define DRIVER_USART(idx) \
static const uint32_t UART##idx##_pins[] = RTE_USART##idx##_PINS; \
static UARTx_Resources UART##idx##_Resources = { \
.uarte = NRFX_UARTE_INSTANCE(idx), \
.uarte = NRFX_UARTE_INSTANCE(NRF_UARTE##idx), \
.uart_pins = UART##idx##_pins, \
.uart_pins_count = ARRAY_SIZE(UART##idx##_pins) \
.uart_pins_count = ARRAY_SIZE(UART##idx##_pins), \
.cfg = NRFX_UARTE_DEFAULT_CONFIG(NRF_UARTE_PSEL_DISCONNECTED, \
NRF_UARTE_PSEL_DISCONNECTED), \
}; \
static int32_t ARM_USART##idx##_Initialize( \
ARM_USART_SignalEvent_t cb_event) \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
/* Include the spm utilities for the SPM_ASSERT symbol */
#include <assert.h>

#include <soc/nrfx_coredep.h>
#include <lib/nrfx_coredep.h>

#ifdef __cplusplus
extern "C" {
Expand Down
2 changes: 1 addition & 1 deletion platform/ext/target/nordic_nrf/common/core/config.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#-------------------------------------------------------------------------------

set(HAL_NORDIC_PATH "DOWNLOAD" CACHE PATH "Path to the Nordic HAL (or DOWNLOAD to fetch automatically)")
set(HAL_NORDIC_VERSION "nrfx-3.9.0" CACHE STRING "Version of the Nordic HAL to download")
set(HAL_NORDIC_VERSION "pull/326/head" CACHE STRING "Version of the Nordic HAL to download")
set(HAL_NORDIC_REMOTE "https://github.com/zephyrproject-rtos/hal_nordic" CACHE STRING "Remote of the Nordic HAL to download")
# Set to FALSE if HAL_NORDIC_VERSION is a SHA.
set(HAL_NORDIC_SHALLOW_FETCH CACHE BOOL TRUE "Use shallow fetch to download Nordic HAL.")
Expand Down
12 changes: 1 addition & 11 deletions platform/ext/target/nordic_nrf/common/core/nrfx_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,16 +96,6 @@
#define NRF_PERIPH(P) P##_S
#endif

#if defined(NRF5340_XXAA_APPLICATION)
#include <nrfx_config_nrf5340_application.h>
#elif defined(NRF91_SERIES)
#include <nrfx_config_nrf91.h>
#elif defined(NRF54L_SERIES)
#include <nrfx_config_nrf54l.h>
#elif defined(NRF71_SERIES)
#include <nrfx_config_nrf71.h>
#else
#error "Unknown device."
#endif
#include <templates/nrfx_templates_config.h>

#endif // NRFX_CONFIG_H__
3 changes: 2 additions & 1 deletion platform/ext/target/nordic_nrf/common/core/ns/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ target_include_directories(platform_ns
.
common
${HAL_NORDIC_PATH}/nrfx
${HAL_NORDIC_PATH}/nrfx/mdk
${HAL_NORDIC_PATH}/nrfx/bsp/stable
${HAL_NORDIC_PATH}/nrfx/bsp/stable/templates
${HAL_NORDIC_PATH}/nrfx/drivers/include
${PLATFORM_DIR}/include
${PLATFORM_DIR}/ext/cmsis/Include
Expand Down
12 changes: 6 additions & 6 deletions platform/ext/target/nordic_nrf/common/core/target_cfg_54l.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ static void init_mpc_region_override(struct mpc_region_override *override)
override->permmask = MPC_OVERRIDE_PERM_SECATTR_Msk;
}

static nrfx_err_t rramc_configuration(void)
static int rramc_configuration(void)
{
nrfx_rramc_config_t config = NRFX_RRAMC_DEFAULT_CONFIG(WRITE_BUFFER_SIZE);

Expand All @@ -148,12 +148,12 @@ static nrfx_err_t rramc_configuration(void)
*/
nrfx_rramc_evt_handler_t handler = NULL;

nrfx_err_t err = nrfx_rramc_init(&config, handler);
if (err != NRFX_SUCCESS && err != NRFX_ERROR_ALREADY) {
int err = nrfx_rramc_init(&config, handler);
if (err != 0 && err != -EALREADY) {
return err;
}

return NRFX_SUCCESS;
return 0;
}

enum tfm_plat_err_t init_debug(void)
Expand Down Expand Up @@ -469,8 +469,8 @@ enum tfm_plat_err_t spu_periph_init_cfg(void)

nrf_cache_enable(NRF_ICACHE);

nrfx_err_t nrfx_err = rramc_configuration();
if (nrfx_err != NRFX_SUCCESS) {
int nrfx_err = rramc_configuration();
if (nrfx_err != 0) {
return TFM_PLAT_ERR_SYSTEM_ERR;
}

Expand Down
Loading