Skip to content

Commit 61b37aa

Browse files
committed
fix(mem): add missing init boot regions
Signed-off-by: Daniel Oliveira <[email protected]>
1 parent b6fe1c0 commit 61b37aa

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/arch/armv8/armv8-r/inc/arch/mem.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ struct addr_space_arch {
4646
.prlar = (_prlar), \
4747
})
4848

49-
#define PTE_INVALID PTE_FLAGS(0, 0)
50-
#define PTE_HYP_FLAGS PTE_FLAGS(PRBAR_AP_RW_EL2 | PRBAR_SH_IS, PRLAR_ATTR(1) | PRLAR_EN)
49+
#define PTE_INVALID PTE_FLAGS(0, 0)
50+
#define PTE_HYP_FLAGS PTE_FLAGS(PRBAR_AP_RW_EL2 | PRBAR_SH_IS, PRLAR_ATTR(1) | PRLAR_EN)
51+
#define PTE_HYP_FLAGS_CODE PTE_FLAGS(PRBAR_AP_RO_EL2 | PRBAR_SH_IS, PRLAR_ATTR(1) | PRLAR_EN)
5152
#define PTE_HYP_DEV_FLAGS \
5253
PTE_FLAGS(PRBAR_XN | PRBAR_AP_RW_EL2 | PRBAR_SH_IS, PRLAR_ATTR(2) | PRLAR_EN)
5354
#define PTE_VM_FLAGS PTE_FLAGS(PRBAR_AP_RW_EL1_EL2 | PRBAR_SH_NS, PRLAR_ATTR(1) | PRLAR_EN)

src/core/mpu/mem.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,11 @@ static void mem_init_boot_regions(void)
154154
vaddr_t image_noload_start = (vaddr_t)&_image_noload_start;
155155
vaddr_t image_end = (vaddr_t)&_image_end;
156156

157+
#ifdef MEM_NON_UNIFIED
158+
extern uint8_t _data_vma_start;
159+
vaddr_t data_vma_start = (vaddr_t)&_data_vma_start;
160+
#endif
161+
157162
struct mp_region mpr;
158163

159164
bool separate_noload_region = image_load_end != image_noload_start;
@@ -162,15 +167,24 @@ static void mem_init_boot_regions(void)
162167
mpr = (struct mp_region){
163168
.base = image_start,
164169
.size = (size_t)(first_region_end - image_start),
170+
#ifdef MEM_NON_UNIFIED
171+
.mem_flags = PTE_HYP_FLAGS_CODE,
172+
#else
165173
.mem_flags = PTE_HYP_FLAGS,
174+
#endif
166175
.as_sec = SEC_HYP_IMAGE,
167176
};
168177
mem_map(&cpu()->as, &mpr, false, true);
169178

170179
if (separate_noload_region) {
171180
mpr = (struct mp_region){
181+
#ifdef MEM_NON_UNIFIED
182+
.base = data_vma_start,
183+
.size = (size_t)(image_end - data_vma_start),
184+
#else
172185
.base = image_noload_start,
173186
.size = (size_t)image_end - image_noload_start,
187+
#endif
174188
.mem_flags = PTE_HYP_FLAGS,
175189
.as_sec = SEC_HYP_IMAGE,
176190
};

0 commit comments

Comments
 (0)