Re: Issue with determining boot device using NVRAM

T <[email protected]> Mon, 24 Feb 2020 03:22:20 -0700
Newsgroups gmane.os.netbsd.ports.prep
Message-ID <[email protected]>
Alright, figured it out. The ?bH sections were other buses that needed 
to be captured and assigned blank names. I could not get the ISA NIC 
(ep0) to work with the fw-path, because there is an issue with the spec 
that requires special handling of the integrated card. I don't think 
it's even possible to do a remote boot off of it anyway (needs to be a 
PCI NIC that's recognized by the firmware). There might be additional 
buses that need to be captured for other PReP models, but these where 
all the relevant ones on my machine. Here is the patch and dmesg output:

--- /usr/src/sys/arch/prep/prep/autoconf.c     2020-02-24 
02:34:49.760979074 -0700
+++ /usr/src/sys/arch/prep/prep/autoconf.c  2020-02-24 
02:30:18.387739603 -0700
@@ -117,7 +117,9 @@
             device_is_a(dev, "pckbc") || device_is_a(dev, "pckbd") ||
             device_is_a(dev, "vga") || device_is_a(dev, "wsdisplay") ||
             device_is_a(dev, "wskbd") || device_is_a(dev, "wsmouse") ||
-           device_is_a(dev, "pms") || device_is_a(dev, "cpu"))
+           device_is_a(dev, "pms") || device_is_a(dev, "cpu") ||
+           device_is_a(dev, "nvram") || device_is_a(dev, "isabeep") ||
+           device_is_a(dev, "audio"))
                 return;

         if (device_is_a(dev, "pchb")) {
@@ -218,6 +220,11 @@
                 n += snprintf(devpath + n, sizeof(devpath) - n, "%d",
                     device_unit(dev));
         }
+       /* Catch buses so they do not show up in the fw-path. DV_BUS? */
+       if (device_is_a(dev, "isa") || device_is_a(dev, "isapnp") ||
+           device_is_a(dev, "scsibus") || device_is_a(dev, "umass") ||
+           device_is_a(dev, "usb") || device_is_a(dev, "uhub"))
+               n = snprintf(devpath, sizeof(devpath), "");

         str1 = prop_string_create_cstring(devpath);
         KASSERT(str1 != NULL);



