This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM5728: L3 errors during GPMC access from DSP

Part Number: AM5728

Hi,

I'm working with a custom board based off the AM572x EVM with Linux running on the A15 and TI-RTOS running on DSP1. I'm trying to read from GPMC memory from DSP1 at base address 0x1000_0000, which I've translated to 0x2400_0000 based off of start address of the L3_MAIN map of 0x1400_0000 according to the DSP. To that effect, I've added the following code to my resource table:

/* GPMC */
#define DSP_GPMC                0x24000000
#define L3_GPMC                 0x24000000
#define DSP_GPMC_SIZE           (SZ_16M)

...

struct my_resource_table {
    struct resource_table base;

    // !!! Went from 17 to 18 during addition of GPMC
    UInt32 offset[18];  /* Should match 'num' in actual definition */

...

    /* devmem entry (GPMC) */
    struct fw_rsc_devmem devmem11;
};

...

struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
    1,      /* we're the first version that implements this */
    18,     /* number of entries in the table */ // !!! Went from 17 to 18 with GPMC addition
    0, 0,   /* reserved, must be zero */
    /* offsets to entries */
    {
        offsetof(struct my_resource_table, rpmsg_vdev),
        offsetof(struct my_resource_table, text_cout),
        offsetof(struct my_resource_table, data_cout),
        offsetof(struct my_resource_table, heap_cout),
        offsetof(struct my_resource_table, ipcdata_cout),
        offsetof(struct my_resource_table, trace),
        offsetof(struct my_resource_table, devmem0),
        offsetof(struct my_resource_table, devmem1),
        offsetof(struct my_resource_table, devmem2),
        offsetof(struct my_resource_table, devmem3),
        offsetof(struct my_resource_table, devmem4),
        offsetof(struct my_resource_table, devmem5),
        offsetof(struct my_resource_table, devmem6),
        offsetof(struct my_resource_table, devmem7),
        offsetof(struct my_resource_table, devmem8),
        offsetof(struct my_resource_table, devmem9),
        offsetof(struct my_resource_table, devmem10),
        offsetof(struct my_resource_table, devmem11),   // GPMC
    },
    
...

    {
        TYPE_DEVMEM,
        DSP_GPMC, L3_GPMC,
        DSP_GPMC_SIZE, 0, 0, "DSP_GPMC",    // Assuming you want to map 1M starting at 0x50000000 to 0x50000000 in physical memory
    }
};

However, when I try to access the memory, I'm getting the following errors:

[ 110.271105] omap_l3_noc 44000000.ocp: L3 application error: target 5 mod:1 (unclearable)
[ 110.279260] omap_l3_noc 44000000.ocp: L3 debug error: target 5 mod:1 (unclearable)

Is there some configuration I'm missing, or have I done something incorrectly? Linux is setting up the GPMC from the .dtb file at boot, and we have a Linux application that's able to read from 0x1000_0000, but we want to port it to the DSP1/TI-RTOS.

Thanks,

Jon