Erro do driver PCIe para ativar o dispositivo e alocar memória

1

Estou usando o barramento PCIe no Freescale MPC8308 (como complexo raiz) e o dispositivo endpoint é um ASIC com apenas uma região de memória de 256 MB e apenas um registro BAR. Os registros de espaço de configuração do dispositivo são facilmente acessíveis através do pacote "pciutils". No começo eu tentei acessar a região da memória usando mmap() , mas não funcionou. Então, no próximo nível, eu preparei um driver de dispositivo para o dispositivo de terminal PCIe, que é um módulo do kernel que eu carrego no kernel após a inicialização do Linux.

No meu driver, o dispositivo do ponto de extremidade é identificado na tabela de IDs do dispositivo, mas quando desejo ativar o dispositivo por pci_enable_device() , vejo este erro:

driver-pci 0000:00:00.0: device not available because of BAR 0 [0x000000-0xfffffff] collisions

Além disso, quando quero alocar a região de memória para o dispositivo PCIe usando pci_request_region() , isso não é possível.

Aqui está a parte do código do driver que não está funcionando:

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");
}

E aqui está o resultado em "dmesg":

driver-pci 0000:00:00.0: device not available because of BAR 0 [0x000000-0xfffffff] collisions

PCI enable encountered a problem

driver-pci: probe of 0000:00:00.0 failed with error -22

Vale a pena notar que no driver eu posso ler e gravar registros de configuração corretamente usando funções como pci_read_config_dword() e pci_write_config_dword() .

Qual é o problema que você acha? é possível que o problema apareça porque o kernel inicializa o dispositivo antes do módulo do kernel? o que devo fazer para evitar que isso ocorra?

    
por user664886 17.11.2016 / 11:27

0 respostas