Pci driver can not handle multiple root complex system

Alexander Boettcher alexander.boettcher at ...1...
Mon Jun 17 10:29:28 CEST 2013


On 12.06.2013 19:16, Jilong Kuang - SISA wrote:
> In my opinion, a simple fix is to remove the two lines in _find_next() function in pci_session_component.h
> 
> If (!bus_valid(bus))
>   Continue;

Sure, however we would like to know why the pci driver doesn't find the
device you are looking for.

> 
> Another way is to scan all buses/devices/functions at the first call of bus_valid(). A simple three level loop will do.

The initial scan is done early when pci_drv comes up ~ line 396 in file
pci_session_component.h [0].

So, does something happen to the hardware in your setup that a new scan
will result in other results ? If yes, can you please explain.

If yes, you may delay the first scan to a later point, by
removing the explicit call in line 397 to bus_valid. Without this call
the bus_valid function should be triggered as soon as the first pci
client connects to the pci driver and looks for a device (calling
implicitly _find_next).

Cheers,

Alex.


[0]
https://github.com/genodelabs/genode/blob/master/os/src/drivers/pci/pci_session_component.h




More information about the users mailing list