bperez77 / xilinx_axidma

A zero-copy Linux driver and a userspace interface library for Xilinx's AXI DMA and VDMA IP blocks. These serve as bridges for communication between the processing system and FPGA programmable logic fabric, through one of the DMA ports on the Zynq processing system. Distributed under the MIT License.
MIT License
464 stars 227 forks source link

No tx_channel and rx_channel devices in /dev. Petalinux 2020.2 #137

Open SzateX opened 3 years ago

SzateX commented 3 years ago

Hi I compiled your module with petalinux 2020. I'm configured device tree with this code:

` /{ axidma_chrdev: axidma_chrdev@0 { compatible = "xlnx,axidma-chrdev"; dmas = <&axi_dma_0 0 &axi_dma_0 1>; dma-names = "tx_channel", "rx_channel"; }; };

&axi_dma_0{ //compatible = "xlnx,zynqmp-dma-1.0", "xlnx,axi-dma-7.1.a", "xlnx,axi-dma-1.00.a", "xlnx,axi-dma"; compatible = "xlnx,axi-dma", "xlnx,axi-dma-6.03.a", "xlnx,axi-dma-1.00.a"; clock-names = "s_axi_lite_aclk", "m_axi_sg_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk"; clocks = <&zynqmp_clk 71>, <&zynqmp_clk 71>, <&zynqmp_clk 71>, <&zynqmp_clk 71>; interrupt-names = "mm2s_introut", "s2mm_introut"; interrupt-parent = <&gic>; interrupts = <0 89 4 0 90 4>; reg = <0x0 0xa0000000 0x0 0x10000>; xlnx,addrwidth = <0x40>; xlnx,include-sg ; xlnx,sg-length-width = <0x1a>; dma-channel@a0000000 { compatible = "xlnx,axi-dma-mm2s-channel"; dma-channels = <0x1>; interrupts = <0 89 4>; xlnx,datawidth = <0x20>; xlnx,device-id = <0x0>; }; dma-channel@a0000030 { compatible = "xlnx,axi-dma-s2mm-channel"; dma-channels = <0x1>; interrupts = <0 90 4>; xlnx,datawidth = <0x20>; xlnx,device-id = <0x0>; };

}; `

But it looks there is no devices in /dev. When I put modprobe command I got this result: root@Testowy2:~# modprobe xilinx_axidma [ 46.597530] xilinx_axidma: loading out-of-tree module taints kernel. root@Testowy2:~#

Could you help me resolve this issue?

jimenaCabrejas commented 2 years ago

Hi! I'm facing the same issue.

After building and booting the new system, I get the following:

dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330
dma-pl330 f8003000.dmac: DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
xilinx-vdma 40400000.dma: Xilinx AXI DMA Engine Driver Probed!!

It seems it is initialized correctly, but when I load the module using insmod I get the following message

insmod /lib/modules/5.4.0-xilinx-v2020.2/extra/xilinx-axidma.ko
xilinx_axidma: loading out-of-tree module taints kernel.

Using lsmod I can see that the module is loaded

lsmod 
    Tainted: G  
xilinx_axidma 28672 0 - Live 0xbf005000 (O)  
uio_pdrv_genirq 16384 0 - Live 0xbf000000

But I cannot see the device at /dev/axidma nor in /proc/devices

My device-tree is as follows:

amba_pl {
  #address-cells = <0x01>;
  #size-cells = <0x01>;
  compatible = "simple-bus";
  ranges;
  phandle = <0x37>;

  dma@40400000 {
      #dma-cells = <0x01>;
      clock-names = "s_axi_lite_aclk\0m_axi_sg_aclk\0m_axi_mm2s_aclk\0m_axi_s2mm_aclk";
      clocks = <0x01 0x0f 0x01 0x0f 0x01 0x0f 0x01 0x0f>;
      compatible = "xlnx,axi-dma-7.1\0xlnx,axi-dma-1.00.a";
      interrupt-names = "mm2s_introut\0s2mm_introut";
      interrupt-parent = <0x04>;
      interrupts = <0x00 0x1d 0x04 0x00 0x1e 0x04>;
      reg = <0x40400000 0x10000>;
      xlnx,addrwidth = <0x20>;
      xlnx,include-sg;
      xlnx,sg-length-width = <0x0e>;
      phandle = <0x12>;

      dma-channel@40400000 {
          compatible = "xlnx,axi-dma-mm2s-channel";
          dma-channels = <0x01>;
          interrupts = <0x00 0x1d 0x04>;
          xlnx,datawidth = <0x20>;
          xlnx,device-id = <0x00>;
      };

      dma-channel@40400030 {
          compatible = "xlnx,axi-dma-s2mm-channel";
          dma-channels = <0x01>;
          interrupts = <0x00 0x1e 0x04>;
          xlnx,datawidth = <0x20>;
          xlnx,device-id = <0x01>;
      };
  };
};

chosen {
  bootargs = "console=ttyPS0,115200 earlycon root=/dev/ram0 rw";
  stdout-path = "serial0:115200n8";
};

axidma_chrdev@0 {
  compatible = "xlnx,axidma-chrdev";
  dmas = <0x12 0x00 0x12 0x01>;
  d;
  dma-names = "tx_channel\0rx_channel";
  phandle = <0x38>;
};

Did you manage to solve the issue?

jimenaCabrejas commented 2 years ago

I solved the issue, I needed to uncheck the option Auto config settings -> Device tree autoconfig in petalinux-config. Then it works fine