Module Name:    src
Committed By:   hgutch
Date:           Sat May 14 07:11:23 UTC 2022

Modified Files:
        src/sys/arch/sparc/stand/ofwboot: Locore.c
        src/sys/arch/sparc64/sparc64: ofw_machdep.c

Log Message:
PR 56829: Fix "map" call to Open Firmware and no longer mess up OFW stack.
This unbreaks miniroot.fs.

Thanks to Björn Johannesson for originally pointing this out and to
mrg@ for pointing out the actual issue and suggesting a fix.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/sparc/stand/ofwboot/Locore.c
cvs rdiff -u -r1.50 -r1.51 src/sys/arch/sparc64/sparc64/ofw_machdep.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sparc/stand/ofwboot/Locore.c
diff -u src/sys/arch/sparc/stand/ofwboot/Locore.c:1.16 src/sys/arch/sparc/stand/ofwboot/Locore.c:1.17
--- src/sys/arch/sparc/stand/ofwboot/Locore.c:1.16	Fri Sep 15 13:25:34 2017
+++ src/sys/arch/sparc/stand/ofwboot/Locore.c	Sat May 14 07:11:23 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: Locore.c,v 1.16 2017/09/15 13:25:34 martin Exp $	*/
+/*	$NetBSD: Locore.c,v 1.17 2022/05/14 07:11:23 hgutch Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -664,8 +664,6 @@ OF_map_phys(paddr_t paddr, off_t size, v
 		cell_t vaddr;
 		cell_t paddr_hi;
 		cell_t paddr_lo;
-		cell_t status;
-		cell_t retaddr;
 	} args;
 
 #ifdef	__notyet
@@ -676,7 +674,7 @@ OF_map_phys(paddr_t paddr, off_t size, v
 #endif
 	args.name = ADR2CELL("call-method");
 	args.nargs = 7;
-	args.nreturns = 1;
+	args.nreturns = 0;
 	args.method = ADR2CELL("map");
 	args.ihandle = HDL2CELL(mmuh);
 	args.mode = mode;
@@ -687,9 +685,7 @@ OF_map_phys(paddr_t paddr, off_t size, v
 
 	if (openfirmware(&args) == -1)
 		return -1;
-	if (args.status)
-		return -1;
-	return (vaddr_t)args.retaddr;
+	return 0;
 }
 
 

Index: src/sys/arch/sparc64/sparc64/ofw_machdep.c
diff -u src/sys/arch/sparc64/sparc64/ofw_machdep.c:1.50 src/sys/arch/sparc64/sparc64/ofw_machdep.c:1.51
--- src/sys/arch/sparc64/sparc64/ofw_machdep.c:1.50	Thu Mar 17 08:08:03 2022
+++ src/sys/arch/sparc64/sparc64/ofw_machdep.c	Sat May 14 07:11:23 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: ofw_machdep.c,v 1.50 2022/03/17 08:08:03 andvar Exp $	*/
+/*	$NetBSD: ofw_machdep.c,v 1.51 2022/05/14 07:11:23 hgutch Exp $	*/
 
 /*
  * Copyright (C) 1996 Wolfgang Solfrank.
@@ -34,7 +34,7 @@
 #include "opt_multiprocessor.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ofw_machdep.c,v 1.50 2022/03/17 08:08:03 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ofw_machdep.c,v 1.51 2022/05/14 07:11:23 hgutch Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -339,8 +339,6 @@ prom_map_phys(paddr_t paddr, off_t size,
 		cell_t vaddr;
 		cell_t phys_hi;
 		cell_t phys_lo;
-		cell_t status;
-		cell_t retaddr;
 	} args;
 
 	if (mmuh == -1 && ((mmuh = get_mmu_handle()) == -1)) {
@@ -349,7 +347,7 @@ prom_map_phys(paddr_t paddr, off_t size,
 	}
 	args.name = ADR2CELL(&"call-method");
 	args.nargs = 7;
-	args.nreturns = 1;
+	args.nreturns = 0;
 	args.method = ADR2CELL(&"map");
 	args.ihandle = HDL2CELL(mmuh);
 	args.mode = mode;
@@ -360,9 +358,7 @@ prom_map_phys(paddr_t paddr, off_t size,
 
 	if (openfirmware(&args) == -1)
 		return -1;
-	if (args.status)
-		return -1;
-	return (int)args.retaddr;
+	return 0;
 }
 
 

Reply via email to