Date: Sun, 16 Mar 2014 22:16:44 -0400 From: Patrick Kelsey <kelsey@ieee.org> To: Rui Paulo <rpaulo@freebsd.org> Cc: freebsd-arm <freebsd-arm@freebsd.org> Subject: Re: Booting FreeBSD from eMMC on BeagleBone Black Message-ID: <CAD44qMVxoM=MdvDfosJgxQycYYNmxgMii3_0z91PGwHKXmszMg@mail.gmail.com> In-Reply-To: <E1283934-0065-4979-92AA-99D1056BFBD5@FreeBSD.org> References: <CAD44qMXrKbZqXT_Z1UL2LXuVON4Gb49m-GygW_6Y14Zz-egTFw@mail.gmail.com> <E1283934-0065-4979-92AA-99D1056BFBD5@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Mar 16, 2014 at 9:33 PM, Rui Paulo <rpaulo@freebsd.org> wrote: > On 16 Mar 2014, at 14:59, Patrick Kelsey <kelsey@ieee.org> wrote: > > > - Improved disk probing support that will now by default find and use the > > first suitable partition among the available storage devices. > > I think this introduced a bug where, if you have a non-responsive boot > device, ubldr will stop and won't try network booting: > > ## Starting application at 0x01000054 ... > Consoles: U-Boot console > Compatible API signature found @1d800a8 > Number of U-Boot devices: 2 > > FreeBSD/armv6 U-Boot loader, Revision 1.2 > (rpaulo@zedfs.local, Fri Mar 14 22:35:47 PDT 2014) > DRAM: 256MB > Unknown device type '' <------------ this is new > Found U-Boot device: disk > Probing all storage devices... > Checking unit=0 slice=0 partition=-1...disk0: read failed, error=1 > > Checking unit=1 slice=0 partition=-1... > Checking unit=2 slice=0 partition=-1... > Checking unit=3 slice=0 partition=-1... > Checking unit=4 slice=0 partition=-1... > Checking unit=5 slice=0 partition=-1... > > can't load 'kernel' > > Type '?' for a list of commands, 'help' for more detailed help. > loader> > > It stops here and doesn't try net0 booting. > > I think the problem is that some of the conditionals in sys/boot/uboot/common/main.c:main() are broken. I believe I sowed the seed for this in the original patch I sent to Ian, which appears to have had an out-of-order set of tests in the disk conditional, which in hindsight turned out to work due to a friendly coincidence (namely disk appearing before net in the devsw). That bad-pattern conditional seems to have gotten munged a bit further and propagated in some of the refactoring Ian did when integrating my patch. I believe sys/boot/uboot/common/main.c, starting around line 442, should look like this: if (strcmp(devsw[i]->dv_name, "disk") == 0 && (load_type == -1 || (load_type & DEV_TYP_STOR))) { if (probe_disks(i, load_type, load_unit, load_slice, load_partition) == 0) break; } if (strcmp(devsw[i]->dv_name, "net") == 0 && (load_type == -1 || (load_type & DEV_TYP_NET))) break; Can you give that a try? -Patrick
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAD44qMVxoM=MdvDfosJgxQycYYNmxgMii3_0z91PGwHKXmszMg>