Я пишу драйвер устройства для доступа к памяти в FPGA на карте PCIe.
Карта загружается и проверяется / обнаруживается: -
/ proc / iomem
80000000-840fffff : PCI Bus #03
80000000-83ffffff : 0000:03:00.0
84000000-840fffff : 0000:03:00.0
Итак, читая ldd / etc, я кодировал вызов request_mem_region
на 80000000
и запрашивал указатель на него через ioremap_nocache
1) Нужно ли request_mem_region
какну как ioremap_nocache
, я не могу использовать только последнее?
/ proc / iomem После insmod
мой драйвер устройства: -
80000000-840fffff : PCI Bus #03
80000000-83ffffff : 0000:03:00.0
80000000-8003ffff : fp2
84000000-840fffff : 0000:03:00.0
2) Мне не совсем подходит...?
В любом случае, чтение не работает (не кодировано, как показано ниже, есть проверки и т. Д.) : -
#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);
Выходы: -
address:0xfd500000, data:0xffffffff
Я могу прочитать x80000000+KNOWN_REG_LOCATION
из пользовательского пространства mmap.
3) Я попытался __raw_readl
/ readl
, но тоже не повезло.
4) Могу ли я просто прочитать по текущему сопоставленному адресу x80000000
?