Re: Calling PCI Autoconfig again
From: Kumar Gala <hidden>
Date: 2006-03-07 16:26:20
On Mar 7, 2006, at 8:17 AM, Wyse, Chris wrote:
Hi, This code will do the rescan of the PCI that we need for the FPGA. However, it currently only supports a single execution after the FPGA gets loaded. Additional calls will continue to add FPGA devices to the PCI device list data structure. I'm going to make some changes to it to handle multiple calls and to support multiple device ids. I'm expecting it to take a day or two, but I'll make an initial cut at it today that will let us load the Spartan FPGA (only once). This driver will be loaded when the kernel boots, so I believe that we'll just need to make a call into it (we won't have to dynamically load it like the phob driver).
I'm dealing with this exact same situation and having a discussion on lkml regarding the proper way to do this. In your case, do you care what addresses the FPGA is assigned at? http://marc.theaimsgroup.com/?l=linux-kernel&m=114140791428032&w=2
Michael, For the FPGA loader, you should load the FPGA, then make a call to pci_rescan_bus0() (I'm renaming check_hw() to pci_rescan_bus0()). Next, you need to do a pci_find_device() to detect the newly loaded FPGA. If the pci_find_device() fails, assume that the FPGA load has not completed, so delay for some time frame (100 ms??), then rescan again. If still not found, rescan up to MAX_PCI_RESCANS (probably set it to 3) times, then return an error that the FPGA load failed.
Do you not know when the FPGA load is done? I assume its under software control so the "fpga loader" should just call the PCI setup code once it has completed successfully. - kumar