[SeaBIOS] Commit b98a4b1 prevents USB drives from being detected

Kevin O'Connor kevin at koconnor.net
Sun Jul 14 19:59:11 CEST 2013


On Fri, Jul 12, 2013 at 03:22:43PM -0500, Dave Frodin wrote:

> I'm using the current seabios (master or stable) as a payload for
> coreboot.  If I build the current seabios I've found that commit
> b98a4b1 "Convert PCIDevices list to use standard list manipultion
> code."  prevents the system from finding USB thumbdrives. The USB
> keyboard and mouse still work.

Thanks.  The PCI list changes broke the ordering of the PCIDevices
list.  Can you confirm the patch below fixes it for you?

-Kevin


commit 2a9aeabdfb34374ecac25e7a8d21c9e368618cd4
Author: Kevin O'Connor <kevin at koconnor.net>
Date:   Sun Jul 14 13:55:52 2013 -0400

    Fix USB EHCI detection that was broken in hlist conversion of PCIDevices.
    
    Make sure the PCI device list is ordered in bus order.
    
    Don't iterate past the end of the list when detecting EHCI devices.
    
    Signed-off-by: Kevin O'Connor <kevin at koconnor.net>

diff --git a/src/pci.c b/src/pci.c
index 6163a29..dc62c5c 100644
--- a/src/pci.c
+++ b/src/pci.c
@@ -122,6 +122,7 @@ pci_probe_devices(void)
             }
             memset(dev, 0, sizeof(*dev));
             hlist_add(&dev->node, pprev);
+            pprev = &dev->node.next;
             count++;
 
             // Find parent device.
diff --git a/src/usb.c b/src/usb.c
index ecccd75..42541ff 100644
--- a/src/usb.c
+++ b/src/usb.c
@@ -444,7 +444,7 @@ usb_setup(void)
                 }
                 if (ehcipci->class == PCI_CLASS_SERIAL_USB)
                     found++;
-                ehcipci = container_of(
+                ehcipci = container_of_or_null(
                     ehcipci->node.next, struct pci_device, node);
                 if (!ehcipci || (pci_bdf_to_busdev(ehcipci->bdf)
                                  != pci_bdf_to_busdev(pci->bdf)))



More information about the SeaBIOS mailing list