aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWojtek Kosior <kwojtus@protonmail.com>2019-12-26 19:22:24 +0100
committerWojtek Kosior <kwojtus@protonmail.com>2019-12-26 19:22:24 +0100
commit19efd77944dd42c3451a19e60a6948a52bc9ccad (patch)
tree91bb504b9aa8841dd7ae6e71ffad76f4ffd18bf5
parent31806d249fe6e57efee0531bb082f836e5b35a3d (diff)
downloadrpi-MMU-example-19efd77944dd42c3451a19e60a6948a52bc9ccad.tar.gz
rpi-MMU-example-19efd77944dd42c3451a19e60a6948a52bc9ccad.zip
minor changes to boot code
-rw-r--r--boot.S18
-rw-r--r--linker.ld2
2 files changed, 10 insertions, 10 deletions
diff --git a/boot.S b/boot.S
index be858ee..0cd0339 100644
--- a/boot.S
+++ b/boot.S
@@ -7,26 +7,24 @@
// r2 -> 0x00000100 - start of ATAGS
// preserve these registers as argument for kernel_main
-.globl _boot // make entry point label global
+.global _boot // make entry point label global
_boot:
- // Shut off extra cores
- mrc p15, 0, r5, c0, c0, 5
- and r5, r5, #3
- cmp r5, #0
+ // Only let the first core execute
+ mrc p15, 0, r3, c0, c0, 5
+ and r3, r3, #3
+ cmp r3, #0
beq proceed
// this is a kind of blef - races can theoretically still occur
// when the main core overwrites this part of memory
wfe
proceed:
- // go to system mode
+ // go to system mode (we had problems doing this later)
cps #0b11111
isb
- // Setup the stack.
- // It shall be directly below our kernel image
- ldr r5, =__start
- mov sp, r5
+ // Initialize the stack (_stack_top is defined in linker.ld)
+ ldr sp, =_stack_top
// Call kernel_main
ldr r3, =kernel_main
diff --git a/linker.ld b/linker.ld
index 33ac68c..e0e72b2 100644
--- a/linker.ld
+++ b/linker.ld
@@ -50,4 +50,6 @@ SECTIONS
__interrupts_size = __interrupts_end - __interrupts_start;
__end = .;
+
+ _stack_top = __start;
}