We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

Showing results for 
Search instead for 
Did you mean: 
Visitor wria_sie
Registered: ‎05-14-2018

openamp crashing: rsc_table versus device-tree versus linker script versus application settings

We are using AMP solution on custom Zynq with Linux (xilinx v4.14) on Core 0 and FreeRTOS v10 on Core 1.  We are seeing the system crash under heavy load across Open-AMP (either 2018.04 or 2017.10).  Our BSP is 2018.2 release.  We are using a custom Yocto-based Linux build flow with custom proxy app.
We either see failure on Core 1 in interrupt mask routine, task notify from ISR routine, or vPortEnterCritical.  Also, sometimes Core 1 goes out to lunch, almost like branch predictor error where it gets to a function where it should never be in.  On Core 0, I usually see it fail in dma_inv_range or mac_b_interrupt.  There have been many changes over the years since release of original XAPP/UG promoting Zynq Linux/FreeRTOS AMP solution. 
I suspect a DMA or caching issue, but I've exhausted all my resources.
A couple questions:
1) Does Core 1 still need to mark certain areas as uncacheable?  If so, what addresses (e.g. entire linkerscript region? or only vrings, or ...) ?   Or, does -DUSE_AMP take care of this ? 
2) Is there anything special to do on Core 1 for private CPU interrupts (i.e. IRQ 29 for FreeRTOS, IRQ 31 from FPGA) ?  I thought the only IRQs to worry about are shared IRQs (and use the map to cpu function).
3) Do I need to hack the boot.S file like the original XAPP/UG to mark regions as reserverd ?  If so, what region?
4) Do I need to disable OCM using Xil_SetTlbAttributes(0xFFFF0000, 0x04de2) on Core 1?  What about Core 0?  Do I need to do anything special in Linux or the Linux-build.
Here is my device tree snippet for the carveout:
reserved-memory {
        #address-cells = <1>;
        #size-cells = <1>;
        rproc_0_reserved: rproc@08000000 {
            reg = <0x08000000 0xff00000>; /* start address: 128 MiB, length: 255 MiB */

    amba {
        elf_ddr_0: ddr@08000000 {
            compatible = "mmio-sram";
            reg = <0x08000000 0x7f00000>; /* start: 128 MiB, len: 127 MiB */

    remoteproc {
        compatible = "xlnx,zynq_remoteproc";
        vring0 = <15>;
        vring1 = <14>;
        srams =  <&elf_ddr_0>;
        interrupt-parent = <&intc>;
        interrupts = < 0 34 4 0 35 4 0 36 4 >;
        firmware = "freertos";
Here is my rsc_table settings snippet:
RING_TX 0x0800_0000
RING_RX 0x0800_4000
RSC_RPROC_MEM 0x1000_0000, 0x1000_0000, 0x0010_0000, 0
Here is my lscript settings snippet:
ddr_0    ORIGIN= 0x0800_0000,  LENGTH=127M
We are using a RPC_BUFF_SIZE of 2048.
Many thanks,
0 Kudos