Run simply Hello world" M4 application in DDR

Hello @slou26,

Sorry for the confusion.
I could have checked your previous threads.

For the Verdin iMX8M Mini DualLite 1GB, the changes to the commands in u-boot are that we need to use 0x77000000 as the base address.

setenv load_cm_image "${load_cmd} ${loadaddr} ${cm_image}"
setenv cm_boot "${load_cm_image}; cp.b ${loadaddr} 0x77000000 \${filesize}; dcache flush; bootaux 0x77000000"

Please also note the addition of a \ before ${filesize} to make sure it is resolved at runtime.

In addition to these changes, you can use the following patch to change the linker script and board.h file:

imx8mm-1gb-m4-memory.patch (1.7 KB)

With the two changes above, the firmware should work from u-boot.

However, to allow the Linux system to start, additional changes are needed.
These changes are to the device tree overlay, which needs to reserve a different area of memory and also setup the rpmsg areas in a different place:

&{/} {
	imx8mm-cm4 {
		compatible = "fsl,imx8mm-cm4";
		rsc-da = <0x780ff000>; /* Updated to match new rsc_table */
		clocks = <&clk IMX8MM_CLK_M4_DIV>;
		mbox-names = "tx", "rx", "rxdb";
		mboxes = <&mu 0 1
			  &mu 1 1
			  &mu 3 1>;
		memory-region = <&vdevbuffer>, <&vdev0vring0>, <&vdev0vring1>, <&rsc_table>, <&m4_reserved>;
		syscon = <&src>;
		fsl,startup-delay-ms = <500>;
	};
};

&uart4 {
	status = "disabled";
};

&resmem {
	#address-cells = <2>;
	#size-cells = <2>;

	m4_reserved: m4@77000000 {
		no-map;
		reg = <0 0x77000000 0 0x01000000>; /* 16MB total */
	};

	vdev0vring0: vdev0vring0@78000000 {
		reg = <0 0x78000000 0 0x00008000>; /* 32KB */
		no-map;
	};

	vdev0vring1: vdev0vring1@78008000 {
		reg = <0 0x78008000 0 0x00008000>; /* 32KB */
		no-map;
	};

	rsc_table: rsc-table@780ff000 {
		reg = <0 0x780ff000 0 0x00001000>; /* 4KB */
		no-map;
	};
	vdevbuffer: vdevbuffer@78100000 {
		compatible = "shared-dma-pool";
		reg = <0 0x78100000 0 0x01000000>; /* 16MB */
		no-map;
	};
};

Best Regards,
Bruno