Recently I discovered that (some?) mpii(4) controllers fill in link->port_wwn
with a fake wwn (4433221102000000) for sata devices. When you're trying to
boot a sparc64 box off a sata device attached to such a controller, this means
the bootpath matching in device_register() doesn't work, so you have to enter
the root device manually, which is unfun.
By the time the device is being registered, scsi_probedev has filled in the
devid, so we can use that to match against the boot path if link->port_wwn
doesn't work.
This makes life a lot easier on this controller in my S7-2:
mpii0 at pci19 dev 0 function 0 "Symbios Logic SAS3008" rev 0x02a
mpii0: ORCL-INT-SAS3, firmware 9.0.0.0, MPI 2.5
scsibus2 at mpii0: 1024 targets
ok?
Index: autoconf.c
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/sparc64/autoconf.c,v
retrieving revision 1.132
diff -u -p -r1.132 autoconf.c
--- autoconf.c 25 Jul 2019 22:45:53 -0000 1.132
+++ autoconf.c 14 Oct 2019 03:34:08 -0000
@@ -1459,6 +1459,16 @@ device_register(struct device *dev, void
if (bp->val[0] == sl->port_wwn && lun == sl->lun) {
nail_bootdev(dev, bp);
}
+
+ /*
+ * sata devices on some controllers don't get
+ * port_wwn filled in, so look at devid too.
+ */
+ if (sl->id && sl->id->d_len == 8 &&
+ sl->id->d_type == DEVID_NAA) {
+ if (memcmp(sl->id + 1, &bp->val[0], 8) == 0)
+ nail_bootdev(dev, bp);
+ }
return;
}