
Hi list, I use U-Boot for starting FreeBSD/arm on Globalscale DreamPlug. On this platform FreeBSD uses "ubldr" second-stage bootloader, which is an U-Boot API consumer and uses U-Boot API to access block devices, network, etc. Dreamplug has several block devices accessible: internal SD card, SD card reader, and any number of USB-attached mass storage devices.
But when I boot ubldr, I can see only one block device.
I have traced down the problem and it seems to be in U-Boot API. When doing block device enumeration, the "more" flag is not set properly on first access.
This patch fixes the problem for me. After applying the patch, FreeBSD ubldr is able to see and access all block devices that U-Boot self knows.
diff --git a/api/api_storage.c b/api/api_storage.c index c535712..1147e79 100644 --- a/api/api_storage.c +++ b/api/api_storage.c @@ -129,6 +129,9 @@ static int dev_stor_get(int type, int first, int *more, struct device_info *di) else found = 1;
+ if (specs[type].max_dev > 1) + *more = 1; + } else { for (i = 0; i < specs[type].max_dev; i++) if (di->cookie == (void *)get_dev(specs[type].name, i)) {