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.

Debugging Problems on DSP with CCS6 for IPC ex02_messageq Example

Other Parts Discussed in Thread: SYSBIOS, AM5728, AM5726

Hi,

I am trying to modify the IPC ex02_messageq Example with using an Linux executable as Host and DSP executable for the DSP1. The Linux executable is built with the IPC libraries and almost the same IPC function calls like in the example.The DSP executable is quite the same, no big modification.

My problem is this. There is the possiblity to use the makefile to build the DSP-file and copying it on the target in /lib/firmware or using CCS6 on my Linux -VM to builld the makefile project and load the programm into the DSP1-Core. But it seems like I am getting 2 different results, even though the generated xe66-files are the same.

Output Console:


Makefile Build

Processor List...
    procId=0, procName=HOST
    procId=1, procName=IPU2
    procId=2, procName=IPU1
    procId=3, procName=DSP2
    procId=4, procName=DSP1
FILTER_MEDIAN
Trying MessageQ_create...
MessageQ_create OK!!
Trying MessageQ_open...
MessageQ_open status: 0
MessageQ_open OK!!
Copying Data OK!!
Trying MessageQ_put...
TransportRpmsg_put: send failed: 90 (Message too long)
MessageQ_put had a failure error


CCS6 JTAG-Connection:

Processor List...
    procId=0, procName=HOST
    procId=1, procName=IPU2
    procId=2, procName=IPU1
    procId=3, procName=DSP2
    procId=4, procName=DSP1
FILTER_MEDIAN
Trying MessageQ_create...
MessageQ_create OK!!
Trying MessageQ_open...
MessageQ_open status: -6
MessageQ_open: Failed opening MessageQ: -6


When I try to debug the CCS6 programm, it seems like, I am hanging in an infinite loop of IpcMgr. The call stack says that I am staying in the function IpcMgr_ipcStartup and the call to TransportRpmsgSetup_attach(procId, 0) in line 96 of IpcMgr.c

The problem with the makefile program is another issue. I want to find out, what causes the "Message too long" message. And I wanted to use the debugging way of CCS6.


Why is there a difference between these 2 ways of using the DSP? I have also checked the console output of the making process. Its 1 by 1 the same.


I have attached the neccessary files. I am using following stuff:

Target: EVM AM572x

IPC: 3.40.01.08

Processor SDK Linux (ARM) / RTOS (DSP): 2.00.01.07

Any help? Thank you!

