I managed to get it to work using the following instructions:
fatload mmc 0:1 ${loadaddr} mcore-demos/imx95-15x15-evk_m7_TCM_hello_world.bin
cp.b ${loadaddr} 0x203c0000 ${filesize}
rproc stop 0
rproc start 0
But for this you need to edit the config imx-system-manager(for imx95evk-configs/mx95evk.cfg). You need to allow access to TCM memory for A55 non-secure LMM.
My diff(Set LMM_1 from NOTIFY to ALL, add TCM and M7MIX region to A55 non-secure):
-LMM_1 NOTIFY
+LMM_1 ALL
-OCRAM EXEC, begin=0x0204C0000, size=96K
+M7MIX EXEC, begin=0x020380000, end=0x02047FFFF
+OCRAM EXEC, begin=0x020480000, size=352K
+M7MIX EXEC, begin=0x04A060000, end=0x04A09FFF
Rebuild: in imx-system-manager folder - make config=mx95evk cfg - for perl rebuild files after chages. Then rebuild packets in yocto:
bitbake -f -ccompile imx-system-manager
bitbake imx-system-manager
bitbake -f -ccompile imx-boot
bitbake imx-boot
After this there will be access to TCM memory from u-boot.
But I have another problem: I need to update the M7 code from the file system in Uboot on the fly. But the code doesn't fit in the TCM region. That's why I'm using DDR. I've successfully launched the code, which runs and loads completely using DDR, but I don't know how to update it on the fly using u-boot, becaus u-boot have access to DDR from 0x90000000 ....
M7 code use region from 0x80000000...This memory region not available from u-boot not only through imx-system-manager(.cfg), but also through the u-boot sources. I think this was done intentionally to separate memory across different memory regions between two different LMM.
I wanted to update code M7 via the M33 code(imx-system-manager), added both regions for this LMM(m33), but only the M7 region is visible perfectly(0x80000000...). The U-boot region is visible(0x90000000), but the zeros are readable from m33 side...