Skip to content

Commit b8de910

Browse files
committed
sparcv8leon3: allocate space for copied syspage
JIRA: RTOS-907
1 parent 2d114ce commit b8de910

3 files changed

Lines changed: 25 additions & 25 deletions

File tree

hal/sparcv8leon3/gaisler/generic/_init.S

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#define ADDR_PDIR2 (ADDR_PDIR1 + 0x400)
3131
#define ADDR_PDIR3 (ADDR_CTXTAB + 0x1000)
3232

33-
#define VADDR_SYSPAGE (_end + SIZE_PAGE - 1)
33+
#define VADDR_SYSPAGE _hal_syspageCopied
3434
#define PADDR_SYSPAGE PHY_ADDR(VADDR_SYSPAGE)
3535

3636
#define VADDR_STACK (pmap_common + 7 * SIZE_PAGE)
@@ -47,13 +47,6 @@
4747
.endm
4848

4949

50-
.macro set_page_align addr out
51-
sethi %hi(\addr), \out
52-
srl \out, 12, \out
53-
sll \out, 12, \out
54-
.endm
55-
56-
5750
.section ".text"
5851
.align 4
5952
.global _init
@@ -74,7 +67,7 @@ _init:
7467

7568
/* %g2 = syspage pa (from plo) */
7669
set PHY_ADDR(syspage), %g3
77-
set_page_align VADDR_SYSPAGE, %g1
70+
set VADDR_SYSPAGE, %g1
7871

7972
/* store VADDR_SYSPAGE in syspage */
8073
st %g1, [%g3]
@@ -84,7 +77,7 @@ _init:
8477
sub %g1, %g2, %l0
8578
st %l0, [%g4]
8679

87-
set_page_align PADDR_SYSPAGE, %g3
80+
set PADDR_SYSPAGE, %g3
8881
/* calculate pa of syspage end */
8982
ld [%g2 + 4], %l1 /* %l1 = syspage->size */
9083
add %g2, %l1, %l2 /* %l2 = plo syspage end */
@@ -274,3 +267,10 @@ _init_core_loop:
274267
ba _init_core_loop
275268
nop
276269
.size _init_core, . - _init_core
270+
271+
272+
.section ".bss"
273+
.align 4
274+
_hal_syspageCopied:
275+
.zero 0x400
276+
.size _hal_syspageCopied, . - _hal_syspageCopied

hal/sparcv8leon3/gaisler/gr712rc/_init.S

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#define ADDR_PDIR2 (ADDR_PDIR1 + 0x400)
3131
#define ADDR_PDIR3 (ADDR_CTXTAB + 0x1000)
3232

33-
#define VADDR_SYSPAGE (_end + SIZE_PAGE - 1)
33+
#define VADDR_SYSPAGE _hal_syspageCopied
3434
#define PADDR_SYSPAGE PHY_ADDR(VADDR_SYSPAGE)
3535

3636
#define VADDR_STACK (pmap_common + 7 * SIZE_PAGE)
@@ -47,13 +47,6 @@
4747
.endm
4848

4949

50-
.macro set_page_align addr out
51-
sethi %hi(\addr), \out
52-
srl \out, 12, \out
53-
sll \out, 12, \out
54-
.endm
55-
56-
5750
.section ".text"
5851
.align 4
5952
.global _init
@@ -74,7 +67,7 @@ _init:
7467

7568
/* %g2 = syspage pa (from plo) */
7669
set PHY_ADDR(syspage), %g3
77-
set_page_align VADDR_SYSPAGE, %g1
70+
set VADDR_SYSPAGE, %g1
7871

7972
/* store VADDR_SYSPAGE in syspage */
8073
st %g1, [%g3]
@@ -84,7 +77,7 @@ _init:
8477
sub %g1, %g2, %l0
8578
st %l0, [%g4]
8679

87-
set_page_align PADDR_SYSPAGE, %g3
80+
set PADDR_SYSPAGE, %g3
8881
/* calculate pa of syspage end */
8982
ld [%g2 + 4], %l1 /* %l1 = syspage->size */
9083
add %g2, %l1, %l2 /* %l2 = plo syspage end */
@@ -277,3 +270,10 @@ _init_core_loop:
277270
ba _init_core_loop
278271
nop
279272
.size _init_core, . - _init_core
273+
274+
275+
.section ".bss"
276+
.align 4
277+
_hal_syspageCopied:
278+
.zero 0x400
279+
.size _hal_syspageCopied, . - _hal_syspageCopied

hal/sparcv8leon3/pmap.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -725,13 +725,13 @@ void _pmap_init(pmap_t *pmap, void **vstart, void **vend)
725725
_pmap_enter(pmap, (addr_t)pmap_common.start, (*vstart), PGHD_WRITE | PGHD_READ | PGHD_PRESENT, NULL, 0);
726726

727727
/* Map kernel text & rodata as RX */
728-
for (i = VADDR_KERNEL; i < CEIL_PAGE((ptr_t)(&__bss_start)); i += SIZE_PAGE) {
728+
for (i = VADDR_KERNEL; i < CEIL_PAGE((ptr_t)(&_etext)); i += SIZE_PAGE) {
729729
addr = pmap_common.kernel + (i - VADDR_KERNEL);
730730
_pmap_enter(pmap, addr, (void *)i, PGHD_READ | PGHD_EXEC | PGHD_PRESENT, NULL, 0);
731731
}
732732

733-
/* Map kernel bss and copied syspage as RW */
734-
for (i = CEIL_PAGE((ptr_t)(&__bss_start)); i < CEIL_PAGE((ptr_t)(&_end)) + SIZE_PAGE; i += SIZE_PAGE) {
733+
/* Map kernel bss as RW */
734+
for (i = CEIL_PAGE((ptr_t)(&__bss_start)); i < CEIL_PAGE((ptr_t)(&_end)); i += SIZE_PAGE) {
735735
addr = pmap_common.kernel + (i - VADDR_KERNEL);
736736
_pmap_enter(pmap, addr, (void *)i, PGHD_WRITE | PGHD_READ | PGHD_PRESENT, NULL, 0);
737737
}
@@ -755,6 +755,6 @@ void _pmap_halInit(void)
755755
pmap_common.memMap.count = 0;
756756

757757
pmap_common.kernel = syspage->pkernel;
758-
pmap_common.kernelsz = CEIL_PAGE(&_end) - (addr_t)&_start + SIZE_PAGE;
759-
pmap_common.vkernelEnd = VADDR_KERNEL + pmap_common.kernelsz;
758+
pmap_common.kernelsz = CEIL_PAGE(&_end) - VADDR_KERNEL;
759+
pmap_common.vkernelEnd = CEIL_PAGE(&_end);
760760
}

0 commit comments

Comments
 (0)