Hi,
I have the problem about msi interrupt. In pci driver code,I use
“ret = pci_enable_msi(lw->pcidev);
if (ret)
v4l2_err(&lw->v4l2_dev, “MSI not available.\n”);
//request irq
lw->irq = pdev->irq;
printk(“irq nu = %d\n”,lw->irq);
if (request_irq(lw->irq, handl_irq,0, “edw”, (void*)lw)) {
v4l2_err(&lw->v4l2_dev, “request_irq failed\n”);
return (CRIT_ERR);”
to request msi interrupt. And I read xilinx FPGA PCIE MSI register with msi_enable_bit = 1.
Use xilinx chipscope, I can see msi message transfer to TX2. But tx2 doen not receive any interrupt.
I use cat/proc/interrupt | grep edw(pcie driver interrupt name),show :
“198: 0 0 0 0 tegra-gpio 65 Edge edw”
I’m confused, why my pcie driver interrupt register to “tegra-gpio” but not “GICv2”?
lspci -v -x show
01:00.0 Memory controller: Xilinx Corporation Device 7022
Subsystem: Xilinx Corporation Device 0007
Flags: bus master, fast devsel, latency 0, IRQ 454
Memory at 50100000 (32-bit, non-prefetchable)
Capabilities: [40] Power Management version 3
Capabilities: [48] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [60] Express Endpoint, MSI 00
Capabilities: [100] Device Serial Number 00-00-00-00-00-00-00-00
MSI 64bit means FPGA have 64bit msi address register?
I make this change
//msi->pages = __get_free_pages(GFP_DMA32, 0);
msi->pages = __get_free_pages(GFP_DMA, 0);
But also can not receive interrupt.
When use “__get_free_pages(GFP_DMA32, 0);” I read FPGA PCIE MSI Cap(offset 48h),Message Address_Lower(offset 4ch),Message Address_upper(offset 50h),and Message Data(offset 54h).
48h = 0x816005
4ch = 0x6afe2000
50h = 0x2
54h = 0x0.
When use “__get_free_pages(GFP_DMA, 0);” I read FPGA PCIE MSI Cap(offset 48h),Message Address_Lower(offset 4ch),Message Address_upper(offset 50h),and Message Data(offset 54h).
48h = 0x816005
4ch = 0xd9300000
50h = 0x0
54h = 0x0.
when use “__get_free_pages(GFP_DMA32, 0)”,50h register always return value equal 0x0.
when use “__get_free_pages(GFP_DMA, 0)”,50h register always return value equal 0x2.
So what should I do this?