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.

RTOS/PROCESSOR-SDK-AM57X: OpenMP example fails

Part Number: PROCESSOR-SDK-AM57X
Other Parts Discussed in Thread: TMDSEVM572X, SYSBIOS

Tool/software: TI-RTOS

Running OpenMP hello example on TMDSEVM572X fails.

http://downloads.ti.com/mctools/esd/docs/openmp-dsp/building_openmp_app.html

The main components versions used are:

 - CCS7.1.0.00016

 - PROCESSOR-SDK-RTOS-AM57X  04_00_00_04

When it fails, both cores are stopped at the point in __ti_dsp_malloc() or _minit().

How can this failure be fixed?

Best regards,

Daisuke

  • The RTOS team have been notified. They will respond here.
  • Hi,

    I am trying to allocate the section ".TI.tls" to DDR3 in reference to the following post.

    http://e2e.ti.com/support/development_tools/compiler/f/343/p/495133/1791277#1791277

    I tried two different methods below.

     1. Use linker command file:

      SECTIONS
      {
         .TI.tls: > DDR3
      }

     2. Use RTSC configuration file:

      program.sectMap[".TI.tls"]        = new Program.SectionSpec();

      program.sectMap[".TI.tls"].loadSegment      = "DDR3";

    But the section ".TI.tls" does not exist in the map file after the build is completed.

    How can the section ".TI.tls" be allocated?

    Please give me an answer as soon as possible. Your prompt reply would be appreciated.

    Best regards,

    Daisuke

  • Hi,

    If you have CCS project already, can you pass by attaching it here for me to reproduce? What version of CCS, SYSBIOS, XDC, openMP run time library you used?

    Regards, Eric
  • Hi Eric-san,

    Thank you for your reply.

    My CCS project is attached here: openmp_app.zip

    The components versions used are as follows:

     - CCS7.1.0.00016

     - PROCESSOR-SDK-RTOS-AM57X  04_00_00_04

     http://software-dl.ti.com/processor-sdk-rtos/esd/AM57X/latest/index_FDS.html

    All other components that are not listed here are included in the Processor SDK.

    Best regards,

    Daisuke

  • Hi,

    Thanks for providing the CCS project. It only needs SYSBIOS, IPC, PDK, XDC, OPENMP, but your project had many other RTSC packages I removed.

    Also, for some reason the openMP runtime library (COM_TI_RTSC_OPENMP_INSTALL_DIR) points to my K2G OPENMP installation and I was not able to update it. As a workaround, I copied ti_runtime_openmp_am57x_debug_e66.ae66 to \openmp_dsp_k2g_2_06_00_00\packages\ti\runtime\openmp\lib so I can link.

    Then I can build and load the .out to both C66x cores of AM572x. Run it I got:

    [C66xx_DSP1] Hello World from thread = 0

    Number of threads = 2

    [C66xx_DSP2] Hello World from thread = 1

    Attached the CCS project and build log. Hope it worked on your side as well.

    Regards, Eric

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

    .

  • Hi Eric-san,

    Thank you for your reply.

    The out file in the project you attached can fail. It seems to be not a project problem.

    After the first power-on, it succeeds. Subsequently, it succeeds many times even after doing any of the following steps for DSP Cores (Group).

     - "CPU Reset" -> "Reload Program" -> "Resume"

     - "Disconnect Target" -> "Connect Target" -> "CPU Reset" -> "Reload Program" -> "Resume"

    But after A15 core is reconnected the program load fails. And after being powered on after power off, running the program fails. When the running fails, both cores are stopped at the point in __ti_dsp_malloc().

    Is this problem reproduced in your environment?

    I assume that initialization by the gel file for A15 core is related to this problem. For example, the heat from the devices affects the result of DDR3 leveling.

    Best regards,

    Daisuke

  • Hi,

    The way I tested the program is:

    1) Do a system reset on A15 core in CCS

    2) Connect A15 and run the GELs when you create GP EVM or IDK EVM target

    3) Run the GEL to enable DSP1/2 clock

    4) load .out to both DSP cores and run

    5) disconnect both DSP cores

    I don't have any failure in several tries. You can power cycle the card as well.

    Regards, Eric

  • Hi Eric-san,

    Thank you for your reply.

    My detailed confirmation procedure is as follows:

      1) Connect emulator to JTAG header of TMDSEVM572X

      2) Connect AC adapter without AC power to 12V input of TMDSEVM572X

      3) Connect AC adapter to AC power supply

      4) Connect emulator to PC with USB cable

      5) Start CCS

      6) Start Debug with "Launch Selected Configuration"

      7) Press the power switch to turn on TMDSEVM572X

      8) CortexA15_0: "Connect Target" then "OnTargetConnect()" in GEL runs and it enables all slave cores by "AM572x_MULTICORE_EnableAllCores()"

      9) Group 1 (C66xx_DSP1 and C66xx_DSP2): "Connect Target"

     10) Group 1 (C66xx_DSP1 and C66xx_DSP2): "CPU Reset"

     11) Group 1 (C66xx_DSP1 and C66xx_DSP2): "Load Program..."

     12) Group 1 (C66xx_DSP1 and C66xx_DSP2): "Resume"

     13) "Terminate" Debug

     14) Terminate CCS

     15) Unplug USB cable from PC

     16) Press and hold the power switch to turn off TMDSEVM572X

     17) Disconnect AC adapter from AC power supply

    After step 17, running the program can fail in step 12 if I start over from step 3 before TMDSEVM572X cools down.

    What is the revision of the processor module in your GP EVM?

    The latest revision of the processor module is A3A, but the revision of my processor module is A3.

    Best regards,

    Daisuke

  • Hi,

    My board is AM572x GP EVM, A3. I tried your steps, it worked well for me. Given you disconnected AC adaptor from step 17), this is the same as you run it from a fresh power cycle (the first run). It doesn't make sense it works in the first run then you power cycle it and it failed in the second run.

    If it failed in the second run, how do you make the program working again? Why the third run works? And what is your purpose to tear down everything? like close CCS, unplug USB cable, disconnect AC? Normally we keep CCS opening, keep the JTAG cable there. Either Press and hold the power switch to turn off, then turn on again and quickly run the GEL to avoid PMIC turn it off; or we don't touch power button, but use system reset in CCS to reset the SOC, then run the GEL again for repeated test.

    Regards, Eric
  • Hi Eric-san,

    Thank you for your reply.

    The repetition of these steps succeeds if the board runs again after enough time passes after step 17, but fails many times if the board runs again before enough time passes after step 17. It seems to fail if the board runs before it cools down.

    Best regards,

    Daisuke

  • Hi Eric-san,

    Additional Information:

    In the first run, even if enough time has elapsed after step 6 or step 8, it succeeds. But if all the cores are disconnected after step 12 then start again from step 8, the load program fails in step 11. The failure seems to occur after the gel file runs again.

    Best regards,

    Daisuke

  • Hi Eric-san,

    Additional Information 2:

    If step 11 and step 12 are removed (no running program) in the first run, the running the Openmp_app fails in step 12 in the second run.

    Even after the running fails in step 12, the running other program ("\pdk_am57xx_1_0_7\packages\MyExampleProjects\GPIO_LedBlink_evmAM572x_c66xTestProject") in C66XX_DSP1 succeeds.

    Best regards,

    Daisuke

  • Hi,

    I can't reproduce your issue and I don't understand why you need to "close CCS, remove USB cable, disconnect AC" for such test.

    As the power is totally removed, the each test run is independent. You need to make sure the GEL runs successful every time.

    If you found that board seems overheated and cooling down helps for the next run, there maybe some HW issue although I don't understand: the openMP helloworld is very simple program, just print something, it is not SOC or DDR extensive how can it make board over heat?

    You can verify the exact steps on another EVM, if no such problem then you can ask the distributor for an exchange or repair the broken if still under warranty.

    Regards, Eric
  • Hi Eric-san,

    Thank you for your reply.

    I need to "close CCS, remove USB cable, disconnect AC" to ensure that the each test run is independent.

    I have checked the logs after the GEL runs. Both the 1st run (success) and the 2nd run (failure) logs had the same result.

    This issue occurs on our customer own EVM and is reproduced on our own EVM.

    With the latest EVM (Revison A3a) that I've just gotten, I have verified again. This issue is reproduced.

    This issue has already occurred on three different boards.

    Best regards,

    Daisuke

  • Hi,

    If the issue happened on several boards already, what if you repeated for 3rd and 4th trials:
    1st: OK
    2nd: NG
    3rd: ?
    4th: ?

    How you can come back to the original state (e.g, 1st: OK)? Do you have to cooling the board for a while to make it work again?

    In the past we tested the AM572x GP EVM with different driver application examples (we certainly don't close CCS, remove USB cable, disconnect AC), we didn't see any issues.

    I remember that you mentioned LED test worked OK with your sequence. So do you want to debug this as a HW issue or SW issue (OPENMP)? If for the HW, we have many EVM users and there was no such report first run OK then second run failure issue. If for the SW, this is a very simple printf showing how to do openMP, why need to run multiple times? And each run is totally indepentent, the obeservation didn't make sense. If you wait for a while then run the second test, will you pass? Do you have any measurement showing the board is over-heated?

    Regards, Eric
  • Hi Eric-san,

    Thank you for your reply.

    Even if the 3rd and 4th trials are repeated, it is needed to leave the board for a while to make it work again to come back to the original state (i.e, 1st: OK).

    There is no measurement showing the board is over-heated. I check that it is hot or cold by touching the heatsink.

    Our customer wants to evaluate various algorithms using OpenMP based on the hallo project which is basic example. If only this project has this issue, the customer can switch to other OpenMP projects.

    Best regards,

    Daisuke