VDMA driver doesn’t probe after load dtbo in PYNQ

/dts-v1/;
/plugin/;

/{
	compatible = "xlnx,zynq-7000";

	fragment@0 {
		target = <&amba>;

		overlay0:__overlay__ {
			#address-cells = <1>;
			#size-cells = <1>;
			axi_vdma_0: dma@43000000 {
				compatible = "xlnx,axi-vdma-6.3", "xlnx,axi-vdma-1.00.a";
				#dma-cells = <1>;
				clock-names = "s_axi_lite_aclk", "m_axi_mm2s_aclk", "m_axis_mm2s_aclk";
				clocks = <&clkc 15>, <&clkc 15>, <&clkc 15>;				
				interrupt-names = "mm2s_introut";
				interrupt-parent = <&axi_intc_0>;
				interrupts = <0 2>;
				reg = <0x43000000 0x10000>;
				xlnx,addrwidth = <0x20>;
				xlnx,flush-fsync = <0x1>;
				xlnx,num-fstores = <0x3>;
				dma-ranges = <0x00000000 0x00000000 0x40000000>;
				dma-channel@43000000 {
					compatible = "xlnx,axi-vdma-mm2s-channel";
					interrupts = <0 2>;
					xlnx,datawidth = <0x18>;
					xlnx,device-id = <0x0>;
					xlnx,genlock-mode ;
				};
			};
			axi_intc_0: interrupt-controller@41800000 {
				compatible = "xlnx,axi-intc-4.1", "xlnx,xps-intc-1.00.a";
				#interrupt-cells = <2>;
				clock-names = "s_axi_aclk";
				clocks = <&clkc 15>;	
				interrupt-controller ;
				interrupt-names = "irq";
				interrupt-parent = <&intc>;
				interrupts = <0 29 4>;
				reg = <0x41800000 0x10000>;
				xlnx,kind-of-intr = <0x0>;
				xlnx,num-intr-inputs = <0x3>;
			};
	};

};

I’m trying to make my HDMI display show the desktop GUI.
When I use ol.download(dtbo='/home/xilinx/pl.dtbo') to load the device tree mentioned above,

I can see that the device tree has been loaded correctly by running ls /proc/device-tree/axi.But I don’t see a message like:
xilinx-vdma 43000000.dma: Xilinx AXI VDMA Engine Driver Probed!!

Does this mean that the VDMA driver does not dynamically detect changes in the device tree?
If so, does it mean that I need a way to load the dtbo during the Linux boot stage?
I’ve looked into boot.py, but I don’t think it can accomplish this before the drivers are loaded.

Hi @bonkbonk,

You have a few similar topics open. It would be great if they can be consolidated.

From your description, it looks like you are only loading the dtbo file. Are you also loading the hardware?
Have you tried reloading the driver?

For your reference, if the dtbo file has the same basename as the overlay and it is in the same directory, Overlay('overlay.bit') will automatically apply the dtbo.

Mario

1 Like

THANKS !

As Mario mentioned, when I compile and load the DMA as a module, the driver is properly detected. So, I created a service to load the module before the bootpy.service, and then load the bit and dtbo files in boot.py.

1 Like