diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2021-04-25 17:36:11 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2021-04-25 17:36:11 +0200 |
commit | 9f54c2831717bc656df6e5a2fde2bf7be8e29fef (patch) | |
tree | 326308ee7850db62566bf29e91aef0ef76bfc128 | |
parent | 6b4b8e405ae17d5004085df03d166cddcc99c11b (diff) | |
download | plan9front-9f54c2831717bc656df6e5a2fde2bf7be8e29fef.tar.xz |
bcm: try ATAGS/DTB pointer from R2 on entry
-rw-r--r-- | sys/src/9/bcm/armv6.s | 3 | ||||
-rw-r--r-- | sys/src/9/bcm/armv7.s | 3 | ||||
-rw-r--r-- | sys/src/9/bcm/bootargs.c | 2 | ||||
-rw-r--r-- | sys/src/9/bcm/l.s | 3 | ||||
-rw-r--r-- | sys/src/9/bcm/main.c | 4 | ||||
-rw-r--r-- | sys/src/9/bcm/rebootcode.s | 1 |
6 files changed, 13 insertions, 3 deletions
diff --git a/sys/src/9/bcm/armv6.s b/sys/src/9/bcm/armv6.s index 3eae17b83..771949e28 100644 --- a/sys/src/9/bcm/armv6.s +++ b/sys/src/9/bcm/armv6.s @@ -76,6 +76,9 @@ TEXT _startpg(SB), 1, $-4 MOVW $1, R1 MCR CpSC, 0, R1, C(CpSPM), C(CpSPMperf), CpSPMctl + /* first arg to main is saved R2 */ + MOVW R10, R0 + /* * call main and loop forever if it returns */ diff --git a/sys/src/9/bcm/armv7.s b/sys/src/9/bcm/armv7.s index 4f0bd2b5a..4b448b6ef 100644 --- a/sys/src/9/bcm/armv7.s +++ b/sys/src/9/bcm/armv7.s @@ -126,6 +126,9 @@ TEXT _startpg(SB), 1, $-4 MOVW $1, R1 MCR CpSC, 0, R1, C(CpCLD), C(CpCLDena), CpCLDenapmnc + /* first arg to main is saved R2 */ + MOVW R10, R0 + /* * call main and loop forever if it returns */ diff --git a/sys/src/9/bcm/bootargs.c b/sys/src/9/bcm/bootargs.c index b0feae75e..445e0baef 100644 --- a/sys/src/9/bcm/bootargs.c +++ b/sys/src/9/bcm/bootargs.c @@ -265,7 +265,7 @@ bootargsinit(uintptr pa) uintptr len; /* - * kernel gets DTB/ATAGS pointer in R0 on entry + * kernel gets DTB/ATAGS pointer on entry */ if(pa != 0 && (len = cankaddr(pa)) != 0){ void *va = KADDR(pa); diff --git a/sys/src/9/bcm/l.s b/sys/src/9/bcm/l.s index 005f03a44..cf9c8a59c 100644 --- a/sys/src/9/bcm/l.s +++ b/sys/src/9/bcm/l.s @@ -10,6 +10,9 @@ * other cpus enter at cpureset in armv7.s */ TEXT _start(SB), 1, $-4 + /* save R2 in extern register R10 (Mach *m) */ + MOVW R2, R10 + /* * load physical base for SB addressing while mmu is off * keep a handy zero in R0 until first function call diff --git a/sys/src/9/bcm/main.c b/sys/src/9/bcm/main.c index ba289ad08..d6c4acaa6 100644 --- a/sys/src/9/bcm/main.c +++ b/sys/src/9/bcm/main.c @@ -75,7 +75,7 @@ launchinit(void) } void -main(void) +main(uintptr arg0) { extern char edata[], end[]; uint fw, board; @@ -84,7 +84,7 @@ main(void) memset(edata, 0, end - edata); /* clear bss */ mach0init(); quotefmtinstall(); - bootargsinit(0); + bootargsinit(arg0); confinit(); /* figures out amount of memory */ xinit(); uartconsinit(); diff --git a/sys/src/9/bcm/rebootcode.s b/sys/src/9/bcm/rebootcode.s index 8ae2da2b7..796e98a46 100644 --- a/sys/src/9/bcm/rebootcode.s +++ b/sys/src/9/bcm/rebootcode.s @@ -84,6 +84,7 @@ dowfi: BEQ dowfi /* if zero, wait again */ bootcpu: + MOVW $0, R2 /* no ATAGS/DTB pointer */ BIC $KSEGM, R8 /* entry to physical */ ORR $PHYSDRAM, R8 BL (R8) |