11#define MIN_CHUNK_SIZE 8
23inline uintptr_t snrt_align_up(uintptr_t addr,
size_t size,
25 return (((addr - base) + size - 1) / size) * size + base;
28inline void *snrt_align_up(
void *addr,
size_t size,
void *base = 0) {
29 return (
void *)snrt_align_up((uintptr_t)addr, size, (uintptr_t)base);
32inline uintptr_t snrt_align_up_hyperbank(uintptr_t addr) {
33 return snrt_align_up(addr, SNRT_TCDM_HYPERBANK_WIDTH, SNRT_TCDM_START_ADDR);
36inline void *snrt_align_up_hyperbank(
void *addr) {
37 return (
void *)snrt_align_up_hyperbank((uintptr_t)addr);
52inline void *snrt_l1_next() {
return (
void *)snrt_l1_allocator()->next; }
54inline void *snrt_l3_next() {
return (
void *)snrt_l3_allocator()->next; }
63inline void *snrt_l1_alloc(
size_t size) {
68 size = snrt_align_up(size, MIN_CHUNK_SIZE);
79 void *ret = (
void *)alloc->next;
87inline void snrt_l1_update_next(
void *next) {
89 alloc->next = (uint32_t)next;
99inline void *snrt_l3_alloc(
size_t size) {
102 size = snrt_align_up(size, MIN_CHUNK_SIZE);
106 void *ret = (
void *)alloc->next;
111inline void snrt_alloc_init() {
113 if (snrt_is_dm_core()) {
118 snrt_l1_allocator()->base =
119 snrt_align_up(snrt_l1_start_addr(), MIN_CHUNK_SIZE);
120 snrt_l1_allocator()->end = snrt_l1_end_addr();
121 snrt_l1_allocator()->next = snrt_l1_allocator()->base;
123 extern uint32_t _edram;
124 snrt_l3_allocator()->base =
125 snrt_align_up((uint32_t)&_edram, MIN_CHUNK_SIZE);
126 snrt_l3_allocator()->end = snrt_l3_allocator()->base;
127 snrt_l3_allocator()->next = snrt_l3_allocator()->base;
130 snrt_cluster_hw_barrier();
Definition alloc_decls.h:10