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;
}