Skip to content

Commit fa341df

Browse files
committed
rtl87x2g: osif: add ext_data_ram
1. add ext data ram heap in osif heap 2. rename the "ram_code" & "ram_data" to tcm0 and tcm1 Signed-off-by: Zhiyuan Tang <zhiyuan_tang@realsil.com.cn>
1 parent b188885 commit fa341df

1 file changed

Lines changed: 54 additions & 33 deletions

File tree

bee/rtl87x2g/osif/zephyr/osif_zephyr.c

Lines changed: 54 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <zephyr/devicetree.h>
1515
#include <zephyr/drivers/timer/system_timer.h>
1616
#include <kernel_internal.h> //for z_idle_threads and arch_kernel_init
17+
#include <zephyr/linker/linker-defs.h>
1718

1819
#include "os_queue.h"
1920
#include "os_msg.h"
@@ -37,46 +38,68 @@
3738

3839
LOG_MODULE_REGISTER(osif);
3940

40-
#define RAM_DATA_START DT_REG_ADDR(DT_NODELABEL(ram_data))
41-
#define RAM_DATA_SIZE DT_REG_SIZE(DT_NODELABEL(ram_data))
41+
#define EXTRAM_HEAP_START DT_REG_ADDR(DT_NODELABEL(ext_data_ram_heap))
42+
#define EXTRAM_HEAP_SIZE DT_REG_SIZE(DT_NODELABEL(ext_data_ram_heap))
4243

43-
#define RAM_CODE_START DT_REG_ADDR(DT_NODELABEL(ram_code))
44-
#define RAM_CODE_SIZE DT_REG_SIZE(DT_NODELABEL(ram_code))
44+
#define EXTRAM_START DT_REG_ADDR(DT_NODELABEL(ext_data_ram))
45+
#define EXTRAM_SIZE DT_REG_SIZE(DT_NODELABEL(ext_data_ram))
4546

46-
#define HEAP_START DT_REG_ADDR(DT_NODELABEL(heap))
47-
#define HEAP_SIZE DT_REG_SIZE(DT_NODELABEL(heap))
47+
#define EXTRAM_TOTAL_SIZE (16 * 1024) // 240KB
4848

49-
#define RAM_REGION_START 0x100c00
50-
#define RAM_REGION_END 0x13cc00
49+
BUILD_ASSERT(EXTRAM_START >= 0x200000 &&
50+
END_ADDRESS(EXTRAM_START, EXTRAM_SIZE) <= 0x204000,
51+
"EXTRAM Region is out of bounds");
52+
53+
BUILD_ASSERT(EXTRAM_HEAP_START >= 0x200000 &&
54+
END_ADDRESS(EXTRAM_HEAP_START, EXTRAM_HEAP_SIZE) <= 0x204000,
55+
"EXTRAM_HEAP Region is out of bounds");
56+
57+
BUILD_ASSERT(END_ADDRESS(EXTRAM_START, EXTRAM_SIZE) <= EXTRAM_HEAP_START,
58+
"EXTRAM end address overlaps with EXTRAM_HEAP start address");
59+
60+
BUILD_ASSERT(EXTRAM_SIZE + EXTRAM_HEAP_SIZE <= EXTRAM_TOTAL_SIZE,
61+
"Total size of EXTRAM & EXTRAM_HEAP regions exceeds 16KB!");
62+
63+
#define TCM0_START DT_REG_ADDR(DT_NODELABEL(tcm0))
64+
#define TCM0_SIZE DT_REG_SIZE(DT_NODELABEL(tcm0))
65+
66+
#define TCM1_START DT_REG_ADDR(DT_NODELABEL(tcm1))
67+
#define TCM1_SIZE DT_REG_SIZE(DT_NODELABEL(tcm1))
68+
69+
#define TCM_HEAP_START DT_REG_ADDR(DT_NODELABEL(tcm_heap))
70+
#define TCM_HEAP_SIZE DT_REG_SIZE(DT_NODELABEL(tcm_heap))
71+
72+
#define TCM_START 0x100c00
73+
#define TCM_END 0x13cc00
5174
#define MAX_TOTAL_SIZE (240 * 1024) // 240KB
5275

5376
#define END_ADDRESS(start, size) ((start) + (size))
5477

55-
// Assert for RAM Data Region
56-
BUILD_ASSERT(RAM_DATA_START >= RAM_REGION_START &&
57-
END_ADDRESS(RAM_DATA_START, RAM_DATA_SIZE) <= RAM_REGION_END,
58-
"RAM Data Region is out of bounds");
78+
// Assert for TCM0 Region
79+
BUILD_ASSERT(TCM0_START >= TCM_START &&
80+
END_ADDRESS(TCM0_START, TCM0_SIZE) <= TCM_END,
81+
"TCM0 Region is out of bounds");
5982

60-
// Assert for RAM Code Region
61-
BUILD_ASSERT(RAM_CODE_START >= RAM_REGION_START &&
62-
END_ADDRESS(RAM_CODE_START, RAM_CODE_SIZE) <= RAM_REGION_END,
63-
"RAM Code Region is out of bounds");
83+
// Assert for TCM1 Region
84+
BUILD_ASSERT(TCM1_START >= TCM_START &&
85+
END_ADDRESS(TCM1_START, TCM1_SIZE) <= TCM_END,
86+
"TCM1 Region is out of bounds");
6487

