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_sess...