Errore del driver PCIe per l'abilitazione del dispositivo e l'allocazione della memoria


1

Sto usando il bus PCIe su Freescale MPC8308 (come root complex) e il dispositivo endpoint è un ASIC con solo una regione di memoria da 256 MB e un solo registro BAR. I registri dello spazio di configurazione del dispositivo sono facilmente accessibili tramite il pacchetto "pciutils". All'inizio ho provato ad accedere alla regione di memoria usando mmap()ma non ha funzionato. Quindi al livello successivo, ho preparato un driver di dispositivo per l'endpoint PCIe che è un modulo del kernel che carico nel kernel dopo l'avvio di Linux.

Nel mio driver il dispositivo endpoint viene identificato dalla tabella ID dispositivo ma quando voglio abilitare il dispositivo pci_enable_device(), vedo questo errore:

driver-pci 0000: 00: 00.0: dispositivo non disponibile a causa di collisioni BAR 0 [0x000000-0xfffffff]

Anche quando voglio allocare la regione di memoria per il dispositivo PCIe usando pci_request_region(), non è possibile.

Ecco la parte del codice del driver che non funziona:

pci_enable_result = pci_enable_device (pdev);
if (pci_enable_result)
{
  printk(KERN_INFO "PCI enable encountered a problem \n");
  return pci_enable_result;
}
else
{
  printk(KERN_INFO "PCI enable was succesfull \n");
}

Ed ecco il risultato in "dmesg":

driver-pci 0000: 00: 00.0: dispositivo non disponibile a causa di collisioni BAR 0 [0x000000-0xfffffff]

L'abilitazione PCI ha riscontrato un problema

driver-pci: sonda di 0000: 00: 00.0 non riuscita con errore -22

Vale la pena notare che nel driver posso leggere e scrivere correttamente i registri di configurazione usando funzioni come pci_read_config_dword()e pci_write_config_dword().

Qual è il problema, pensi? è possibile che il problema appaia perché il kernel inizializza il dispositivo prima del modulo del kernel? cosa devo fare per evitare che ciò accada?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.