===dmesg===
...
pci0 devpath: /+pci@80000000 == /pci@80000000
pcib0 devpath: /pci@80000000+pci1014,a@b,0 == /pci@80000000/pci1014,a@b,0
isa0 devpath: /pci@80000000/pci1014,a@b,0+ == /pci@80000000/pci1014,a@b,0
fdc0 devpath: /pci@80000000/pci1014,a@b,0+PNP0700@3f0 == 
/pci@80000000/pci1014,a@b,0/PNP0700@3f0
pchb0 devpath: /pci@80000000+pci1057,1@0,0 == /pci@80000000/pci1057,1@0,0
pcn0 devpath: /pci@80000000+pci1022,2000@c,0: == 
/pci@80000000/pci1022,2000@c,0:
siop0 devpath: /pci@80000000+pci1000,1@10,0 == /pci@80000000/pci1000,1@10,0
pdcsata0 devpath: /pci@80000000+pci105a,3515@12,0 == 
/pci@80000000/pci105a,3515@12,0
ohci0 devpath: /pci@80000000+pci1033,35@16,0 == 
/pci@80000000/pci1033,35@16,0
ohci1 devpath: /pci@80000000+pci1033,35@16,1 == 
/pci@80000000/pci1033,35@16,1
ehci0 devpath: /pci@80000000+pci1033,e0@16,2 == 
/pci@80000000/pci1033,e0@16,2
scsibus0 devpath: /pci@80000000/pci1000,1@10,0+ == 
/pci@80000000/pci1000,1@10,0
atabus0 devpath: /pci@80000000/pci105a,3515@12,0+ == 
/pci@80000000/pci105a,3515@12,0
atabus1 devpath: /pci@80000000/pci105a,3515@12,0+ == 
/pci@80000000/pci105a,3515@12,0
atabus2 devpath: /pci@80000000/pci105a,3515@12,0+ == 
/pci@80000000/pci105a,3515@12,0
atabus3 devpath: /pci@80000000/pci105a,3515@12,0+ == 
/pci@80000000/pci105a,3515@12,0
usb0 devpath: /pci@80000000/pci1033,35@16,0+ == 
/pci@80000000/pci1033,35@16,0
usb1 devpath: /pci@80000000/pci1033,35@16,1+ == 
/pci@80000000/pci1033,35@16,1
usb2 devpath: /pci@80000000/pci1033,e0@16,2+ == 
/pci@80000000/pci1033,e0@16,2
fd0 devpath: /pci@80000000/pci1014,a@b,0/PNP0700@3f0+harddisk@0 == 
/pci@80000000/pci1014,a@b,0/PNP0700@3f0/harddisk@0
fd1 devpath: /pci@80000000/pci1014,a@b,0/PNP0700@3f0+harddisk@1 == 
/pci@80000000/pci1014,a@b,0/PNP0700@3f0/harddisk@1
isapnp0 devpath: /pci@80000000/pci1014,a@b,0+ == /pci@80000000/pci1014,a@b,0
uhub0 devpath: /pci@80000000/pci1033,35@16,0+ == 
/pci@80000000/pci1033,35@16,0
uhub1 devpath: /pci@80000000/pci1033,35@16,1+ == 
/pci@80000000/pci1033,35@16,1
uhub2 devpath: /pci@80000000/pci1033,e0@16,2+ == 
/pci@80000000/pci1033,e0@16,2
wd0 devpath: /pci@80000000/pci105a,3515@12,0+harddisk@0 == 
/pci@80000000/pci105a,3515@12,0/harddisk@0
sd0 devpath: /pci@80000000/pci1000,1@10,0+harddisk@0,0 == 
/pci@80000000/pci1000,1@10,0/harddisk@0,0
cd0 devpath: /pci@80000000/pci1000,1@10,0+cdrom@1,0 == 
/pci@80000000/pci1000,1@10,0/cdrom@1,0
cd1 devpath: /pci@80000000/pci1000,1@10,0+cdrom@6,0 == 
/pci@80000000/pci1000,1@10,0/cdrom@6,0
ep0 devpath: /pci@80000000/pci1014,a@b,0+: == /pci@80000000/pci1014,a@b,0/:
uhub3 devpath: /pci@80000000/pci1033,e0@16,2+ == 
/pci@80000000/pci1033,e0@16,2
uhidev0 devpath: /pci@80000000/pci1033,e0@16,2+ == 
/pci@80000000/pci1033,e0@16,2
umass0 devpath: /pci@80000000/pci1033,e0@16,2+ == 
/pci@80000000/pci1033,e0@16,2
ums0 devpath: /pci@80000000/pci1033,e0@16,2+0bH == 
/pci@80000000/pci1033,e0@16,2/0bH
scsibus1 devpath: /pci@80000000/pci1033,e0@16,2+ == 
/pci@80000000/pci1033,e0@16,2
sd1 devpath: /pci@80000000/pci1033,e0@16,2+harddisk@0,0 == 
/pci@80000000/pci1033,e0@16,2/harddisk@0,0
Modified bootpath: /pci@80000000/pci1000,1@10,0/harddisk@0,0
dev mainbus0: fw-path: /
dev pnpbus0: fw-path: /pci@80000000/pci1014,a@b,0
dev pci0: fw-path: /pci@80000000
dev fdc0: fw-path: /pci@80000000/pci1014,a@b,0/PNP0700@3f0
dev pchb0: fw-path: /pci@80000000/pci1057,1@0,0
dev pcib0: fw-path: /pci@80000000/pci1014,a@b,0
dev pcn0: fw-path: /pci@80000000/pci1022,2000@c,0:
dev siop0: fw-path: /pci@80000000/pci1000,1@10,0
dev pdcsata0: fw-path: /pci@80000000/pci105a,3515@12,0
dev ohci0: fw-path: /pci@80000000/pci1033,35@16,0
dev ohci1: fw-path: /pci@80000000/pci1033,35@16,1
dev ehci0: fw-path: /pci@80000000/pci1033,e0@16,2
dev scsibus0: fw-path: /pci@80000000/pci1000,1@10,0
dev atabus0: fw-path: /pci@80000000/pci105a,3515@12,0
dev atabus1: fw-path: /pci@80000000/pci105a,3515@12,0
dev atabus2: fw-path: /pci@80000000/pci105a,3515@12,0
dev atabus3: fw-path: /pci@80000000/pci105a,3515@12,0
dev usb0: fw-path: /pci@80000000/pci1033,35@16,0
dev usb1: fw-path: /pci@80000000/pci1033,35@16,1
dev usb2: fw-path: /pci@80000000/pci1033,e0@16,2
dev isa0: fw-path: /pci@80000000/pci1014,a@b,0
dev fd0: fw-path: /pci@80000000/pci1014,a@b,0/PNP0700@3f0/harddisk@0
dev fd1: fw-path: /pci@80000000/pci1014,a@b,0/PNP0700@3f0/harddisk@1
dev isapnp0: fw-path: /pci@80000000/pci1014,a@b,0
dev uhub0: fw-path: /pci@80000000/pci1033,35@16,0
dev uhub1: fw-path: /pci@80000000/pci1033,35@16,1
dev uhub2: fw-path: /pci@80000000/pci1033,e0@16,2
dev wd0: fw-path: /pci@80000000/pci105a,3515@12,0/harddisk@0
dev sd0: fw-path: /pci@80000000/pci1000,1@10,0/harddisk@0,0
boot device: sd0
root on wd0a dumps on wd0b
...
================


