Ho un FPGA (come la maggior parte delle persone che fanno questa domanda) che viene configurato dopo che il mio kernel Linux esegue la scansione e l'enumerazione del bus PCIe iniziale. Come puoi immaginare, l'FPGA implementa un endpoint PCIe.Come fare un vero scancan del bus PCIe
Mi piacerebbe avere il core PCIe ri-enumerare il BUS INTERO PCIe in modo che il mio FPGA verrà poi visualizzato e posso caricare il mio modulo del driver. Mi piacerebbe anche la possibilità di SWAP il carico FPGA per una configurazione diversa. Con questo voglio dire mi piacerebbe essere in grado di:
- boot Linux
- Configurazione FPGA
- Enumerare PCIe endpoint e il carico del modulo
- Rimuovere PCIe endpoint
- Re-configurare FPGA
- Rienumerazione dell'endpoint PCIe
Tutto senza riavvio di Linux
Qui ci sono soluzioni che sono state proposte altrove ma non risolvono il problema.
echo 1 > /sys/bus/pci/rescan
Questo sembra funzionare (solo qualche volta) e non funziona se voglio eseguire il hotswap del carico FPGA dopo che è stato enumerato per primo.
Ecco un metodo abbastanza invasivo (che non ho testato) che qualcuno ha proposto anche altrove. https://community.freescale.com/thread/305355
È possibile utilizzare le strutture di alimentazione hotplug/power di PCIe per fare in modo che funzioni? In tal caso, ci sono buone risorse su come usare il sistema Hotplug con PCIe? (LDD non lo copre abbastanza completamente)
Guardare il meccanismo hotplug PCIe. È supportato nei kernel più recenti. In realtà, secondo te, Thunderbolt funzionerà? È lo stesso qui. – 0andriy
Stai eseguendo 'rescan' sulla macchina host o all'interno di una Xen VM? Xen ha avuto problemi a rieseguire la scansione dell'albero PCIe e si è schiantato in passato. Non so se è risolto. – Paebbels
Mi chiedo quale hardware di base stai usando. Nella mia esperienza con le schede madri di tipo commerciale, il metodo 'rescan' funzionava raramente. Sono andato alla rotta di riconfigurazione parziale per risolvere il problema (non rienumerando). @Paebbels @ whh4000 puoi condividere il tuo setup? – Claudio