65-
// Assert for Heap Region
66-
BUILD_ASSERT(HEAP_START >= RAM_REGION_START &&
67-
END_ADDRESS(HEAP_START, HEAP_SIZE) <= RAM_REGION_END,
68-
"Heap Region is out of bounds");
88+
// Assert for TCM_HEAP Region
89+
BUILD_ASSERT(TCM_HEAP_START >= TCM_START &&
90+
END_ADDRESS(TCM_HEAP_START, TCM_HEAP_SIZE) <= TCM_END,
91+
"TCM_HEAP Region is out of bounds");
6992

7093
// Assert for Overlap
71-
BUILD_ASSERT(END_ADDRESS(RAM_DATA_START, RAM_DATA_SIZE) <= RAM_CODE_START,
72-
"RAM_DATA end address overlaps with RAM_CODE start address");
94+
BUILD_ASSERT(END_ADDRESS(TCM0_START, TCM0_SIZE) <= TCM1_START,
95+
"TCM0 end address overlaps with TCM1 start address");
7396

74-
BUILD_ASSERT(END_ADDRESS(RAM_CODE_START, RAM_CODE_SIZE) <= HEAP_START,
75-
"RAM_CODE end address overlaps with HEAP_START start address");
97+
BUILD_ASSERT(END_ADDRESS(TCM1_START, TCM1_SIZE) <= TCM_HEAP_START,
98+
"TCM1 end address overlaps with TCM_HEAP start address");
7699

77100
// Assert for Total Size
78-
BUILD_ASSERT(RAM_DATA_SIZE + RAM_CODE_SIZE + HEAP_SIZE <= MAX_TOTAL_SIZE,
79-
"Total size of TCM regions exceeds 240KB!");
101+
BUILD_ASSERT(TCM0_SIZE + TCM1_SIZE + TCM_HEAP_SIZE <= MAX_TOTAL_SIZE,
102+
"Total size of Three regions exceeds 240KB!");
80103

81104
task_sem_item task_sem_array[TASK_SEM_ARRAY_NUMBER] = {0};
82105
Timer_Info timer_number_array[TIMER_NUMBER_MAX];
@@ -92,15 +115,15 @@ void os_heap_init_zephyr(void)
92115
{
93116
// init heap in data on region
94117
// RAM_TYPE: RAM_TYPE_DATA_ON
95-
k_heap_init(&data_on_heap, (void *)HEAP_START, HEAP_SIZE);
118+
k_heap_init(&data_on_heap, (void *)TCM_HEAP_START, TCM_HEAP_SIZE);
96119

97120
// init heap in bufferON region
98121
// RAM_TYPE: RAM_TYPE_BUFFER_ON
99122
k_heap_init(&buffer_on_heap, (void *)BUFFER_ON_HEAP_ADDR, BUFFER_ON_HEAP_SIZE);
100123

101124
// init heap in ext_data_ram region
102125
// RAM_TYPE: RAM_TYPE_EXT_DATA_SRAM
103-
k_heap_init(&ext_data_heap, (void *)EXT_DATA_SRAM_HEAP_ADDR, EXT_DATA_SRAM_HEAP_SIZE);
126+
k_heap_init(&ext_data_heap, (void *)EXTRAM_HEAP_START, EXTRAM_HEAP_SIZE);
104127
}
105128

106129
void os_init_zephyr(void)
@@ -127,15 +150,13 @@ uint64_t os_sys_tick_get_zephyr(void)
127150
return (uint64_t)sys_clock_tick_get_32();
128151
}
129152

130-
131153
bool os_sched_start_zephyr(void)
132154
{
133155
return true;
134156
}
135157

136158
bool os_sched_stop_zephyr(void)
137159
{
138-
//TODO
139160
return true;
140161
}
141162

@@ -931,7 +952,7 @@ void os_mem_free_zephyr(void *p_block)
931952
{
932953
k_heap_free(&ext_data_heap, p_block);
933954
}
934-
else if (p_block >= (void *)DT_REG_ADDR(DT_NODELABEL(heap)))
955+
else if (p_block >= (void *)DT_REG_ADDR(DT_NODELABEL(tcm_heap)))
935956
{
936957
k_heap_free(&data_on_heap, p_block);
937958
}
@@ -959,7 +980,7 @@ void os_mem_aligned_free_zephyr(void *p_block)
959980
{
960981
k_heap_free(&ext_data_heap, p);
961982
}
962-
else if (p >= (void *)DT_REG_ADDR(DT_NODELABEL(heap)))
983+
else if (p >= (void *)DT_REG_ADDR(DT_NODELABEL(tcm_heap)))
963984
{
964985
k_heap_free(&data_on_heap, p);
965986
}
@@ -983,7 +1004,7 @@ size_t os_mem_peek_zephyr(RAM_TYPE ram_type)
9831004
{
9841005
case RAM_TYPE_DATA_ON:
9851006
sys_heap_runtime_stats_get(&data_on_heap.heap, &stats);
986-
heap_size = DT_REG_SIZE(DT_NODELABEL(heap));
1007+
heap_size = DT_REG_SIZE(DT_NODELABEL(tcm_heap));
9871008
break;
9881009
case RAM_TYPE_BUFFER_ON:
9891010
sys_heap_runtime_stats_get(&buffer_on_heap.heap, &stats);

0 commit comments

Comments
 (0)