https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/Files.7z

  • By the way. The .cfg file is the same from the example. No modifications there!

    SYS/BIOS: 6.45.00.19

  • I will ask the RTOS team to look at this.
  • Kevin,

    When the DSP image is loaded from /lib/firmware, the Linux kernel remoteProc framework will parse the system resources defined in resource table that is linked into DSP image, allocate rpmsg vring buffers and trace buffer, and configure MMU of DSP. The default DSP resource table is ./packages/ti/ipc/remoteproc/rsc_table_vayu_dsp.h. If you load the DSP image with CCS JTAG connection, the step will be skipped and you should observe different results when trying to establish the communication between host and DSP. You may check the MMU config discrepancy with the two approaches by looking into the TLB page table: cat /sys/kernel/debug/omap_iommu/<iommu_name>/pagetable.

    To debug DSP side application, after you load the DSP image from /lib/firmware, you can connect to the core from CCS and then load only the image symbols to examine the code. Alternatively, you can add some Log_print0 in the DSP code, and then check the print log from host Linux terminal, for DSP1, the log is in /sys/kernel/debug/remoteproc/remoteproc2/trace0.

    The error "Message too long" is probably caused by a 'too long' messageQ payload as the error indicates. The size of mssageQ payload plus header should not exceed the rpmsg vring size 512 bytes.

    Regards,
    Garrett
  • Sounds nice to me, that was some good help, I guess. This is making sense to me with the loading of the image and the symbol loading of the executable. And it was a very good advice, that I can find the log_printfs in /sys/....../trace0, I couldnt find such an information anywhere.

    But I don't understand how to compare the "approaches" of the TLB page table. You mean comparing the pagetables of the 40d01000.mmu and 40d02000.mmu? I tried it with the function "diff", but it seems everything seems similar there.

    What should I do now, if I want to find out, if the resource tables are the right ones?
  • Is there any documentation about this procedure to load, start and debug an executable of CCS6 makefile project (xe66-file)? How should I know this, to be aware of differences in the MMU's and rsc tables?

    I am trying to make the next example work, the ex41_forwardmsg. I modified it in that way, that the IPU will not get attached to the whole process, so it should be just an ARM-DSP1 inter processor connection.

    Since you explained me how to get the logs, I know why I get the MessageQ_open Timeout:

    root@am57xx-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc2/trace0
    [      0.000] 19 Resource entries at 0x95000000
    [      0.000] [t=0x0005ef06] xdc.runtime.Main: main BIOS_start...
    [      0.000]
    [      0.000] registering rpmsg-proto:rpmsg-proto service on 61 with HOST
    [      0.000] [t=0x0038d4ff] xdc.runtime.Main: NameMap_sendMessage: HOST 53, por
    t=61
    [      0.000] [t=0x003bd5ec] Server: Creating HeapBufMP...
    [      0.000] [t=0x003da1ff] ti.sdo.ipc.heaps.HeapBufMP: ERROR: line 812: assert
    ion failure: A_noHeap: Region has no heap
    [      0.000] ti.sdo.ipc.heaps.HeapBufMP: line 812: assertion failure: A_noHeap:
     Region has no heap
    [      0.000] xdc.runtime.Error.raise: terminating execution

    Can you give me a clue, what happened here?

    I am using the same ipc.cfg.xs file:

    var Program = xdc.useModule('xdc.cfg.Program');
    var cfgArgs = Program.build.cfgArgs;

    /* configure processor names */
    var procNameAry = ["HOST", "IPU2", "IPU1", "DSP2", "DSP1"];
    var ownerSr0 = "DSP1";

    var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
    MultiProc.setConfig(Program.global.procName, procNameAry);

    /* shared region configuration */
    var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');

    /* configure SharedRegion #0 (IPC) */
    var SR0Mem = Program.cpu.memoryMap["SR_0"];

    SharedRegion.setEntryMeta(0,
        new SharedRegion.Entry({
            name:           "SR0",
            base:           SR0Mem.base,
            len:            SR0Mem.len,
            ownerProcId:    MultiProc.getIdMeta(ownerSr0),
            cacheEnable:    true,
            isValid:        true
        })
    );

    I also copied the whole config.bld and used the same Dsp1.cfg file without the Ipc.procSync = Ipc.ProcSync_PAIR; part:

    /*
     * Copyright (c) 2013-2015 Texas Instruments Incorporated - http://www.ti.com
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */

    /*
     *  ======== Dsp1.cfg ========
     *  Platform: DRA7XX_linux_elf
     *  Target: ti.targets.elf.C66
     */

    /* root of the configuration object model */
    var Program = xdc.useModule('xdc.cfg.Program');

    /* application uses the following modules and packages */
    xdc.useModule('xdc.runtime.Assert');
    xdc.useModule('xdc.runtime.Diags');
    xdc.useModule('xdc.runtime.Error');
    xdc.useModule('xdc.runtime.Log');
    xdc.useModule('xdc.runtime.Registry');

    xdc.useModule('ti.sysbios.knl.Semaphore');
    xdc.useModule('ti.sysbios.knl.Task');


    /*
     *  ======== IPC Configuration ========
     */
    xdc.useModule('ti.ipc.ipcmgr.IpcMgr');

    /* load the configuration shared across cores  */
    Program.global.procName = "DSP1";
    var ipc_cfg = xdc.loadCapsule("../shared/ipc.cfg.xs");

    var BIOS        = xdc.useModule('ti.sysbios.BIOS');
    BIOS.addUserStartupFunction('&IpcMgr_ipcStartup');

    //var Ipc = xdc.useModule('ti.sdo.ipc.Ipc');
    //Ipc.procSync = Ipc.ProcSync_PAIR;
    //BIOS.addUserStartupFunction('&IpcMgr_callIpcStart');

    /* Override the default resource table to add SR0 */
    var Resource = xdc.useModule('ti.ipc.remoteproc.Resource');
    Resource.customTable = true;

    /*
     *  ======== SYS/BIOS Configuration ========
     */
    if (Program.build.profile == "debug") {
        BIOS.libType = BIOS.LibType_Debug;
    } else {
        BIOS.libType = BIOS.LibType_Custom;
    }



    /* no rts heap */
    Program.argSize = 100;  /* minimum size */
    Program.stack = 0x1000;

    var Task = xdc.useModule('ti.sysbios.knl.Task');
    Task.common$.namedInstance = true;

    /* default memory heap */
    var Memory = xdc.useModule('xdc.runtime.Memory');
    var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
    var heapMemParams = new HeapMem.Params();
    heapMemParams.size = 0x8000;
    Memory.defaultHeapInstance = HeapMem.create(heapMemParams);

    var HeapBufMP   = xdc.useModule('ti.sdo.ipc.heaps.HeapBufMP');

    /* create a heap for MessageQ host<->slave messages */
    var MessageQ  = xdc.useModule('ti.sdo.ipc.MessageQ');
    var HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');
    var params = new HeapBuf.Params;
    params.align = 8;
    params.blockSize = 512;
    params.numBlocks = 256;
    var msgHeap = HeapBuf.create(params);

    MessageQ.registerHeapMeta(msgHeap, 0);

    /* Setup MessageQ transport */
    var VirtioSetup = xdc.useModule('ti.ipc.transports.TransportRpmsgSetup');
    //MessageQ.SetupTransportProxy = VirtioSetup;  // Commented out to use standard proxy

    /* Setup NameServer remote proxy */
    var NameServer = xdc.useModule("ti.sdo.utils.NameServer");
    var NsRemote = xdc.useModule("ti.ipc.namesrv.NameServerRemoteRpmsg");
    //NameServer.SetupProxy = NsRemote;   // Commented out to use standard nsremote

    /* Enable Memory Translation module that operates on the BIOS Resource Table */
    var Resource = xdc.useModule('ti.ipc.remoteproc.Resource');
    Resource.loadSegment = "EXT_CODE";


    /*  Use SysMin because trace buffer address is required for Linux/QNX
     *  trace debug driver, plus provides better performance.
     */
    var System = xdc.useModule('xdc.runtime.System');
    var SysMin = xdc.useModule('ti.trace.SysMin');
    System.SupportProxy = SysMin;
    SysMin.bufSize  = 0x8000;

    Program.sectMap[".tracebuf"] = "TRACE_BUF";
    Program.sectMap[".errorbuf"] = "EXC_DATA";

    /* --------------------------- TICK --------------------------------------*/
    var Clock = xdc.useModule('ti.sysbios.knl.Clock');
    Clock.tickSource = Clock.TickSource_USER;
    Clock.timerId = 4;

    var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');

    /* Skip the Timer frequency verification check. Need to remove this later */
    Timer.checkFrequency = false;

    /* Match this to the SYS_CLK frequency sourcing the dmTimers.
     * Not needed once the SYS/BIOS family settings is updated. */
    Timer.intFreq.hi = 0;
    Timer.intFreq.lo = 19200000;

    var timerParams = new Timer.Params();
    timerParams.period = Clock.tickPeriod;
    timerParams.periodType = Timer.PeriodType_MICROSECS;
    /* Switch off Software Reset to make the below settings effective */
    timerParams.tiocpCfg.softreset = 0x0;
    /* Smart-idle wake-up-capable mode */
    timerParams.tiocpCfg.idlemode = 0x3;
    /* Wake-up generation for Overflow */
    timerParams.twer.ovf_wup_ena = 0x1;
    Timer.create(Clock.timerId, Clock.doTick, timerParams);

    /*
     *  ======== Instrumentation Configuration ========
     */

    /* system logger */
    var LoggerSys = xdc.useModule('xdc.runtime.LoggerSys');
    var LoggerSysParams = new LoggerSys.Params();
    var Defaults = xdc.useModule('xdc.runtime.Defaults');
    Defaults.common$.logger = LoggerSys.create(LoggerSysParams);

    /* enable runtime Diags_setMask() for non-XDC spec'd modules */
    var Diags = xdc.useModule('xdc.runtime.Diags');
    Diags.setMaskEnabled = true;

    /* override diags mask for selected modules */
    xdc.useModule('xdc.runtime.Main');
    Diags.setMaskMeta("xdc.runtime.Main",
        Diags.ENTRY | Diags.EXIT | Diags.INFO, Diags.RUNTIME_ON);

    var Registry = xdc.useModule('xdc.runtime.Registry');
    Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
    Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
    Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
    Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
    Registry.common$.diags_LIFECYCLE = Diags.RUNTIME_OFF;
    Registry.common$.diags_STATUS = Diags.RUNTIME_OFF;

    var Main = xdc.useModule('xdc.runtime.Main');
    Main.common$.diags_ASSERT = Diags.ALWAYS_ON;
    Main.common$.diags_INTERNAL = Diags.ALWAYS_ON;


    And the same HeamBufMP function calls like in server.c file:

     *  ======== Server_create ========
     */
    Int Server_create()
    {
        Int                 status = 0;
        MessageQ_Params     msgqParams;
        HeapBufMP_Params    heapBufParams;

        /* enable some log events */
        Diags_setMask(MODULE_NAME"+EXF");

        /*
         *  Create the heap that will be used to allocate messages.
         */
        Log_print0(Diags_INFO,"Creating HeapBufMP...");
        printf("Creating HeapBufMP...\n");

        HeapBufMP_Params_init(&heapBufParams);

        heapBufParams.regionId       = 0;
        heapBufParams.name           = App_SrHeapName;
        heapBufParams.numBlocks      = 2;
        heapBufParams.blockSize      = sizeof(App_Msg);

        Module.srHeapHandle = HeapBufMP_create(&heapBufParams);
        if (Module.srHeapHandle == NULL) {
            Log_print0(Diags_INFO,"HeapBufMP_create failed\n" );
            printf("HeapBufMP_create failed\n" );
            goto leave;
        }

        /* Register this heap with MessageQ */
        status = MessageQ_registerHeap((IHeap_Handle)Module.srHeapHandle, App_SrHeapId);
        if(status != MessageQ_S_SUCCESS)
        {
            status = -1;
            Log_print0(Diags_INFO,"MessageQ_registerHeap failed\n" );
            goto leave;
        }

    ...

    }

    Is it because I didn't start the Host yet? If so, how can I do the sync there? I am loading the xe66 file to lib/firmware, do a an unbind -> bind in /sys/bus/.../omap-rproc on 40800000.dsp to start the DSP image. While I am doing that, I cannot execute my Host-IPC stuff. I was thinking to do a little break after I started my IPC-stuff on my host like this:

    void initIpcInterface(void)
    {
        int status = 0;

        UInt16          i, numProcs;
        String          name;


        /* configure the transport factory */
        Ipc_transportConfig(&TransportRpmsg_Factory);


        printf("Processor List...\n");
        status = Ipc_start();
        if (status >= 0) {
    #if 1
            printf("IPC_start WORKING :%d\n",status);
            numProcs = MultiProc_getNumProcessors();
            for (i = 0; i < numProcs; i++) {
                name = MultiProc_getName(i);
                printf("    procId=%d, procName=%s\n", i, name);
            }
    #endif
        }
        else
            printf("NOT WORKING :%d\n",status);


        printf("Press Enter to continue");
        getchar();

    }

    While I am waiting for the getchar(), I wanted to stop there, run this thread in the background, doing a bind on the 40800000.dsp to start the image and run the thread again to press enter...but it is not working...

    What is wrong here?

  • Not to derail this excellent discussion, as we have many of the same questions, but is there more detail on the statement " the Linux kernel remoteProc framework will parse the system resources defined in resource table that is linked into DSP image, allocate rpmsg vring buffers and trace buffer, and configure MMU of DSP"?

    That seems like a lot of "under the hood" work that could conflict with other setup activities, especially the MMU part, since we plan to use the MMU to map the DSP memory space into DDR memory space.
  • I think I found my problem with the error "A_noHeap: Region has no heap" with the explanation from this thread ()

    Quote:

    "Do you intend to have communication between the DSPs, or do you simply want IPC between ARM and individual DSPs? In the former case you do not need SharedRegions, and you do not need to call Ipc_start() on the DSPs. Only if you need communication between DSPs would you need SharedRegions. SharedRegion is not supported on the host CPU."


    So since I am using the configs of the forwardmsg example, the used SharedRegion stuff is only between the DSP1 and the IPU1, and not for ARM and DSP1. I guess since I removed the IPU1 stuff, the SharedRegion is getting invalid and I dont need it for ARM and DSP connection.

    So there is still the other questions left and the post from Christopher.

  • From what I have read, you don't use the SharedRegion stuff when you have a Linux based ARM talking to TI-TROS DSP.  So, I think you are indeed on the right track. 

    However, I think we are about to abandon MessageQ completely for our design.  The statement from Garrett above, "The size of messageQ payload plus header should not exceed the rpmsg vring size 512 bytes." is the nail in the coffin.  That limitation is very disappointing and I wish that was called out loudly in the documentation for MessageQ when using Linux<->TI-RTOS, aka v-ring buffers. 

    I think we are going to try to implement an HPI Buffer style communication, just like we used in the C6748 and C6482 designs we are porting from.

  • Thanks for your answer Christopher. Since like it seems you have more experience than me in IPC, do you know how it works with the default SharedRegion of ARM-DSP-connection? Yes, the payload size is not much, but isn't the idea to use the Shared Memory for bigger data and use the MessageQs to indicate the location in the Shared Memory for the data? That was our main idea to share the big data like pictures between ARM and DSP.

    I have seen this in an other thread ()

    *            A 8A00_0000    80_0000  (   8 MB) IPU1 (code, data), benelli
    *              8A80_0000    80_0000  (   8 MB) IPU2 (code, data), benelli
    *            B 8B00_0000   100_0000  (  16 MB) HOST (code, data)
    *            C 8C00_0000   100_0000  (  16 MB) DSP1 (code, data)
    *            D 8D00_0000   100_0000  (  16 MB) DSP2 (code, data)
    *            E 8E00_0000   100_0000  (  16 MB) SR_0 (ipc)
  • Just a warning, to date my experience is all power point design, we have not coded anything up yet. That said, it seems that you do not use SharedRegion when you have a TI-RTOS DSP and Linux ARM. From what I gather it is a Linux side restriction.

    In the DSP you can declare a memory section or region in your platform files that you would intend to use for shared memory. That memory would also have to exist in the ARM side. In our case, we are mapping DDR memory into the DSP memory space using the MMU (this allows both DSPs to have a common memory map, but access unique DDR memory space). Since the DDR is also accessible from the ARM, you use the Linux CMEM utility to tell Linux this memory space is allocated for direct use. I think at that point (I'm not working the Linux side) Linux and DSP are effectively sharing the memory space.

    Now, if you are not bothered by the 512 Message payload limit, but you want to send larger messages, there is another option. You can use MessageQ to pass a pointer to your shared memory message instead of encapsulating the payload into the MessageQ message. However, when you do this you need to be concerned about caching of the pointed to data as MessageQ does not ensure cache coherency on the pointed to data. We were hoping to avoid that by using the MessageQ message for our entire payload, but as we have learned the 512 limit is too restrictive for us.
  • Wow, thanks a lot for this information. This was really helpful to me. Looks like I have to keep an eye on the CMEM utility stuff. I already heard about it a bit, but I was looking out for some missing examples to understand...

    So if I want to use the CMEM utility because of the shared direct use memory, I need to do the DDR memory mapping too?
  • I guess that kind of depends on how you setup your DDR and how you want your DSP(s) to see the memory. In our case we wanted both DSPs to have the same memory map, but access different physical DDR memory. So we used the MMU to get this:

    DSP 1                                                     Physical
    0x80000000 – 0x8FFFFFFF             0xE0000000 – 0xEFFFFFFF             EMIF DDR

    DSP 2                                                     Physical
    0x80000000 – 0x8FFFFFFF             0xF0000000 – 0xFFFFFFFF             EMIF DDR

    If you don't care about making the memory maps the same, and the TI provided examples do not, then I don't think you need to use the MMU. However, it sounds like the MMU is used when the IPC is setup and from what I understand you only have two options, bypass the MMU or use the MMU. So, if the IPC uses the MMU then I think you also have to define any regions of memory outside what IPC is using, even if you don't want to do a mapping like I show above. In other words, I think it is all or nothing with the MMU. Now, in the MMU (and to be clear we are talking about the MMU0 in the DSP Subsystem) (which in our case is on a AM5728) there are bypass registers. However, I have not found any CSL or TI package that helps program the MMU. So, how that is setup I don't yet know.
  • Kevin,

    >>You mean comparing the pagetables of the 40d01000.mmu and 40d02000.mmu? I tried it with the function "diff", but it seems everything seems similar there.

    I meant to compare the page table with image load from CCS JTAG and from /lib/firmware.

    SharedRegion is not applicable for communication between ARM (Linux) and DSP (TI-RTOS), see
    processors.wiki.ti.com/.../SharedRegion_Module

    "The SharedRegion Module is only supported in SYS/BIOS environments. It is not provided on HLOS's. For HLOS environments, we suggest using native shared memory APIs when available, for example ION on Android. Other alternatives include CMEM (for Linux) and the QNX-specific SharedMemoryAlloctor, provided in IPC's qnx/ directory. "

    Kevin/Chris, regarding the resource table and MMU, please read processors.wiki.ti.com/.../IPC_Resource_customTable Although the example there refers to IPU, it's the same concept for DSP.

    Regards,
    Garrett

  • Garrett, that link did not quite work. There is a period at the end included in the link. Drop the period and it works. Thanks.

    Kevin, one important thing I learned today was about this Resource Table. It basically contains all the address mapping the MMU in the DSP needs. That includes any address space shared for MessageQ but also all the mapped addresses for any other shared memory and peripherals and basically everything the DSP needs access to outside of its internal memory. Once the DSP is loaded via remoteProc, this resource table is used by the Linux host to setup the DSP MMU0. Once the DSP MMU is in use it has to be used for all memory accesses. So, we will need to put into this resource table anything we need to access that is not already in there. For example, PCIe addresses.

    I don't think you can have more than one entity setting up the MMU and since remoteProc does it, it needs to contain all the mappings you need, even if those mappings are 1-1.
  • Sorry, but I cannot find any page table under /lib/firmware. I found the pagetable of /sys/kernel/debug/omap_iommu/40d01000.mmu/pagetable, but I dont know what to do with the entries. I got following output of the pagetable in the attached file:

    L:      da:     pte:
    --------------------------
    1: 0x48000000 0x48000002
    1: 0x48100000 0x48100002
    1: 0x48400000 0x48400002
    1: 0x48500000 0x48500002
    1: 0x48600000 0x48600002
    1: 0x48700000 0x48700002
    1: 0x48800000 0x48800002
    1: 0x48900000 0x48900002
    1: 0x48a00000 0x48a00002
    1: 0x48b00000 0x48b00002
    1: 0x48c00000 0x48c00002
    1: 0x48d00000 0x48d00002
    1: 0x48e00000 0x48e00002
    1: 0x48f00000 0x48f00002
    1: 0x4a000000 0x4a040002
    1: 0x4a100000 0x4a040002
    1: 0x4a200000 0x4a040002
    1: 0x4a300000 0x4a040002
    1: 0x4a400000 0x4a040002
    1: 0x4a500000 0x4a040002
    1: 0x4a600000 0x4a040002
    1: 0x4a700000 0x4a040002
    1: 0x4a800000 0x4a040002
    1: 0x4a900000 0x4a040002
    1: 0x4aa00000 0x4a040002
    1: 0x4ab00000 0x4a040002
    1: 0x4ac00000 0x4a040002
    1: 0x4ad00000 0x4a040002
    1: 0x4ae00000 0x4a040002
    1: 0x4af00000 0x4a040002
    1: 0x4e000000 0x4e000002
    1: 0x54000000 0x54040002
    1: 0x54100000 0x54040002
    1: 0x54200000 0x54040002
    1: 0x54300000 0x54040002
    1: 0x54400000 0x54040002
    1: 0x54500000 0x54040002
    1: 0x54600000 0x54040002
    1: 0x54700000 0x54040002
    1: 0x54800000 0x54040002
    1: 0x54900000 0x54040002
    1: 0x54a00000 0x54040002
    1: 0x54b00000 0x54040002
    1: 0x54c00000 0x54040002
    1: 0x54d00000 0x54040002
    1: 0x54e00000 0x54040002
    1: 0x54f00000 0x54040002
    1: 0x60000000 0x60040002
    1: 0x60100000 0x60040002
    1: 0x60200000 0x60040002
    1: 0x60300000 0x60040002
    1: 0x60400000 0x60040002
    1: 0x60500000 0x60040002
    1: 0x60600000 0x60040002
    1: 0x60700000 0x60040002
    1: 0x60800000 0x60040002
    1: 0x60900000 0x60040002
    1: 0x60a00000 0x60040002
    1: 0x60b00000 0x60040002
    1: 0x60c00000 0x60040002
    1: 0x60d00000 0x60040002
    1: 0x60e00000 0x60040002
    1: 0x60f00000 0x60040002
    1: 0x61000000 0x61040002
    1: 0x61100000 0x61040002
    1: 0x61200000 0x61040002
    1: 0x61300000 0x61040002
    1: 0x61400000 0x61040002
    1: 0x61500000 0x61040002
    1: 0x61600000 0x61040002
    1: 0x61700000 0x61040002
    1: 0x61800000 0x61040002
    1: 0x61900000 0x61040002
    1: 0x61a00000 0x61040002
    1: 0x61b00000 0x61040002
    1: 0x61c00000 0x61040002
    1: 0x61d00000 0x61040002
    1: 0x61e00000 0x61040002
    1: 0x61f00000 0x61040002
    1: 0x62000000 0x62040002
    1: 0x62100000 0x62040002
    1: 0x62200000 0x62040002
    1: 0x62300000 0x62040002
    1: 0x62400000 0x62040002
    1: 0x62500000 0x62040002
    1: 0x62600000 0x62040002
    1: 0x62700000 0x62040002
    1: 0x62800000 0x62040002
    1: 0x62900000 0x62040002
    1: 0x62a00000 0x62040002
    1: 0x62b00000 0x62040002
    1: 0x62c00000 0x62040002
    1: 0x62d00000 0x62040002
    1: 0x62e00000 0x62040002
    1: 0x62f00000 0x62040002
    1: 0x63000000 0x63040002
    1: 0x63100000 0x63040002
    1: 0x63200000 0x63040002
    1: 0x63300000 0x63040002
    1: 0x63400000 0x63040002
    1: 0x63500000 0x63040002
    1: 0x63600000 0x63040002
    1: 0x63700000 0x63040002
    1: 0x63800000 0x63040002
    1: 0x63900000 0x63040002
    1: 0x63a00000 0x63040002
    1: 0x63b00000 0x63040002
    1: 0x63c00000 0x63040002
    1: 0x63d00000 0x63040002
    1: 0x63e00000 0x63040002
    1: 0x63f00000 0x63040002
    1: 0x64000000 0x64040002
    1: 0x64100000 0x64040002
    1: 0x64200000 0x64040002
    1: 0x64300000 0x64040002
    1: 0x64400000 0x64040002
    1: 0x64500000 0x64040002
    1: 0x64600000 0x64040002
    1: 0x64700000 0x64040002
    1: 0x64800000 0x64040002
    1: 0x64900000 0x64040002
    1: 0x64a00000 0x64040002
    1: 0x64b00000 0x64040002
    1: 0x64c00000 0x64040002
    1: 0x64d00000 0x64040002
    1: 0x64e00000 0x64040002
    1: 0x64f00000 0x64040002
    1: 0x65000000 0x65040002
    1: 0x65100000 0x65040002
    1: 0x65200000 0x65040002
    1: 0x65300000 0x65040002
    1: 0x65400000 0x65040002
    1: 0x65500000 0x65040002
    1: 0x65600000 0x65040002
    1: 0x65700000 0x65040002
    1: 0x65800000 0x65040002
    1: 0x65900000 0x65040002
    1: 0x65a00000 0x65040002
    1: 0x65b00000 0x65040002
    1: 0x65c00000 0x65040002
    1: 0x65d00000 0x65040002
    1: 0x65e00000 0x65040002
    1: 0x65f00000 0x65040002
    1: 0x66000000 0x66040002
    1: 0x66100000 0x66040002
    1: 0x66200000 0x66040002
    1: 0x66300000 0x66040002
    1: 0x66400000 0x66040002
    1: 0x66500000 0x66040002
    1: 0x66600000 0x66040002
    1: 0x66700000 0x66040002
    1: 0x66800000 0x66040002
    1: 0x66900000 0x66040002
    1: 0x66a00000 0x66040002
    1: 0x66b00000 0x66040002
    1: 0x66c00000 0x66040002
    1: 0x66d00000 0x66040002
    1: 0x66e00000 0x66040002
    1: 0x66f00000 0x66040002
    1: 0x67000000 0x67040002
    1: 0x67100000 0x67040002
    1: 0x67200000 0x67040002
    1: 0x67300000 0x67040002
    1: 0x67400000 0x67040002
    1: 0x67500000 0x67040002
    1: 0x67600000 0x67040002
    1: 0x67700000 0x67040002
    1: 0x67800000 0x67040002
    1: 0x67900000 0x67040002
    1: 0x67a00000 0x67040002
    1: 0x67b00000 0x67040002
    1: 0x67c00000 0x67040002
    1: 0x67d00000 0x67040002
    1: 0x67e00000 0x67040002
    1: 0x67f00000 0x67040002
    1: 0x68000000 0x68040002
    1: 0x68100000 0x68040002
    1: 0x68200000 0x68040002
    1: 0x68300000 0x68040002
    1: 0x68400000 0x68040002
    1: 0x68500000 0x68040002
    1: 0x68600000 0x68040002
    1: 0x68700000 0x68040002
    1: 0x68800000 0x68040002
    1: 0x68900000 0x68040002
    1: 0x68a00000 0x68040002
    1: 0x68b00000 0x68040002
    1: 0x68c00000 0x68040002
    1: 0x68d00000 0x68040002
    1: 0x68e00000 0x68040002
    1: 0x68f00000 0x68040002
    1: 0x69000000 0x69040002
    1: 0x69100000 0x69040002
    1: 0x69200000 0x69040002
    1: 0x69300000 0x69040002
    1: 0x69400000 0x69040002
    1: 0x69500000 0x69040002
    1: 0x69600000 0x69040002
    1: 0x69700000 0x69040002
    1: 0x69800000 0x69040002
    1: 0x69900000 0x69040002
    1: 0x69a00000 0x69040002
    1: 0x69b00000 0x69040002
    1: 0x69c00000 0x69040002
    1: 0x69d00000 0x69040002
    1: 0x69e00000 0x69040002
    1: 0x69f00000 0x69040002
    1: 0x6a000000 0x6a040002
    1: 0x6a100000 0x6a040002
    1: 0x6a200000 0x6a040002
    1: 0x6a300000 0x6a040002
    1: 0x6a400000 0x6a040002
    1: 0x6a500000 0x6a040002
    1: 0x6a600000 0x6a040002
    1: 0x6a700000 0x6a040002
    1: 0x6a800000 0x6a040002
    1: 0x6a900000 0x6a040002
    1: 0x6aa00000 0x6a040002
    1: 0x6ab00000 0x6a040002
    1: 0x6ac00000 0x6a040002
    1: 0x6ad00000 0x6a040002
    1: 0x6ae00000 0x6a040002
    1: 0x6af00000 0x6a040002
    1: 0x6b000000 0x6b040002
    1: 0x6b100000 0x6b040002
    1: 0x6b200000 0x6b040002
    1: 0x6b300000 0x6b040002
    1: 0x6b400000 0x6b040002
    1: 0x6b500000 0x6b040002
    1: 0x6b600000 0x6b040002
    1: 0x6b700000 0x6b040002
    1: 0x6b800000 0x6b040002
    1: 0x6b900000 0x6b040002
    1: 0x6ba00000 0x6b040002
    1: 0x6bb00000 0x6b040002
    1: 0x6bc00000 0x6b040002
    1: 0x6bd00000 0x6b040002
    1: 0x6be00000 0x6b040002
    1: 0x6bf00000 0x6b040002
    1: 0x6c000000 0x6c040002
    1: 0x6c100000 0x6c040002
    1: 0x6c200000 0x6c040002
    1: 0x6c300000 0x6c040002
    1: 0x6c400000 0x6c040002
    1: 0x6c500000 0x6c040002
    1: 0x6c600000 0x6c040002
    1: 0x6c700000 0x6c040002
    1: 0x6c800000 0x6c040002
    1: 0x6c900000 0x6c040002
    1: 0x6ca00000 0x6c040002
    1: 0x6cb00000 0x6c040002
    1: 0x6cc00000 0x6c040002
    1: 0x6cd00000 0x6c040002
    1: 0x6ce00000 0x6c040002
    1: 0x6cf00000 0x6c040002
    1: 0x6d000000 0x6d040002
    1: 0x6d100000 0x6d040002
    1: 0x6d200000 0x6d040002
    1: 0x6d300000 0x6d040002
    1: 0x6d400000 0x6d040002
    1: 0x6d500000 0x6d040002
    1: 0x6d600000 0x6d040002
    1: 0x6d700000 0x6d040002
    1: 0x6d800000 0x6d040002
    1: 0x6d900000 0x6d040002
    1: 0x6da00000 0x6d040002
    1: 0x6db00000 0x6d040002
    1: 0x6dc00000 0x6d040002
    1: 0x6dd00000 0x6d040002
    1: 0x6de00000 0x6d040002
    1: 0x6df00000 0x6d040002
    1: 0x6e000000 0x6e040002
    1: 0x6e100000 0x6e040002
    1: 0x6e200000 0x6e040002
    1: 0x6e300000 0x6e040002
    1: 0x6e400000 0x6e040002
    1: 0x6e500000 0x6e040002
    1: 0x6e600000 0x6e040002
    1: 0x6e700000 0x6e040002
    1: 0x6e800000 0x6e040002
    1: 0x6e900000 0x6e040002
    1: 0x6ea00000 0x6e040002
    1: 0x6eb00000 0x6e040002
    1: 0x6ec00000 0x6e040002
    1: 0x6ed00000 0x6e040002
    1: 0x6ee00000 0x6e040002
    1: 0x6ef00000 0x6e040002
    1: 0x6f000000 0x6f040002
    1: 0x6f100000 0x6f040002
    1: 0x6f200000 0x6f040002
    1: 0x6f300000 0x6f040002
    1: 0x6f400000 0x6f040002
    1: 0x6f500000 0x6f040002
    1: 0x6f600000 0x6f040002
    1: 0x6f700000 0x6f040002
    1: 0x6f800000 0x6f040002
    1: 0x6f900000 0x6f040002
    1: 0x6fa00000 0x6f040002
    1: 0x6fb00000 0x6f040002
    1: 0x6fc00000 0x6f040002
    1: 0x6fd00000 0x6f040002
    1: 0x6fe00000 0x6f040002
    1: 0x6ff00000 0x6f040002
    1: 0x70000000 0x70040002
    1: 0x70100000 0x70040002
    1: 0x70200000 0x70040002
    1: 0x70300000 0x70040002
    1: 0x70400000 0x70040002
    1: 0x70500000 0x70040002
    1: 0x70600000 0x70040002
    1: 0x70700000 0x70040002
    1: 0x70800000 0x70040002
    1: 0x70900000 0x70040002
    1: 0x70a00000 0x70040002
    1: 0x70b00000 0x70040002
    1: 0x70c00000 0x70040002
    1: 0x70d00000 0x70040002
    1: 0x70e00000 0x70040002
    1: 0x70f00000 0x70040002
    1: 0x71000000 0x71040002
    1: 0x71100000 0x71040002
    1: 0x71200000 0x71040002
    1: 0x71300000 0x71040002
    1: 0x71400000 0x71040002
    1: 0x71500000 0x71040002
    1: 0x71600000 0x71040002
    1: 0x71700000 0x71040002
    1: 0x71800000 0x71040002
    1: 0x71900000 0x71040002
    1: 0x71a00000 0x71040002
    1: 0x71b00000 0x71040002
    1: 0x71c00000 0x71040002
    1: 0x71d00000 0x71040002
    1: 0x71e00000 0x71040002
    1: 0x71f00000 0x71040002
    1: 0x72000000 0x72040002
    1: 0x72100000 0x72040002
    1: 0x72200000 0x72040002
    1: 0x72300000 0x72040002
    1: 0x72400000 0x72040002
    1: 0x72500000 0x72040002
    1: 0x72600000 0x72040002
    1: 0x72700000 0x72040002
    1: 0x72800000 0x72040002
    1: 0x72900000 0x72040002
    1: 0x72a00000 0x72040002
    1: 0x72b00000 0x72040002
    1: 0x72c00000 0x72040002
    1: 0x72d00000 0x72040002
    1: 0x72e00000 0x72040002
    1: 0x72f00000 0x72040002
    1: 0x73000000 0x73040002
    1: 0x73100000 0x73040002
    1: 0x73200000 0x73040002
    1: 0x73300000 0x73040002
    1: 0x73400000 0x73040002
    1: 0x73500000 0x73040002
    1: 0x73600000 0x73040002
    1: 0x73700000 0x73040002
    1: 0x73800000 0x73040002
    1: 0x73900000 0x73040002
    1: 0x73a00000 0x73040002
    1: 0x73b00000 0x73040002
    1: 0x73c00000 0x73040002
    1: 0x73d00000 0x73040002
    1: 0x73e00000 0x73040002
    1: 0x73f00000 0x73040002
    1: 0x74000000 0x74040002
    1: 0x74100000 0x74040002
    1: 0x74200000 0x74040002
    1: 0x74300000 0x74040002
    1: 0x74400000 0x74040002
    1: 0x74500000 0x74040002
    1: 0x74600000 0x74040002
    1: 0x74700000 0x74040002
    1: 0x74800000 0x74040002
    1: 0x74900000 0x74040002
    1: 0x74a00000 0x74040002
    1: 0x74b00000 0x74040002
    1: 0x74c00000 0x74040002
    1: 0x74d00000 0x74040002
    1: 0x74e00000 0x74040002
    1: 0x74f00000 0x74040002
    1: 0x75000000 0x75040002
    1: 0x75100000 0x75040002
    1: 0x75200000 0x75040002
    1: 0x75300000 0x75040002
    1: 0x75400000 0x75040002
    1: 0x75500000 0x75040002
    1: 0x75600000 0x75040002
    1: 0x75700000 0x75040002
    1: 0x75800000 0x75040002
    1: 0x75900000 0x75040002
    1: 0x75a00000 0x75040002
    1: 0x75b00000 0x75040002
    1: 0x75c00000 0x75040002
    1: 0x75d00000 0x75040002
    1: 0x75e00000 0x75040002
    1: 0x75f00000 0x75040002
    1: 0x76000000 0x76040002
    1: 0x76100000 0x76040002
    1: 0x76200000 0x76040002
    1: 0x76300000 0x76040002
    1: 0x76400000 0x76040002
    1: 0x76500000 0x76040002
    1: 0x76600000 0x76040002
    1: 0x76700000 0x76040002
    1: 0x76800000 0x76040002
    1: 0x76900000 0x76040002
    1: 0x76a00000 0x76040002
    1: 0x76b00000 0x76040002
    1: 0x76c00000 0x76040002
    1: 0x76d00000 0x76040002
    1: 0x76e00000 0x76040002
    1: 0x76f00000 0x76040002
    1: 0x77000000 0x77040002
    1: 0x77100000 0x77040002
    1: 0x77200000 0x77040002
    1: 0x77300000 0x77040002
    1: 0x77400000 0x77040002
    1: 0x77500000 0x77040002
    1: 0x77600000 0x77040002
    1: 0x77700000 0x77040002
    1: 0x77800000 0x77040002
    1: 0x77900000 0x77040002
    1: 0x77a00000 0x77040002
    1: 0x77b00000 0x77040002
    1: 0x77c00000 0x77040002
    1: 0x77d00000 0x77040002
    1: 0x77e00000 0x77040002
    1: 0x77f00000 0x77040002
    1: 0x78000000 0x78040002
    1: 0x78100000 0x78040002
    1: 0x78200000 0x78040002
    1: 0x78300000 0x78040002
    1: 0x78400000 0x78040002
    1: 0x78500000 0x78040002
    1: 0x78600000 0x78040002
    1: 0x78700000 0x78040002
    1: 0x78800000 0x78040002
    1: 0x78900000 0x78040002
    1: 0x78a00000 0x78040002
    1: 0x78b00000 0x78040002
    1: 0x78c00000 0x78040002
    1: 0x78d00000 0x78040002
    1: 0x78e00000 0x78040002
    1: 0x78f00000 0x78040002
    1: 0x79000000 0x79040002
    1: 0x79100000 0x79040002
    1: 0x79200000 0x79040002
    1: 0x79300000 0x79040002
    1: 0x79400000 0x79040002
    1: 0x79500000 0x79040002
    1: 0x79600000 0x79040002
    1: 0x79700000 0x79040002
    1: 0x79800000 0x79040002
    1: 0x79900000 0x79040002
    1: 0x79a00000 0x79040002
    1: 0x79b00000 0x79040002
    1: 0x79c00000 0x79040002
    1: 0x79d00000 0x79040002
    1: 0x79e00000 0x79040002
    1: 0x79f00000 0x79040002
    1: 0x7a000000 0x7a040002
    1: 0x7a100000 0x7a040002
    1: 0x7a200000 0x7a040002
    1: 0x7a300000 0x7a040002
    1: 0x7a400000 0x7a040002
    1: 0x7a500000 0x7a040002
    1: 0x7a600000 0x7a040002
    1: 0x7a700000 0x7a040002
    1: 0x7a800000 0x7a040002
    1: 0x7a900000 0x7a040002
    1: 0x7aa00000 0x7a040002
    1: 0x7ab00000 0x7a040002
    1: 0x7ac00000 0x7a040002
    1: 0x7ad00000 0x7a040002
    1: 0x7ae00000 0x7a040002
    1: 0x7af00000 0x7a040002
    1: 0x7b000000 0x7b040002
    1: 0x7b100000 0x7b040002
    1: 0x7b200000 0x7b040002
    1: 0x7b300000 0x7b040002
    1: 0x7b400000 0x7b040002
    1: 0x7b500000 0x7b040002
    1: 0x7b600000 0x7b040002
    1: 0x7b700000 0x7b040002
    1: 0x7b800000 0x7b040002
    1: 0x7b900000 0x7b040002
    1: 0x7ba00000 0x7b040002
    1: 0x7bb00000 0x7b040002
    1: 0x7bc00000 0x7b040002
    1: 0x7bd00000 0x7b040002
    1: 0x7be00000 0x7b040002
    1: 0x7bf00000 0x7b040002
    1: 0x7c000000 0x7c040002
    1: 0x7c100000 0x7c040002
    1: 0x7c200000 0x7c040002
    1: 0x7c300000 0x7c040002
    1: 0x7c400000 0x7c040002
    1: 0x7c500000 0x7c040002
    1: 0x7c600000 0x7c040002
    1: 0x7c700000 0x7c040002
    1: 0x7c800000 0x7c040002
    1: 0x7c900000 0x7c040002
    1: 0x7ca00000 0x7c040002
    1: 0x7cb00000 0x7c040002
    1: 0x7cc00000 0x7c040002
    1: 0x7cd00000 0x7c040002
    1: 0x7ce00000 0x7c040002
    1: 0x7cf00000 0x7c040002
    1: 0x7d000000 0x7d040002
    1: 0x7d100000 0x7d040002
    1: 0x7d200000 0x7d040002
    1: 0x7d300000 0x7d040002
    1: 0x7d400000 0x7d040002
    1: 0x7d500000 0x7d040002
    1: 0x7d600000 0x7d040002
    1: 0x7d700000 0x7d040002
    1: 0x7d800000 0x7d040002
    1: 0x7d900000 0x7d040002
    1: 0x7da00000 0x7d040002
    1: 0x7db00000 0x7d040002
    1: 0x7dc00000 0x7d040002
    1: 0x7dd00000 0x7d040002
    1: 0x7de00000 0x7d040002
    1: 0x7df00000 0x7d040002
    1: 0x7e000000 0x7e040002
    1: 0x7e100000 0x7e040002
    1: 0x7e200000 0x7e040002
    1: 0x7e300000 0x7e040002
    1: 0x7e400000 0x7e040002
    1: 0x7e500000 0x7e040002
    1: 0x7e600000 0x7e040002
    1: 0x7e700000 0x7e040002
    1: 0x7e800000 0x7e040002
    1: 0x7e900000 0x7e040002
    1: 0x7ea00000 0x7e040002
    1: 0x7eb00000 0x7e040002
    1: 0x7ec00000 0x7e040002
    1: 0x7ed00000 0x7e040002
    1: 0x7ee00000 0x7e040002
    1: 0x7ef00000 0x7e040002
    1: 0x7f000000 0x7f040002
    1: 0x7f100000 0x7f040002
    1: 0x7f200000 0x7f040002
    1: 0x7f300000 0x7f040002
    1: 0x7f400000 0x7f040002
    1: 0x7f500000 0x7f040002
    1: 0x7f600000 0x7f040002
    1: 0x7f700000 0x7f040002
    1: 0x7f800000 0x7f040002
    1: 0x7f900000 0x7f040002
    1: 0x7fa00000 0x7f040002
    1: 0x7fb00000 0x7f040002
    1: 0x7fc00000 0x7f040002
    1: 0x7fd00000 0x7f040002
    1: 0x7fe00000 0x7f040002
    1: 0x7ff00000 0x7f040002
    1: 0x80000000 0xba300002
    1: 0x80100000 0xba400002
    1: 0x80200000 0xba500002
    1: 0x80300000 0xba600002
    1: 0x80400000 0xba700002
    1: 0x80500000 0xba800002
    1: 0x80600000 0xba900002
    1: 0x80700000 0xbaa00002
    1: 0x80800000 0xbab00002
    1: 0x80900000 0xbac00002
    1: 0x80a00000 0xbad00002
    1: 0x80b00000 0xbae00002
    1: 0x80c00000 0xbaf00002
    1: 0x80d00000 0xbb000002
    1: 0x80e00000 0xbb100002
    1: 0x80f00000 0xbb200002
    1: 0x81000000 0xbb300002
    1: 0x81100000 0xbb400002
    1: 0x81200000 0xbb500002
    1: 0x81300000 0xbb600002
    1: 0x81400000 0xbb700002
    1: 0x81500000 0xbb800002
    1: 0x81600000 0xbb900002
    1: 0x81700000 0xbba00002
    1: 0x81800000 0xbbb00002
    1: 0x81900000 0xbbc00002
    1: 0x81a00000 0xbbd00002
    1: 0x81b00000 0xbbe00002
    1: 0x81c00000 0xbbf00002
    1: 0x81d00000 0xbc000002
    1: 0x81e00000 0xbc100002
    1: 0x81f00000 0xbc200002
    1: 0x82000000 0xbc300002
    1: 0x82100000 0xbc400002
    1: 0x82200000 0xbc500002
    1: 0x82300000 0xbc600002
    1: 0x82400000 0xbc700002
    1: 0x82500000 0xbc800002
    1: 0x82600000 0xbc900002
    1: 0x82700000 0xbca00002
    1: 0x82800000 0xbcb00002
    1: 0x82900000 0xbcc00002
    1: 0x82a00000 0xbcd00002
    1: 0x82b00000 0xbce00002
    1: 0x82c00000 0xbcf00002
    1: 0x82d00000 0xbd000002
    1: 0x82e00000 0xbd100002
    1: 0x82f00000 0xbd200002
    1: 0x83000000 0xbd300002
    1: 0x83100000 0xbd400002
    1: 0x83200000 0xbd500002
    1: 0x83300000 0xbd600002
    1: 0x83400000 0xbd700002
    1: 0x83500000 0xbd800002
    1: 0x83600000 0xbd900002
    1: 0x83700000 0xbda00002
    1: 0x83800000 0xbdb00002
    1: 0x83900000 0xbdc00002
    1: 0x83a00000 0xbdd00002
    1: 0x83b00000 0xbde00002
    1: 0x83c00000 0xbdf00002
    1: 0x83d00000 0xbe000002
    1: 0x83e00000 0xbe100002
    1: 0x83f00000 0xbe200002
    1: 0x84000000 0xbe300002
    1: 0x84100000 0xbe400002
    1: 0x84200000 0xbe500002
    1: 0x84300000 0xbe600002
    1: 0x84400000 0xbe700002
    1: 0x84500000 0xbe800002
    1: 0x84600000 0xbe900002
    1: 0x84700000 0xbea00002
    1: 0x84800000 0xbeb00002
    1: 0x84900000 0xbec00002
    1: 0x84a00000 0xbed00002
    1: 0x84b00000 0xbee00002
    1: 0x84c00000 0xbef00002
    1: 0x84d00000 0xbf000002
    1: 0x84e00000 0xbf100002
    1: 0x84f00000 0xbf200002
    1: 0x85000000 0xbf300002
    1: 0x85100000 0xbf400002
    1: 0x85200000 0xbf500002
    1: 0x85300000 0xbf600002
    1: 0x85400000 0xbf700002
    1: 0x85500000 0xbf800002
    1: 0x85600000 0xbf900002
    1: 0x85700000 0xbfa00002
    1: 0x85800000 0xbfb00002
    1: 0x85900000 0xbfc00002
    1: 0x95000000 0x99100002
    1: 0x95100000 0x99200002
    1: 0x95200000 0x99300002
    1: 0x95300000 0x99400002
    1: 0x95400000 0x99500002
    1: 0x9f000000 0x99600002
    1: 0xa0000000 0x99000002
    

    Where can I find the page table of the CCS JTAG?

    Sorry, I am very lost in these topics MMU, Rsc tables, etc.

  • Kevin,

    The DSP1 MMU0 page table is in /sys/kernel/debug/omap_iommu/40d01000.mmu. /lib/firmware is the directory to put remote core images. I don't think you should continue the path with CCS JTAG to load DSP image. With the IPC framework, the remote core images *must* be loaded by remoteproc in the linux kernel.

    For MMU, please check chapter 20 - Memory Management Units in AM572x TRM.
    For resource table, in addition to processors.wiki.ti.com/.../IPC_Resource_customTable, you can also refer to Linux kernel Document/remoteproc.txt.

    -Garrett
  • Garrett Ding said:
    Kevin,
    The DSP1 MMU0 page table is in /sys/kernel/debug/omap_iommu/40d01000.mmu. /lib/firmware is the directory to put remote core images. I don't think you should continue the path with CCS JTAG to load DSP image. With the IPC framework, the remote core images *must* be loaded by remoteproc in the linux kernel.


    So is there no possibility to debug the DSP executables with CCS6, while I am trying to do IPC between ARM and DSP? I am only able to see the logging and that's it? Or do you have any other suggestion to have ability to debug during the developement of IPC?

  • While I hadn't quite connected the dots yet, I was thinking in the back of my head that once you want to use IPC you can't load the code via CCS.  RemoteProc needs to program the MMU in order for IPC to work and that only happens when the ARM loads the DSP.  I think you should be able to connect to the DSP and debug with CCS after the ARM loads the DSP though, I hope?????

  • Garrett was answering once this:
    "To debug DSP side application, after you load the DSP image from /lib/firmware, you can connect to the core from CCS and then load only the image symbols to examine the code. Alternatively, you can add some Log_print0 in the DSP code, and then check the print log from host Linux terminal, for DSP1, the log is in /sys/kernel/debug/remoteproc/remoteproc2/trace0."

    So this is the only thing I can do with CCS? loading the image symbols?
  • There are two ways to connect to a DSP via CCS debugger.

    1) Total Control. I'm guessing this is how you are used to connecting. The DSP is reset, initialized (GEL files) and loaded via the JTAG.

    2) Polite Mode. In this mode something else loaded the DSP and it is already running. In this case the ARM loaded the DSP via remoteProc and it is already running. Before you connect in the CCS Debug view, you will want to click on the button for Polite mode. Should be in the toolbar near the Play/Pause/Stop/Step buttons. This will cause the debugger to connect but not interrupt the running DSP. Now, in order for the debugger to understand what it is connecting to and make the code and data make sense, you need to load the symbols from the .out file that was loaded to the DSP. Run->Load->Load Symbols and select the .out of the file that remoteProc loaded to the DSP. Now, you are ready to set breakpoints and look at memory just as with step 1 above.
  • Thanks Christopher. I will try soon and I hope it will work out with the "Polite Mode", because the "Total Control" is not working like I want, if I understood Garret correctly.
  • I tried it with the polite mode, but it is not working like I want to. Maybe I am doing something wrong. I found the polite mode, after I activated the Silicon real-time mode. The polite mode is already activated after this. Then I have to connect to the DSP1.
    When I am finished with loading the symbols of the out/xe66 file, the DSP is ending up in the function Task_exit and nothing is working after that.

    So what I did was:
    - Launching the target config
    - Enable the Silicon real time mode for DSP1 (polite mode inclusively)
    - Connect to DSP1 and load the xe66 symbols

    You said, that after I did activate the polite mode, the debugger will connect to the running DSP. That is not happening in my application, I have to connect manually. Is this causing my problem?
  • I also have the problem, after I stopped the debug session and relaunch the target config, CCS isn't working properly anymore, because after the relaunch is finished, the Debug window is not showing me the processors anymore. The only way to solve that, is to restart CCS...sometimes...not always...and that's a bit annoying...I am using VMWare + Ubuntu 14.04, could that be a problem of the VM?
  • I think you did it all correct, I just mistyped, my apologies. I agree that Silicon Realtime mode likely also turns on Polite mode, I forgot which came first.

    You do have to manually connect to the DSP. When you connect to the DSP it should be in Running mode. You should have to press the Pause button to get it to stop the code.

    So, let's assume it is actually working. Connecting the debugger and seeing you are in Exit() is what you actually wanted to know. Something has gone wrong in your application and aborted or exited. I would try running a TI Example that you know works and repeating your process. Usually you will hit Idle if you pause the processor.
  • I cannot try again, because my CCS6 is not working properly anymore. Either I can see only one processor after launching the target config or none. What is wrong here? I am not able to get it back to the state, where it ran into the Task_exit, because I cannot connect to the DSP1.

  • Okay, it is not depending on my Linux VM. I have the same problem with my Windows CCS6. First time, it worked, but after the disconnection, I cannot get into the same state as the first time. When I try to relaunch, no processors or only the M4 is shown in the Debug window.

    Seems like a Code Composer Studio 6 problem...relauching my target configuration leeds to wrong behavior of the Debug Session!

    (-> a simple target config for an AM5726_RevA Board with Blackhawk XDS560v2-USB System Trace Emulator, nothing else selected, no Gel files, Test connection worked)