Hi all,
I'm building a toy driver to experiment with the details of Intel integrated
graphics. My experiments are based on Genode 16.08 (master) using
NOVA. Getting a capability to the IGD device (0:2:0) from the platform driver
works, so does reading/writing PCI config space, mapping BAR0 and
accessing MMIO registers.
Next, I want to test DMA from the IGD device by
1. Allocating DMA memory (via alloc_dma_buffer()) and attaching it to the
driver address space
2. Mapping the aperture (BAR2)
3. Pointing the GTT to the physical address of the DMA memory allocated in 1.
4. Writing some data to the DMA memory
5. Reading that data back through the aperture
Unfortunately, I'm stuck with that test. Apparently the IOMMU mappings are not
set up correctly and NOVA emits respective IOMMU faults:
[ 0] DMAR:0x81034040 FRR:0 FR:0x5 BDF:0:2:0 FI:0x041d4000
The BDF is the expected IGD device and the fault address matches the physical
address of the allocated DMA memory (and the PTE set up in the GTT).
When instrumenting device_pd, I see that attach_dma_mem() is called for the
correct physical address and size. However, assign_device() never
gets called for 0:2:0. The only place I see where assign_device() is used in
the code, is in config_write() when writing PCI_CMD_DMA to
PCI_CMD_REG. However, when doing such a config_write() manually in my
component, I get an Out_of_metadate exception. How can I assign the PCI
device to my drivers device_pd?
See [1] for example code.
Thanks a lot!
Cheers,
Alex
[1] https://github.com/senier/gpu_kernel/tree/master/src/app/hello_gpu
--
___
genode-main mailing list
genode-main@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/genode-main