92b855f9de
Header was not used, so remove it. Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
89 lines
2.4 KiB
C
89 lines
2.4 KiB
C
/*
|
|
* Copyright (c) 2018 Synopsys, Inc. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
#include <errno.h>
|
|
#include <zephyr/kernel.h>
|
|
#include <zephyr/arch/cpu.h>
|
|
#include <zephyr/types.h>
|
|
#include <zephyr/toolchain.h>
|
|
|
|
#include <zephyr/arch/arc/v2/secureshield/arc_secure.h>
|
|
|
|
#define IRQ_PRIO_MASK (0xffff << ARC_N_IRQ_START_LEVEL)
|
|
/*
|
|
* @brief read secure auxiliary regs on behalf of normal mode
|
|
*
|
|
* @param aux_reg address of aux reg
|
|
*
|
|
* Some aux regs require secure privilege, this function implements
|
|
* an secure service to access secure aux regs. Check should be done
|
|
* to decide whether the access is valid.
|
|
*/
|
|
static int32_t arc_s_aux_read(uint32_t aux_reg)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
/*
|
|
* @brief write secure auxiliary regs on behalf of normal mode
|
|
*
|
|
* @param aux_reg address of aux reg
|
|
* @param val, the val to write
|
|
*
|
|
* Some aux regs require secure privilege, this function implements
|
|
* an secure service to access secure aux regs. Check should be done
|
|
* to decide whether the access is valid.
|
|
*/
|
|
static int32_t arc_s_aux_write(uint32_t aux_reg, uint32_t val)
|
|
{
|
|
if (aux_reg == _ARC_V2_AUX_IRQ_ACT) {
|
|
/* 0 -> CONFIG_NUM_IRQ_PRIO_LEVELS allocated to secure world
|
|
* left prio levels allocated to normal world
|
|
*/
|
|
val &= IRQ_PRIO_MASK;
|
|
z_arc_v2_aux_reg_write(_ARC_V2_AUX_IRQ_ACT, val |
|
|
(z_arc_v2_aux_reg_read(_ARC_V2_AUX_IRQ_ACT) &
|
|
(~IRQ_PRIO_MASK)));
|
|
|
|
return 0;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
/*
|
|
* @brief allocate interrupt for normal world
|
|
*
|
|
* @param intno, the interrupt to be allocated to normal world
|
|
*
|
|
* By default, most interrupts are configured to be secure in initialization.
|
|
* If normal world wants to use an interrupt, through this secure service to
|
|
* apply one. Necessary check should be done to decide whether the apply is
|
|
* valid
|
|
*/
|
|
static int32_t arc_s_irq_alloc(uint32_t intno)
|
|
{
|
|
z_arc_v2_irq_uinit_secure_set(intno, 0);
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
* \todo, to access MPU from normal mode, secure mpu service should be
|
|
* created. In the secure mpu service, the parameters should be checked
|
|
* (e.g., not overwrite the mpu regions for secure world)that operations
|
|
* are valid
|
|
*/
|
|
|
|
|
|
/*
|
|
* \todo, how to add secure service easily
|
|
*/
|
|
const _arc_s_call_handler_t arc_s_call_table[ARC_S_CALL_LIMIT] = {
|
|
[ARC_S_CALL_AUX_READ] = (_arc_s_call_handler_t)arc_s_aux_read,
|
|
[ARC_S_CALL_AUX_WRITE] = (_arc_s_call_handler_t)arc_s_aux_write,
|
|
[ARC_S_CALL_IRQ_ALLOC] = (_arc_s_call_handler_t)arc_s_irq_alloc,
|
|
};
|