Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: GENERIC64 aarch64 failure to autoboot



On Sun, Mar 05, 2023 at 10:56:31PM +0100, Michael van Elst wrote:
> On Mon, Mar 06, 2023 at 07:44:20AM +1030, Brett Lymn wrote:
> > On Sun, Mar 05, 2023 at 03:01:02PM -0000, Michael van Elst wrote:
> > >  
> > > -		if (guid != NULL && len == 16)
> > > +		if (guid == NULL || len == 16)
> > > +
> > 
> > Shouldn't that be "len != 16"?
> 
> Yes, and another error. The wedge device is 'dv' not 'dev'.
> 
> Here is a patch that works for me:

The first hunk was another local change. Please ignore.
Here is without:


Index: sys/arch/evbarm/fdt/fdt_machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbarm/fdt/fdt_machdep.c,v
retrieving revision 1.100
diff -p -u -r1.100 fdt_machdep.c
--- sys/arch/evbarm/fdt/fdt_machdep.c	5 Feb 2023 22:42:39 -0000	1.100
+++ sys/arch/evbarm/fdt/fdt_machdep.c	5 Mar 2023 21:59:49 -0000
@@ -743,9 +743,6 @@ fdt_detect_root_device(device_t dev)
 {
 	int error, len;
 
-	if (booted_device)
-		return;
-
 	const int chosen = OF_finddevice("/chosen");
 	if (chosen < 0)
 		return;
@@ -801,8 +798,15 @@ fdt_detect_root_device(device_t dev)
 		const struct uuid *guid =
 		    fdtbus_get_prop(chosen, "netbsd,gpt-guid", &len);
 
-		if (guid != NULL && len == 16)
-			booted_device = dev;
+		if (guid == NULL || len != 16)
+			return;
+
+		char guidstr[UUID_STR_LEN];
+		uuid_snprintf(guidstr, sizeof(guidstr), guid);
+
+		device_t dv = dkwedge_find_by_wname(guidstr);
+		if (dv != NULL)
+			booted_device = dv;
 
 		return;
 	}
@@ -895,8 +899,7 @@ fdt_cpu_rootconf(void)
 		if (device_class(dev) != DV_DISK)
 			continue;
 
-		if (device_is_a(dev, "ld") || device_is_a(dev, "sd") || device_is_a(dev, "wd"))
-			fdt_detect_root_device(dev);
+		fdt_detect_root_device(dev);
 
 		if (booted_device != NULL)
 			break;


Home | Main Index | Thread Index | Old Index