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.

Running HDVPSS on VPSS-M3 and ex02_messageq example on VIDEO-M3 concurrently

Other Parts Discussed in Thread: SYSBIOS

Hello There,

I am trying to run HDVPSS color bar application from the .44 release in concurrent with Syslink 2_10_05_26 ex02_messageq example. I have changed the memory map of the ex02_messageq example so that the memory section are mutually exclusive between VPSS-M3 and VIDEO-M3.

Please find the original working ex02_message example here:

2313.ex02_messageq_original.zip

And the modified config.bld file here (Please rename the file):

7024.config.txt

With these changes I am able to run both the color bar hdvpss example and the messageq example standalone with the same syslink.ko and slaveloader. But when I am running them simultaneously, I am facing the following problems

Problem1:

  1. Load VIDEO-M3 image
  2. Load VPSS-M3 image
  3. Run Color Bar Application on VPSS-M3. SUCCESS
  4. Run MeesageQ application on VIDEO-M3. SUCCESS
  5. This can be run 5-6 times while the Color Bar application is running. After that messageQ example doesn’t work. It gives this error: Assertion at Line no: 301 in /user/a0393259/ti-ezsdk_c6a811x-evm_5_05_00_06/component-sources/syslink_2_10_05_26/packages/ti/syslink/utils/hlos/knl/Linux/../../../../../../ti/syslink/ipc/hlos/knl/Linux/IpcDrv.c: (status >= 0) : failed

Problem2:

  1. Load VPSS-M3 image
  2. Load VIDEO-M3 image
  3. insmod vpss.ko sbufaddr=8e200000: It Hangs here

Problem3:

  1. Load VPSS-M3 image
  2. Run Color Bar Application on VPSS-M3. SUCCESS
  3. Load VIDEO-M3 image. Color Bar Application Stopped.
  4. Run MeesageQ application on VIDEO-M3. Doesn’t work.

I rebuild syslink with this command:

make USE_SYSLINK_NOTIFY=0 syslink

but there was no change in the behavior of the system. Any help on this is highly appreciated.

Thanks and Regards,

Vivek

  • Hello There,

    Here is the generated memory map for the two applications:

    VPSS-M3 (Color Bar Application)

    name origin length used unused
    -------- --------- -------- -------- ----
    L2_ROM 00000000 00004000 0000018c 00003e74
    OCMC0_RAM 00300000 00020000 00000000 00020000
    OCMC1_RAM 00400000 00020000 00000000 00020000
    L2_RAM 20004000 00010000 00000000 00010000
    LINUX_MEM 80000000 0c000000 00000000 0c000000
    DDR3_M3 8d900000 00600000 00017754 005e88ac
    DSS_M3_CODE_MEM 8df00000 00100000 00008f27 000f70d9
    HOST_VPSS_NOITFYMEM 8e000000 00200000 00000000 00200000
    HDVPSS_SHARED_MEM 8e200000 00200000 00000000 00200000
    HDVPSS_DESC_MEM 8e400000 00200000 00000000 00200000

    VIDEO-M3 (ex02_messageq example)

    name origin length used unused
    -------- --------- -------- -------- ----
    L2_BOOT 00000000 00004000 0000018c 00003e74
    OCMC 00300000 00020000 00000000 00020000
    L2_RAM 20004000 0003c000 00000000 0003c000
    VIDEO_PROG 8c000000 01900000 000192a7 018e6d59
    SR_0 8e600000 00010000 00010000 00000000
    SR_1 8e610000 00020000 00020000 00000000

    Thanks and Regards,

    Vivek

  • Vivek,

    Thanks for writing a detailed post for your question. It gave us some good details to study.

    One possible issue is the management of the Ducati dual-core gate. There is a gate used by SYS/BIOS for protecting access to resources shared by both Ducti processors. By default, SYS/BIOS assumes that the VIDEO-M3 (coreId = 0) core will initialize this gate, but this also assumes that the VIDEO-M3 core is loaded and running before the VPSS-M3 (coreId = 1) core. You need to decide which core will initialize this gate, configure both executables accordingly, and then always load and run that core first. Looking at you post, it seems that you are changing your load/start order from run to run. This is not supported.

    I suggest that you decide which core will always be loaded/run first, then add the following to the config script of that executable.

    var GateDualCore = xdc.useModule('ti.sysbios.family.arm.ducati.GateDualCore');
    GateDualCore.initGates = true;

    In the config script for the other core, add the same as above but set initGates = false.

    I'm curious if you are using slaveloader to load/run both cores or are you using firmwareloader for the vpss core and slaveloader for the video core?

    ~Ramsey

  • Ramsey,

    Thanks for the reply. I understand that I cannot change the running order run by run. Our use-case is to run VPSS-M3 first and then VIDEO-M3. I added the GateDualCore script you mentioned in the mail above. GateDualCore.initGates = true in the VPSS-M3 CFG file and GateDualCore.initGates = false in the VIDEO-M3 CFG file. But I did not see a change in behavior. This is what I am running now

    Sequence1:

    1. Load VPSS-M3 image
    2. Load VIDEO-M3 image
    3. insmod vpss.ko sbufaddr=8e200000: It Hangs here

    Sequence2:

    1. Load VPSS-M3 image
    2. Run Color Bar Application on VPSS-M3. SUCCESS
    3. Load VIDEO-M3 image. Color Bar Application Stopped.
    4. Run MeesageQ application on VIDEO-M3. Doesn’t work.

    Is it possible that DualCore setting is being done from some global place (SYSBIOS?) and changing the local CFG file doesn't have any effect? I am also attaching the CFG files I am using for the VPSS-M3 and VIDEO-M3 applications

    VPSS-M3 CFG File:6735.proxyServerHost_ti811x.cfg

    VIDEO-M3 CFG File:4555.Video.cfg

    Regards,

    Vivek

  • Vivek,

    I see conflicting configuration in your two cfg files. The AMMU configuration is not compatible. Remember that there is only one AMMU which is shared by both VPSS and VIDEO processors. Since you load the VPSS first, it will enable the cache and configure the AMMU. When you load the VIDEO core, it will change the AMMU configuration which will crash the VPSS. You have to make sure the two configurations are compatible. For example, the largePages[1] configuration is incompatible.

    proxyServerHost_ti811x.cfg

    AMMU.largePages[1].logicalAddress = 0x8C000000;

    Video.cfg

    var entry = AMMU.largePages[1];
    entry.logicalAddress = configBld.ammu.prgmBaseAddr; /* 0x80000000, from config.bld */

    Furthermore, only the first processor to run (VPSS) should configure L2_BOOT and L2_RAM. I see smallPages[1] being configured in both.

    You have the original ex02_messageq example. Compare the Video.cfg and Vpss.cfg files to see the differences.

    I would not have the following in both files, keep it in the proxyServerHost_ti811x.cfg file and remove it from the Video.cfg file.

    var Cache = xdc.useModule('ti.sysbios.hal.unicache.Cache');
    Cache.enableCache = true;

    ~Ramsey