Skip to content

Commit 40042f0

Browse files
authored
Merge pull request #4295 from Patater/armv8m
Update uVisor to v0.28.1
2 parents 0da63ee + 3ef7845 commit 40042f0

File tree

44 files changed

+588
-173
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+588
-173
lines changed

features/FEATURE_UVISOR/AUTHORS.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
597 Alessandro Angelino
12
592 Milosch Meriac
2-
554 Alessandro Angelino
3-
105 Jaeden Amero
4-
65 Niklas Hauser
3+
144 Jaeden Amero
4+
80 Niklas Hauser
55
5 Irit Arkin
66
3 JaredCJR
77
3 AnotherButler

features/FEATURE_UVISOR/VERSION.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v0.27.0-23-g8231ae897dadbb1c3eeb79ae2103d308d28c7e14
1+
v0.28.1

features/FEATURE_UVISOR/includes/uvisor-lib/rtx/process_malloc.h

Lines changed: 0 additions & 37 deletions
This file was deleted.

features/FEATURE_UVISOR/includes/uvisor-lib/rtx/secure_allocator.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,18 @@ void * secure_malloc(
7070
SecureAllocator allocator,
7171
size_t size);
7272

73+
/** Drop-in for `aligned_alloc`. */
74+
void * secure_aligned_alloc(
75+
SecureAllocator allocator,
76+
size_t alignment,
77+
size_t size);
78+
79+
/** Drop-in for `calloc`. */
80+
void * secure_calloc(
81+
SecureAllocator allocator,
82+
size_t nmemb,
83+
size_t size);
84+
7385
/** Drop-in for `realloc`. */
7486
void * secure_realloc(
7587
SecureAllocator allocator,

features/FEATURE_UVISOR/includes/uvisor-lib/uvisor-lib.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040

4141
/* The uVisor API main header file will use the above definitions. */
4242
#include "uvisor/api/inc/uvisor-lib.h"
43-
#include "uvisor-lib/rtx/process_malloc.h"
4443
#include "uvisor-lib/rtx/rtx_box_index.h"
4544
#include "uvisor-lib/rtx/secure_allocator.h"
4645

features/FEATURE_UVISOR/includes/uvisor/api/inc/api.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@
1919

2020
#include "rt_OsEventObserver.h"
2121
#include "api/inc/uvisor_exports.h"
22-
#include "api/inc/unvic_exports.h"
22+
#include "api/inc/virq_exports.h"
2323
#include "api/inc/debug_exports.h"
2424
#include "api/inc/halt_exports.h"
2525
#include "api/inc/pool_queue_exports.h"
2626
#include "api/inc/page_allocator_exports.h"
27+
#include "api/inc/uvisor_spinlock_exports.h"
2728
#include <stdint.h>
2829

2930
#define UVISOR_API_MAGIC 0x5C9411B4
@@ -37,7 +38,7 @@ typedef struct {
3738
uint32_t magic;
3839
uint32_t (*get_version)(uint32_t);
3940

40-
void (*init)(void);
41+
void (*init)(uint32_t caller);
4142

4243
void (*irq_enable)(uint32_t irqn);
4344
void (*irq_disable)(uint32_t irqn);
@@ -60,17 +61,23 @@ typedef struct {
6061

6162
void (*debug_init)(const TUvisorDebugDriver * const driver);
6263
void (*error)(THaltUserError reason);
64+
void (*start)(void);
6365
void (*vmpu_mem_invalidate)(void);
6466

65-
int (*pool_init)(uvisor_pool_t *, void *, size_t, size_t, int);
66-
int (*pool_queue_init)(uvisor_pool_queue_t *, uvisor_pool_t *, void *, size_t, size_t, int);
67-
uvisor_pool_slot_t (*pool_allocate)(uvisor_pool_t *, uint32_t);
67+
int (*pool_init)(uvisor_pool_t *, void *, size_t, size_t);
68+
int (*pool_queue_init)(uvisor_pool_queue_t *, uvisor_pool_t *, void *, size_t, size_t);
69+
uvisor_pool_slot_t (*pool_allocate)(uvisor_pool_t *);
6870
void (*pool_queue_enqueue)(uvisor_pool_queue_t *, uvisor_pool_slot_t);
6971
uvisor_pool_slot_t (*pool_free)(uvisor_pool_t *, uvisor_pool_slot_t);
7072
uvisor_pool_slot_t (*pool_queue_dequeue)(uvisor_pool_queue_t *, uvisor_pool_slot_t);
7173
uvisor_pool_slot_t (*pool_queue_dequeue_first)(uvisor_pool_queue_t *);
7274
uvisor_pool_slot_t (*pool_queue_find_first)(uvisor_pool_queue_t *, TQueryFN_Ptr, void *);
7375

76+
void (*spin_init)(UvisorSpinlock * spinlock);
77+
bool (*spin_trylock)(UvisorSpinlock * spinlock);
78+
void (*spin_lock)(UvisorSpinlock * spinlock);
79+
void (*spin_unlock)(UvisorSpinlock * spinlock);
80+
7481
OsEventObserver os_event_observer;
7582
} UVISOR_PACKED UvisorApi;
7683

features/FEATURE_UVISOR/includes/uvisor/api/inc/box_config.h

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,16 @@
2222
#include "api/inc/rpc_exports.h"
2323
#include <stddef.h>
2424
#include <stdint.h>
25+
#include <sys/reent.h>
2526

2627
UVISOR_EXTERN const uint32_t __uvisor_mode;
2728
UVISOR_EXTERN void const * const public_box_cfg_ptr;
2829

29-
typedef struct {
30-
void (*function)(const void *);
31-
size_t priority;
32-
size_t stack_size;
33-
} uvisor_box_main_t;
30+
/* All pointers in the box index need to be 4-byte aligned.
31+
* We therefore also need to round up all sizes to 4-byte multiples to
32+
* provide the space to be able to align the pointers to 4-bytes. */
33+
#define __UVISOR_BOX_ROUND_4(size) \
34+
(((size) + 3UL) & ~3UL)
3435

3536
#define UVISOR_DISABLED 0
3637
#define UVISOR_PERMISSIVE 1
@@ -53,7 +54,9 @@ typedef struct {
5354
{ \
5455
sizeof(RtxBoxIndex), \
5556
0, \
57+
0, \
5658
sizeof(uvisor_rpc_t), \
59+
sizeof(uvisor_ipc_t), \
5760
0, \
5861
}, \
5962
0, \
@@ -83,12 +86,13 @@ typedef struct {
8386
UVISOR_STACK_SIZE_ROUND( \
8487
( \
8588
(UVISOR_MIN_STACK(stack_size) + \
86-
(context_size) + \
87-
(__uvisor_box_heapsize) + \
88-
sizeof(RtxBoxIndex) + \
89-
sizeof(uvisor_rpc_outgoing_message_queue_t) + \
90-
sizeof(uvisor_rpc_incoming_message_queue_t) + \
91-
sizeof(uvisor_rpc_fn_group_queue_t) \
89+
__UVISOR_BOX_ROUND_4(context_size) + \
90+
__UVISOR_BOX_ROUND_4(__uvisor_box_heapsize) + \
91+
__UVISOR_BOX_ROUND_4(sizeof(RtxBoxIndex)) + \
92+
__UVISOR_BOX_ROUND_4(sizeof(uvisor_rpc_outgoing_message_queue_t)) + \
93+
__UVISOR_BOX_ROUND_4(sizeof(uvisor_rpc_incoming_message_queue_t)) + \
94+
__UVISOR_BOX_ROUND_4(sizeof(uvisor_rpc_fn_group_queue_t)) + \
95+
__UVISOR_BOX_ROUND_4(sizeof(struct _reent)) \
9296
) \
9397
* 8) \
9498
/ 6)]; \
@@ -99,7 +103,9 @@ typedef struct {
99103
{ \
100104
sizeof(RtxBoxIndex), \
101105
context_size, \
106+
sizeof(struct _reent), \
102107
sizeof(uvisor_rpc_t), \
108+
sizeof(uvisor_ipc_t), \
103109
__uvisor_box_heapsize, \
104110
}, \
105111
UVISOR_MIN_STACK(stack_size), \

features/FEATURE_UVISOR/includes/uvisor/api/inc/cmsis_nvic_virtual.h

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,37 @@
1818
#define __UVISOR_API_NVIC_VIRTUAL_H__
1919

2020
#include "api/inc/interrupts.h"
21-
#include "api/inc/unvic_exports.h"
21+
#include "api/inc/virq_exports.h"
2222

23-
#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
24-
#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
25-
#define NVIC_EnableIRQ vIRQ_EnableIRQ
26-
#define NVIC_DisableIRQ vIRQ_DisableIRQ
27-
#define NVIC_GetPendingIRQ vIRQ_GetPendingIRQ
28-
#define NVIC_SetPendingIRQ vIRQ_SetPendingIRQ
29-
#define NVIC_ClearPendingIRQ vIRQ_ClearPendingIRQ
30-
#define NVIC_GetActive __NVIC_GetActive
31-
#define NVIC_SetPriority vIRQ_SetPriority
32-
#define NVIC_GetPriority vIRQ_GetPriority
33-
#define NVIC_SystemReset() vIRQ_SystemReset(RESET_REASON_NO_REASON)
23+
/* The NVIC APIs are only wrapped on ARMv7-M. */
24+
#if !defined(ARCH_CORE_ARMv8M) && !defined(TARGET_M33)
25+
26+
#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
27+
#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
28+
#define NVIC_EnableIRQ vIRQ_EnableIRQ
29+
#define NVIC_DisableIRQ vIRQ_DisableIRQ
30+
#define NVIC_GetPendingIRQ vIRQ_GetPendingIRQ
31+
#define NVIC_SetPendingIRQ vIRQ_SetPendingIRQ
32+
#define NVIC_ClearPendingIRQ vIRQ_ClearPendingIRQ
33+
#define NVIC_GetActive __NVIC_GetActive
34+
#define NVIC_SetPriority vIRQ_SetPriority
35+
#define NVIC_GetPriority vIRQ_GetPriority
36+
#define NVIC_SystemReset() vIRQ_SystemReset(RESET_REASON_NO_REASON)
37+
38+
#else
39+
40+
#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
41+
#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
42+
#define NVIC_EnableIRQ __NVIC_EnableIRQ
43+
#define NVIC_DisableIRQ __NVIC_DisableIRQ
44+
#define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ
45+
#define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ
46+
#define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ
47+
#define NVIC_GetActive __NVIC_GetActive
48+
#define NVIC_SetPriority __NVIC_SetPriority
49+
#define NVIC_GetPriority __NVIC_GetPriority
50+
#define NVIC_SystemReset() __NVIC_SystemReset()
51+
52+
#endif
3453

3554
#endif /* __UVISOR_API_NVIC_VIRTUAL_H__ */

features/FEATURE_UVISOR/includes/uvisor/api/inc/cmsis_vectab_virtual.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,17 @@
1919

2020
#include "api/inc/interrupts.h"
2121

22-
#define NVIC_SetVector vIRQ_SetVector
23-
#define NVIC_GetVector vIRQ_GetVector
22+
/* The NVIC APIs are only wrapped on ARMv7-M. */
23+
#if !defined(ARCH_CORE_ARMv8M) && !defined(TARGET_M33)
24+
25+
#define NVIC_SetVector vIRQ_SetVector
26+
#define NVIC_GetVector vIRQ_GetVector
27+
28+
#else
29+
30+
#define NVIC_SetVector __NVIC_SetVector
31+
#define NVIC_GetVector __NVIC_GetVector
32+
33+
#endif
2434

2535
#endif /* __UVISOR_API_VECTAB_VIRTUAL_H__ */

features/FEATURE_UVISOR/includes/uvisor/api/inc/halt_exports.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ typedef enum {
4949
FAULT_USAGE,
5050
FAULT_HARD,
5151
FAULT_DEBUG,
52+
FAULT_SECURE,
5253
__THALTERROR_MAX /* always keep as the last element of the enum */
5354
} THaltError;
5455

0 commit comments

Comments
 (0)