UPGRADE YOUR BROWSER

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!

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

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

Hi,
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>;
        ranges;
        rproc_0_reserved: rproc@08000000 {
            no-map;
            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,
AJ
0 Kudos