Implementando o driver de dispositivo PCIe Linux (deseja acessar os registros da minha placa no driver do kernel)

Estou escrevendo um driver de dispositivo para acessar a memória em um FPGA em uma placa PCIe.
O cartão é inicializado e é sondado / encontrado: -

/ proc / iomem

80000000-840fffff : PCI Bus #03
  80000000-83ffffff : 0000:03:00.0
  84000000-840fffff : 0000:03:00.0

Então, lendo ldd / etc, eu codifiquei uma chamada pararequest_mem_region no80000000e solicitou um ponteiro para ele viaioremap_nocache

1) Precisorequest_mem_region bem como umioremap_nocache, eu não posso usar apenas o último?

/ proc / iomem Depoisinsmod meu driver de dispositivo: -

80000000-840fffff : PCI Bus #03
  80000000-83ffffff : 0000:03:00.0
    80000000-8003ffff : fp2
  84000000-840fffff : 0000:03:00.0

2) Não parece certo para mim ...?

Enfim, leituras não funcionam(não é codificado como abaixo, possui verificações etc.): -

#define BAR_ADDR 0x80000000
void *base = ioremap_nocache(BAR_ADDR, 0x40000);
void *address = base + KNOWN_REG_LOCATION;
int data = ioread32(address);
printk("fp2: address:0x%08x, data:0x%08x\n", address, data);

Saídas: -

address:0xfd500000, data:0xffffffff

Eu posso ler ox80000000+KNOWN_REG_LOCATION do espaço de usuário do mmap.

3) eu tentei__raw_readl/readl sem sorte também.

4) Posso apenas ler no endereço atualmente mapeadox80000000?

questionAnswers(1)

yourAnswerToTheQuestion