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:


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:54:09 -0000
@@ -209,6 +209,15 @@ fdt_add_boot_physmem(const struct fdt_me
        bp->bp_pages = atop(eaddr) - bp->bp_start;
        bp->bp_freelist = VM_FREELIST_DEFAULT;
 
+#ifdef VM_FREELIST_4GB
+       if (eaddr < (paddr_t)4 * 1024 * 1024 * 1024)
+               bp->bp_freelist = VM_FREELIST_4GB;
+#endif
+#ifdef VM_FREELIST_1GB
+       if (eaddr < (paddr_t)1 * 1024 * 1024 * 1024)
+               bp->bp_freelist = VM_FREELIST_1GB;
+#endif
+
 #ifdef PMAP_NEED_ALLOC_POOLPAGE
        const uint64_t memory_size = *(uint64_t *)arg;
        if (atop(memory_size) > bp->bp_pages) {
@@ -743,9 +752,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 +807,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 +908,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;


-- 
                                Michael van Elst
Internet: mlel...@serpens.de
                                "A potential Snark may lurk in every tree."

Reply via email to