On 2/23/20 7:38 PM, T wrote:
> Hello, I have had a consistent problem on this 43p 7248-132 where the 
> kernel fails to determine the boot device. It's been possible to work 
> around this issue by setting the kernel root file system path in the 
> kernel config and building a custom kernel to use. The current 
> hardware configuration of the system requires me to build a kernel, so 
> it's not a critical issue, but my curiosity of the root cause led me 
> to investigate it. Having reviewed some available dmesg outputs on the 
> web from similar machines, this issue does not look to have affected 
> those systems. Those machines do look to be running older versions of 
> NetBSD, mine is using 8.1_STABLE, so it's uncertain if this is an 
> issue specific to my machine. The source code that handles this 
> process is located in:
> http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/prep/prep/autoconf.c
> Using the kernel option "NVRAM_DUMP" and reviewing the the resulting 
> dmesg output has revealed devpath(and derived fw-path) strings with 
> extra characters that look as though they should not be there. The 
> PReP NVRAM specification for how these strings should be formatted is 
> located here:
> ftp://ftp.software.ibm.com/rs6000/technology/spec/nvram_p.ps
> In that document, section 1.2.3 provides example fw-paths, and they do 
> not have the extra segments, e.g. "0bH", "1bH", "2bH".
>
> Can anyone else confirm that the "NVRAM_DUMP" dmesg output of their 
> machine looks similar to mine or if they have a similar problem with 
> boot device matching? I'll continue to look through the source code to 
> see if I can figure out what is occurring.
>
> ===excerpt from dmesg===
>
> nvram0 at pnpbus0: port 0x74-0x75 0x76
> nvram0: Read 3118 bytes from nvram of size 4096
> Boot device: /pci@80000000/pci1000,1@10,0/harddisk@0,0
> ...
> pci0 devpath: /+pci@80000000 == /pci@80000000
> pcib0 devpath: /pci@80000000+pci1014,a@b,0 == /pci@80000000/pci1014,a@b,0
> isa0 devpath: /pci@80000000/pci1014,a@b,0+0bH == 
> /pci@80000000/pci1014,a@b,0/0bH
> fdc0 devpath: /pci@80000000/pci1014,a@b,0/0bH+PNP0700@3f0 == 
> /pci@80000000/pci1014,a@b,0/0bH/PNP0700@3f0
> nvram0 devpath: /pci@80000000/pci1014,a@b,0/0bH+IBM0008@74 == 
> /pci@80000000/pci1014,a@b,0/0bH/IBM0008@74
> pchb0 devpath: /pci@80000000+pci1057,1@0,0 == /pci@80000000/pci1057,1@0,0
> pcn0 devpath: /pci@80000000+pci1022,2000@c,0: == 
> /pci@80000000/pci1022,2000@c,0:
> siop0 devpath: /pci@80000000+pci1000,1@10,0 == 
> /pci@80000000/pci1000,1@10,0
> pdcsata0 devpath: /pci@80000000+pci105a,3515@12,0 == 
> /pci@80000000/pci105a,3515@12,0
> ohci0 devpath: /pci@80000000+pci1033,35@16,0 == 
> /pci@80000000/pci1033,35@16,0
> ohci1 devpath: /pci@80000000+pci1033,35@16,1 == 
> /pci@80000000/pci1033,35@16,1
> ehci0 devpath: /pci@80000000+pci1033,e0@16,2 == 
> /pci@80000000/pci1033,e0@16,2
> scsibus0 devpath: /pci@80000000/pci1000,1@10,0+0bH == 
> /pci@80000000/pci1000,1@10,0/0bH
> atabus0 devpath: /pci@80000000/pci105a,3515@12,0+ == 
> /pci@80000000/pci105a,3515@12,0
> atabus1 devpath: /pci@80000000/pci105a,3515@12,0+ == 
> /pci@80000000/pci105a,3515@12,0
> atabus2 devpath: /pci@80000000/pci105a,3515@12,0+ == 
> /pci@80000000/pci105a,3515@12,0
> atabus3 devpath: /pci@80000000/pci105a,3515@12,0+ == 
> /pci@80000000/pci105a,3515@12,0
> usb0 devpath: /pci@80000000/pci1033,35@16,0+0bH == 
> /pci@80000000/pci1033,35@16,0/0bH
> usb1 devpath: /pci@80000000/pci1033,35@16,1+1bH == 
> /pci@80000000/pci1033,35@16,1/1bH
> usb2 devpath: /pci@80000000/pci1033,e0@16,2+0bH == 
> /pci@80000000/pci1033,e0@16,2/0bH
> fd0 devpath: /pci@80000000/pci1014,a@b,0/0bH/PNP0700@3f0+harddisk@0 == 
> /pci@80000000/pci1014,a@b,0/0bH/PNP0700@3f0/harddisk@0
> fd1 devpath: /pci@80000000/pci1014,a@b,0/0bH/PNP0700@3f0+harddisk@1 == 
> /pci@80000000/pci1014,a@b,0/0bH/PNP0700@3f0/harddisk@1
> isapnp0 devpath: /pci@80000000/pci1014,a@b,0/0bH+0bH == 
> /pci@80000000/pci1014,a@b,0/0bH/0bH
> uhub0 devpath: /pci@80000000/pci1033,35@16,0/0bH+0bH == 
> /pci@80000000/pci1033,35@16,0/0bH/0bH
> uhub1 devpath: /pci@80000000/pci1033,35@16,1/1bH+1bH == 
> /pci@80000000/pci1033,35@16,1/1bH/1bH
> uhub2 devpath: /pci@80000000/pci1033,e0@16,2/0bH+2bH == 
> /pci@80000000/pci1033,e0@16,2/0bH/2bH
> wd0 devpath: /pci@80000000/pci105a,3515@12,0+harddisk@0 == 
> /pci@80000000/pci105a,3515@12,0/harddisk@0
> sd0 devpath: /pci@80000000/pci1000,1@10,0/0bH+harddisk@0,0 == 
> /pci@80000000/pci1000,1@10,0/0bH/harddisk@0,0
> cd0 devpath: /pci@80000000/pci1000,1@10,0/0bH+cdrom@1,0 == 
> /pci@80000000/pci1000,1@10,0/0bH/cdrom@1,0
> cd1 devpath: /pci@80000000/pci1000,1@10,0/0bH+cdrom@6,0 == 
> /pci@80000000/pci1000,1@10,0/0bH/cdrom@6,0
> ep0 devpath: /pci@80000000/pci1014,a@b,0/0bH/0bH+: == 
> /pci@80000000/pci1014,a@b,0/0bH/0bH/:
> uhub3 devpath: /pci@80000000/pci1033,e0@16,2/0bH/2bH+2bH == 
> /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH
> nsphy0 devpath: /pci@80000000/pci1014,a@b,0/0bH/0bH/:+ == 
> /pci@80000000/pci1014,a@b,0/0bH/0bH/:
> umass0 devpath: /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH+ == 
> /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH
> scsibus1 devpath: /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH+0bH == 
> /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH/0bH
> sd1 devpath: 
> /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH/0bH+harddisk@0,0 == 
> /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH/0bH/harddisk@0,0
> Modified bootpath: /pci@80000000/pci1000,1@10,0/harddisk@0,0
> dev mainbus0: fw-path: /
> dev pnpbus0: fw-path: /pci@80000000/pci1014,a@b,0/0bH
> dev pci0: fw-path: /pci@80000000
> dev fdc0: fw-path: /pci@80000000/pci1014,a@b,0/0bH/PNP0700@3f0
> dev nvram0: fw-path: /pci@80000000/pci1014,a@b,0/0bH/IBM0008@74
> dev pchb0: fw-path: /pci@80000000/pci1057,1@0,0
> dev pcib0: fw-path: /pci@80000000/pci1014,a@b,0
> dev pcn0: fw-path: /pci@80000000/pci1022,2000@c,0:
> dev siop0: fw-path: /pci@80000000/pci1000,1@10,0
> dev pdcsata0: fw-path: /pci@80000000/pci105a,3515@12,0
> dev ohci0: fw-path: /pci@80000000/pci1033,35@16,0
> dev ohci1: fw-path: /pci@80000000/pci1033,35@16,1
> dev ehci0: fw-path: /pci@80000000/pci1033,e0@16,2
> dev scsibus0: fw-path: /pci@80000000/pci1000,1@10,0/0bH
> dev atabus0: fw-path: /pci@80000000/pci105a,3515@12,0
> dev atabus1: fw-path: /pci@80000000/pci105a,3515@12,0
> dev atabus2: fw-path: /pci@80000000/pci105a,3515@12,0
> dev atabus3: fw-path: /pci@80000000/pci105a,3515@12,0
> dev usb0: fw-path: /pci@80000000/pci1033,35@16,0/0bH
> dev usb1: fw-path: /pci@80000000/pci1033,35@16,1/1bH
> dev usb2: fw-path: /pci@80000000/pci1033,e0@16,2/0bH
> dev isa0: fw-path: /pci@80000000/pci1014,a@b,0/0bH
> dev fd0: fw-path: /pci@80000000/pci1014,a@b,0/0bH/PNP0700@3f0/harddisk@0
> dev fd1: fw-path: /pci@80000000/pci1014,a@b,0/0bH/PNP0700@3f0/harddisk@1
> dev isapnp0: fw-path: /pci@80000000/pci1014,a@b,0/0bH/0bH
> dev uhub0: fw-path: /pci@80000000/pci1033,35@16,0/0bH/0bH
> dev uhub1: fw-path: /pci@80000000/pci1033,35@16,1/1bH/1bH
> dev uhub2: fw-path: /pci@80000000/pci1033,e0@16,2/0bH/2bH
> dev wd0: fw-path: /pci@80000000/pci105a,3515@12,0/harddisk@0
> dev sd0: fw-path: /pci@80000000/pci1000,1@10,0/0bH/harddisk@0,0
>    /* not in dmesg  /pci@80000000/pci1000,1@10,0/harddisk@0,0 */
> dev cd0: fw-path: /pci@80000000/pci1000,1@10,0/0bH/cdrom@1,0
> dev cd1: fw-path: /pci@80000000/pci1000,1@10,0/0bH/cdrom@6,0
> dev ep0: fw-path: /pci@80000000/pci1014,a@b,0/0bH/0bH/:
> dev uhub3: fw-path: /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH
> dev nsphy0: fw-path: /pci@80000000/pci1014,a@b,0/0bH/0bH/:
> dev umass0: fw-path: /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH
> dev scsibus1: fw-path: /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH/0bH
> dev sd1: fw-path: 
> /pci@80000000/pci1033,e0@16,2/0bH/2bH/2bH/0bH/harddisk@0,0
> boot device: <unknown>
> ...
> ==================