[SeaBIOS] Commit b98a4b1 prevents USB drives from being detected

Dave Frodin dave.frodin at se-eng.com
Mon Jul 22 21:10:15 CEST 2013


Kevin,

Your patch does fix the problem with USB thumbdrives.
I tested on a Gizmo (Family14/SB800) board.

Thanks,
Dave

----- Original Message -----
> From: "Kevin O'Connor" <kevin at koconnor.net>
> To: "Dave Frodin" <dave.frodin at se-eng.com>
> Cc: "seabios" <seabios at seabios.org>
> Sent: Sunday, July 14, 2013 11:59:11 AM
> Subject: Re: [SeaBIOS] Commit b98a4b1 prevents USB drives from being detected
> 
> 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