Module Name:    src
Committed By:   tsutsui
Date:           Mon Jan 13 17:33:10 UTC 2025

Modified Files:
        src/sys/arch/macppc/stand/ofwboot: boot.c version

Log Message:
Tweak bootpath strings in ofwboot for OpenBIOS used on qemu-system-ppc.

Bump version to denote the visible change.

This makes qemu-system-ppc -M mac99 booting from a harddisk image
using ofwboot installed by installboot(8) with /usr/mdec/bootxx:
---
% qemu-system-ppc --version
QEMU emulator version 9.1.2
Copyright (c) 2003-2024 Fabrice Bellard and the QEMU Project developers
% qemu-system-ppc -M mac99 -drive 
file=NetBSD-10.1-macppc.img,media=disk,format=raw -nographic

>> =============================================================
>> OpenBIOS 1.1 [Mar 7 2023 22:21]
>> Configuration device id QEMU version 1 machine id 1
>> CPUs: 1
>> Memory: 128M
>> UUID: 00000000-0000-0000-0000-000000000000
>> CPU type PowerPC,G4
milliseconds isn't unique.
Welcome to OpenBIOS v1.1 built on Mar 7 2023 22:21
Trying hd:,\\:tbxi...
Trying hd:,\ppc\bootinfo.txt...
Trying hd:,%BOOT...
>> Not a bootable ELF image
>> switching to new context:

OF_open bootpath=/pci@f2000000/mac-io@c/ata-3@20000/disk@0
read stage 2 blocks: 01234. done!
starting stage 2...

>> NetBSD/macppc OpenFirmware Boot, Revision 1.14 (Mon Jan 13 14:50:50 UTC 2025)
>> Open Firmware version 3.x
>> Open Firmware running in virtual-mode.
prom2boot: bootpath from OF: "/pci@f2000000/mac-io@c/ata-3@20000/disk@0:,%BOOT"
prom2boot: bootpath patched: "/pci@f2000000/mac-io@c/ata-3@20000/disk@0:"
bootline=
Trying /netbsd
11860332+167196 [463456+447084]=0xc570ec
 start=0x100000
[   1.0000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
[   1.0000000]     2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
[   1.0000000]     2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023,
[   1.0000000]     2024
[   1.0000000]     The NetBSD Foundation, Inc.  All rights reserved.
[   1.0000000] Copyright (c) 1982, 1986, 1989, 1991, 1993
[   1.0000000]     The Regents of the University of California.  All rights 
reserved.

[   1.0000000] NetBSD 10.1 (GENERIC) #0: Mon Dec 16 13:08:11 UTC 2024
[   1.0000000]  
mkre...@mkrepro.netbsd.org:/usr/src/sys/arch/macppc/compile/GENERIC
---


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/macppc/stand/ofwboot/boot.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/macppc/stand/ofwboot/version

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/macppc/stand/ofwboot/boot.c
diff -u src/sys/arch/macppc/stand/ofwboot/boot.c:1.31 src/sys/arch/macppc/stand/ofwboot/boot.c:1.32
--- src/sys/arch/macppc/stand/ofwboot/boot.c:1.31	Sun Feb 28 20:27:40 2021
+++ src/sys/arch/macppc/stand/ofwboot/boot.c	Mon Jan 13 17:33:10 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: boot.c,v 1.31 2021/02/28 20:27:40 thorpej Exp $	*/
+/*	$NetBSD: boot.c,v 1.32 2025/01/13 17:33:10 tsutsui Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -105,6 +105,7 @@ prom2boot(char *dev)
 {
 	char *cp;
 
+	DPRINTF("%s: bootpath from OF: \"%s\"\n", __func__, dev);
 	cp = dev + strlen(dev) - 1;
 	for (; *cp; cp--) {
 		if (*cp == ':') {
@@ -113,12 +114,31 @@ prom2boot(char *dev)
 				*cp = 0;
 				break;
 			} else {
-				/* disk@0:5,boot -> disk@0:0 */
-				strcpy(cp, ":0");
+				/*
+				 * OpenBIOS v1.1 on qemu-system-ppc emulates
+				 * Open Firmware 3.x but it also recognizes
+				 * pmBootEntry info in the Apple Partition Map
+				 * like old Open Firmware 1.x/2.x machines.
+				 * In such case, the OpenBIOS passes
+				 * "/[boot device]/disk@0:,%BOOT"
+				 * for bootpath strings, but it looks
+				 * the OpenBIOS doesn't recognize
+				 * partition info in "disk@0:0" format.
+				 * So just remove file arg strings without
+				 * adding partition info in such case.
+				 */
+				if (cp[1] == ',') {
+					/* just drop extra ",[bootfile]" */
+					cp[1] = '\0';
+				} else {
+					/* disk@0:5,boot -> disk@0:0 */
+					strcpy(cp, ":0");
+				}
 				break;
 			}
 		}
 	}
+	DPRINTF("%s: bootpath patched: \"%s\"\n", __func__, dev);
 }
 
 static void

Index: src/sys/arch/macppc/stand/ofwboot/version
diff -u src/sys/arch/macppc/stand/ofwboot/version:1.15 src/sys/arch/macppc/stand/ofwboot/version:1.16
--- src/sys/arch/macppc/stand/ofwboot/version:1.15	Sun Feb 28 20:27:40 2021
+++ src/sys/arch/macppc/stand/ofwboot/version	Mon Jan 13 17:33:10 2025
@@ -1,4 +1,4 @@
-$NetBSD: version,v 1.15 2021/02/28 20:27:40 thorpej Exp $
+$NetBSD: version,v 1.16 2025/01/13 17:33:10 tsutsui Exp $
 
 1.1:		Initial revision from NetBSD/powerpc.
 1.2:		Use MI loadfile().
@@ -16,3 +16,4 @@ $NetBSD: version,v 1.15 2021/02/28 20:27
 		no OF path was specified.
 1.13:		Fix boot failure of installation floppies
 1.14:		Properly inform OFW of the kernel's location using claim + map.
+1.15:		Tweak bootpath strings for OpenBIOS v1.1 used on QEMU.

Reply via email to