code: plan9front

Download patch

ref: 9f54c2831717bc656df6e5a2fde2bf7be8e29fef
parent: 6b4b8e405ae17d5004085df03d166cddcc99c11b
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Apr 25 13:36:11 EDT 2021

bcm: try ATAGS/DTB pointer from R2 on entry

--- a/sys/src/9/bcm/armv6.s
+++ b/sys/src/9/bcm/armv6.s
@@ -76,6 +76,9 @@
 	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
 	 */
--- a/sys/src/9/bcm/armv7.s
+++ b/sys/src/9/bcm/armv7.s
@@ -126,6 +126,9 @@
 	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
 	 */
--- a/sys/src/9/bcm/bootargs.c
+++ b/sys/src/9/bcm/bootargs.c
@@ -265,7 +265,7 @@
 	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);
--- 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
--- a/sys/src/9/bcm/main.c
+++ b/sys/src/9/bcm/main.c
@@ -75,7 +75,7 @@
 }
 
 void
-main(void)
+main(uintptr arg0)
 {
 	extern char edata[], end[];
 	uint fw, board;
@@ -84,7 +84,7 @@
 	memset(edata, 0, end - edata);	/* clear bss */
 	mach0init();
 	quotefmtinstall();
-	bootargsinit(0);
+	bootargsinit(arg0);
 	confinit();		/* figures out amount of memory */
 	xinit();
 	uartconsinit();
--- a/sys/src/9/bcm/rebootcode.s
+++ b/sys/src/9/bcm/rebootcode.s
@@ -84,6 +84,7 @@
 	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)