Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/sparc64/sparc64 PR port-sparc64/53830: adapt QEMU w...
details: https://anonhg.NetBSD.org/src/rev/e023f1fcada8
branches: trunk
changeset: 995748:e023f1fcada8
user: martin <martin%NetBSD.org@localhost>
date: Fri Jan 04 16:25:06 2019 +0000
description:
PR port-sparc64/53830: adapt QEMU workarounds to newer OpenBIOS device
tree layout.
diffstat:
sys/arch/sparc64/sparc64/autoconf.c | 36 +++++++++++++++++++++++++-----------
1 files changed, 25 insertions(+), 11 deletions(-)
diffs (74 lines):
diff -r 172bdaaac9df -r e023f1fcada8 sys/arch/sparc64/sparc64/autoconf.c
--- a/sys/arch/sparc64/sparc64/autoconf.c Fri Jan 04 15:57:03 2019 +0000
+++ b/sys/arch/sparc64/sparc64/autoconf.c Fri Jan 04 16:25:06 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: autoconf.c,v 1.213 2017/09/15 13:27:53 martin Exp $ */
+/* $NetBSD: autoconf.c,v 1.214 2019/01/04 16:25:06 martin Exp $ */
/*
* Copyright (c) 1996
@@ -48,7 +48,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.213 2017/09/15 13:27:53 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.214 2019/01/04 16:25:06 martin Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -877,13 +877,16 @@
/*
* The interposed pseudo-parent node in OpenBIOS has a
- * device_type = "ide" and no "vendor-id".
- * It is the secondary bus if the name is "ide1".
+ * device_type = "ide" and no "compatible" property.
+ * It is the secondary bus if the name is "ide1" or "ide"
+ * with newer OpenBIOS versions. In the latter case, read
+ * the first reg value to discriminate the two channels.
*/
static bool
openbios_secondary_ata_heuristic(int parent)
{
char tmp[OFPATHLEN];
+ int regs[4];
if (OF_getprop(parent, "device_type", tmp, sizeof(tmp)) <= 0)
return false;
@@ -891,18 +894,29 @@
return false;
DPRINTF(ACDB_BOOTDEV, ("parent device_type is ide\n"));
- if (OF_getprop(parent, "vendor-id", tmp, sizeof(tmp)) > 0)
+ if (OF_getprop(parent, "compatible", tmp, sizeof(tmp)) > 0)
return false;
- DPRINTF(ACDB_BOOTDEV, ("parent has no vendor-id\n"));
+ DPRINTF(ACDB_BOOTDEV, ("parent has no compatible property\n"));
if (OF_getprop(parent, "name", tmp, sizeof(tmp)) <= 0)
return false;
- if (strcmp(tmp, "ide1") != 0)
- return false;
- DPRINTF(ACDB_BOOTDEV, ("parent seems to be an OpenBIOS"
- " secondary ATA bus, applying workaround target+2\n"));
+ if (strcmp(tmp, "ide1") == 0) {
+ DPRINTF(ACDB_BOOTDEV, ("parent seems to be an (old) OpenBIOS"
+ " secondary ATA bus, applying workaround target+2\n"));
+ return true;
+ } else if (strcmp(tmp, "ide") == 0) {
+ regs[0] = 42;
+ if (OF_getprop(parent, "reg", ®s, sizeof(regs))
+ >= sizeof(regs[0])) {
+ DPRINTF(ACDB_BOOTDEV, ("parent seems to be an OpenBIOS"
+ " ATA bus #%u\n", regs[0]));
- return true;
+ return regs[0] == 1;
+ }
+
+ }
+
+ return false;
}
/*
Home |
Main Index |
Thread Index |
Old Index