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.

Multicore Navigator and Hyperlink



I have a board with two C6678 devices connected by Hyperlink.   I can see from the Keystone Multicore Navigator User GUide that there are 32 Queues avaialbe to support Hyperlink (Queue numbers 864-895), but I am unable to see how these queues are used in relation to hyperlink.    I have also looked in the Hyperlink users guide, and browsed the PDK software for clues, but I have come up empty.    

Is there support for Hyperlink in the Multicore Navigator system?   Any guidance is appreciated.

  • John,

    Yes, there is support for Hyperlink in Multicore Navigator. Please refer to Multicore Navigator user's guide on the product folder which is refering to queue# 864 to 895 to be dedicated 32 transmit queues for Hyperlink. 

    Can you specify what specific problem are you facing? 

    Regards,

    Bhavin

  • Bhavin,

    I am trying to figure out the the relationship between the queses and hyperlink.    If I set up Hyperlink, do I put a descriptor in the TX queue?   What happens then?   Does the descriptor (and data) appear on the other processor?   I am not clear on how the queues are used by hyperlink, and how they help me transfer data.

    Thanks for your prompt reply,
    John

  • John,

    Queues 864-895 are not actually used to directly transfer data. These are queue pending queues, which provide a high output signal whenever there are 1 or more descriptors in the queue, and a low output signal whenever there are 0 descriptors in the queue. These queue pending signals are routed to the HyperLink interrupt hardware. Depending on the configuration, this interrupt can be used locally or can be translated to the remote device. There is no way to directly send data to the HyperLink through the use of these queue pending queues, but you can use these queues to trigger an interrupt that can then use software to provide the data in the attached data buffer to the HyperLink.

    If you want to use the queue manager and the packet DMA to transfer data to the HyperLink module, this can be done through address translation using the QMSS infrastructure queues. For an example of using the QMSS infrastructure DMA to transfer data over HyperLink, please see the attached example project. The" HyperLink_Application.doc" document in the attached zip file has an overview of the test and how it works8322.Hyperlink_EVM_example_LE.zip.

  • Derek,

    That is exactly what I was looking for.   That's awesome!

    Thank you very much,

    John

  • Derek Brown said:

    For an example of using the QMSS infrastructure DMA to transfer data over HyperLink, please see the attached example project. The" HyperLink_Application.doc" document in the attached zip file has an overview of the test and how it works8322.Hyperlink_EVM_example_LE.zip.

    Hi Derek,

    i tried to compile your example in CCS but I have some issues with it:

    Description    Resource    Path    Location    Type
    #147 too many initializer values    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 578    C/C++ Problem
    #20 identifier "Cppi_CpDma_AIF_CPDMA" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 526    C/C++ Problem
    #20 identifier "Cppi_CpDma_FFTC_A_CPDMA" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 553    C/C++ Problem
    #20 identifier "Cppi_CpDma_FFTC_B_CPDMA" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 580    C/C++ Problem
    #20 identifier "CSL_AIF2_CFG_CPPI_DMA_GLOBAL_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 541    C/C++ Problem
    #20 identifier "CSL_AIF2_CFG_CPPI_DMA_RX_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 545    C/C++ Problem
    #20 identifier "CSL_AIF2_CFG_CPPI_DMA_RX_FLOW_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 549    C/C++ Problem
    #20 identifier "CSL_AIF2_CFG_CPPI_DMA_TX_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 543    C/C++ Problem
    #20 identifier "CSL_AIF2_CFG_CPPI_DMA_TX_SCHEDULER_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 547    C/C++ Problem
    #20 identifier "CSL_FFTC_A_CONFIG_CPPI_DMA_GLOBAL_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 568    C/C++ Problem
    #20 identifier "CSL_FFTC_A_CONFIG_CPPI_DMA_RX_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 572    C/C++ Problem
    #20 identifier "CSL_FFTC_A_CONFIG_CPPI_DMA_RX_FLOW_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 576    C/C++ Problem
    #20 identifier "CSL_FFTC_A_CONFIG_CPPI_DMA_TX_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 570    C/C++ Problem
    #20 identifier "CSL_FFTC_A_CONFIG_CPPI_DMA_TX_SCHEDULER_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 574    C/C++ Problem
    #20 identifier "CSL_FFTC_B_CONFIG_CPPI_DMA_GLOBAL_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 595    C/C++ Problem
    #20 identifier "CSL_FFTC_B_CONFIG_CPPI_DMA_RX_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 599    C/C++ Problem
    #20 identifier "CSL_FFTC_B_CONFIG_CPPI_DMA_RX_FLOW_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 603    C/C++ Problem
    #20 identifier "CSL_FFTC_B_CONFIG_CPPI_DMA_TX_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 597    C/C++ Problem
    #20 identifier "CSL_FFTC_B_CONFIG_CPPI_DMA_TX_SCHEDULER_CFG_REGS" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 601    C/C++ Problem
    #20 identifier "QMSS_AIF_QUEUE_BASE" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 673    C/C++ Problem
    #20 identifier "QMSS_FFTC_A_QUEUE_BASE" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 681    C/C++ Problem
    #20 identifier "QMSS_FFTC_B_QUEUE_BASE" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 683    C/C++ Problem
    #20 identifier "QMSS_MAX_AIF_QUEUE" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 673    C/C++ Problem
    #20 identifier "QMSS_MAX_FFTC_A_QUEUE" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 681    C/C++ Problem
    #20 identifier "QMSS_MAX_FFTC_B_QUEUE" is undefined    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 683    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 541    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 543    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 545    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 547    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 549    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 568    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 570    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 572    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 574    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 576    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 595    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 597    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 599    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 601    C/C++ Problem
    #42 expression must have arithmetic or pointer type    mnavigator_functions.c    /Hyperlink_EVM_example_LE    line 603    C/C++ Problem


    There's apparently a lot of variables not declared. Do you know where are the declarations ?

    Thank you .

  • Do you have the MCSDK installed? If not, then that is probably your issue, and you can download it here: http://software-dl.ti.com/sdoemb/sdoemb_public_sw/bios_mcsdk/latest/index_FDS.html

    If you do have it installed, please make sure that the paths to the libraries header files and the libraries are pointing to the correct location in your project.

  • I'm sorry I just realize that your example use the DSP C6670 and I actually work on C6678 so I don't have the same libraries espacially the csl_cppi.h library.

    Anyway, if you have the same example for C6678 in your archive folder, I'll be glad to try it on my evm board.

    Regards, Michaël.

  • Hi Michael,

    I have rebuilt and attached the project for C6678. For your reference, here are the steps that I took to get the project to build. You will have to repeat steps #1-4. These steps can be repeated to update to a new revision of the PDK or to switch back to a C6678 device.

    5826.Hyperlink_EVM_example_LE.zip

    1. Select the type of DMA transfer you want to use (EDMA or Packet DMA)
      1. If you want to use Packet (CPPI) DMA
        • Right click on Hyperlink_EDMA_throughput_test.c
        • Choose Resource Configurations --> Exclude from Build
        • Click the "Select All" button
        • Click the "OK" button
      2. If you want to use EDMA
        • Right click on Hyperlink_CPPI_throughput_test.c
        • Choose Resource Configurations --> Exclude from Build
        • Click the "Select All" button
        • Click the "OK" button
    2. Add the PDK_INSTALL_PATH variable to the workspace
      1. Window --> Preferences --> General --> Workspace --> Linked Resources
      2. Click the "New" button
        • Name: CSL_INSTALL_PATH
        • Location: path to the packages folder where the PDK has been installed (e.g. C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_19\packages)
    3. Add the PDK_INSTALL_PATH variable in the project environment
      1. Right click on the project and select "Properties"
      2. On the bottom of this dialog box next to the question mark click "Show advanced settings"
      3. Expand "C/C++ Build" by clicking the '+' button
      4. Select "Environment"
      5. Click the "New" button
        • Set the "Name" field to "PDK_INSTALL_PATH"
        • Set the "Value" field to point to the path to the packages folder where the PDK has been installed (e.g. C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_19\packages)
      6. Click the "OK" button to get back to the "Properties" dialog box for the project
      7. Click the "OK" button to get back to CCS
    4. Update the CSL_INSTALL_PATH variable in the project environment
      1. Right click on the project and select "Properties"
      2. On the bottom of this dialog box next to the question mark click "Show advanced settings"
      3. Expand "C/C++ Build" by clicking the '+' button
      4. Select "Environment"
      5. Under the "Variable" column, select "CSL_INSTALL_PATH", then click the "Edit" button
        • Update the "Value" field to point to the path to the packages folder where the CSL has been installed (e.g. C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_19\packages)
      6. Click the "OK" button to get back to the "Properties" dialog box for the project
      7. Click the "OK" button to get back to CCS
    5. Link cppi_device.c to the project
      1. Right Click on the project
      2. New- -> File
      3. Click the "Advanced" button
      4. Check "Link to file in the file system"
      5. Click the "Variables" button
      6. Select "PDK_INSTALL_PATH"
      7. Click the "Extend" button
      8. Select "ti\drv\cppi\device\cppi_device.c"
      9. Click "OK"
      10. Click "Finish"
    6. Link qmss_device.c to the project
      1. Right Click on the project
      2. New- -> File
      3. Click the "Advanced" button
      4. Check "Link to file in the file system"
      5. Click the "Variables" button
      6. Select "PDK_INSTALL_PATH"
      7. Click the "Extend" button
      8. Select "ti\drv\qmss\device\qmss_device.c"
      9. Click "OK"
      10. Click "Finish"
    7. Remove the Cppi_GlobalConfigParams variable from mnavigator_functions.c
    8. Remove the Qmss_GlobalConfigParams variable from mnavigator_functions.c
  • Hi Derek,

    I think I have to thank you really really much for your explanations !

    However, I got some questions :

    1.

    On the 4th step you said:

    Derek Brown said:

    Update the CSL_INSTALL_PATH variable in the project environment

    The CSL_INSTALL_PATH doen't exist, do I have to create it like you do with the PDK_INSTALL_PATH on the 3rd step ?

    Do I have to point it on "..\pdk_C6678_1_0_0_17\packages\ti\csl" ?

    2.

    On the 5th and 6th steps I got an error message: " 'cppi_device.c' already exists." and " 'qmss_device.c' already exists."

    I think I don't have to link this files if there are already included.

    3.

    I added a ".cfg" file to have a RTC config otherwise I can't includes like " #include <ti/...> .

    Is that the good way to proceed?

    4.

    If I remove:

    extern Qmss_GlobalConfigParams  qmssGblCfgParams;
    extern Cppi_GlobalConfigParams  cppiGblCfgParams;

    I can't use the cppi_init(), qmss_init()... functions

    5.

    On the 2nd step, your said that I have to add the PDK_INSTALL_PATH variable but you named it CSL_INSTALL_PATH.

    I kept the PDK_INSTALL_PATH name. Is that ok ?

    Thank you again !

    Regards,

    Michaël.

  • Michael,

    If you use the updated project that I had attached, I had already completed most of the steps for you. You would still have to make sure that you completed steps 1-4 that I listed to make sure that you are pointing to the correct paths for your MCSDK/PDK installation, but after that, you should have just been able to build the project.

    In response to your questions:

    1. If you are using the new project that I attached, the CSL_INSTALL_PATH variable should have already existed in the project environment. You should only have had to update it, so please double check that it does not exist. If it does not exist, then you will need to add this variable. For the path, you only want o make it point to <path_to_pdk>\pdk_C6678_1_0_0_17\packages. Do not not add the \ti\csl! This will cause problems with the build because the #include paths in the files already have the "ti\csl\" paths included, so if you add \ti\csl to the variable path then it will cause build problems.
    2. You only need to complete steps 1-4. The cppi_device.c and qmss_device.c should have already been included in the new project. You should actually be able to see these files if you click the '+' button next to the project in the project explorer in CCS.
    3. You can include a .cfg file, but this should not be required. There is already a linker command file (hyperlink_test.cmd). Unfortunately, I forgot to update this for you, so the one in the project that I previously attached still has the C6670 memory map. I am attaching an updated version of the project with a new linker command file for the C6678 device. You can exclude the C6670 version from the build since you do not need it. 8814.Hyperlink_EVM_example_LE.zip
    4. Please do not remove these extern declarations--they are required for the project to work properly. In my previous post I was simply stating that I had removed the definitions from mnavigator_functions.c (they are now in cppi_device.c and qmss_device.c). You should not need to make any changes here.
    5. Sorry for the typo. Please keep the name PDK_INSTALL_PATH. 


  • Hi Derek,

    Thank your for your reply ! It helped me to build fine the project.

    So now the project build fine but I still got 4 warnings:

    Description    Resource    Path    Location    Type
    #10321-D creating group "NEARDP_DATA" to co-locate output sections    Hyperlink_EVM_example_LE             C/C++ Problem
    #10349-D creating output section ".fardata" without a SECTIONS    Hyperlink_EVM_example_LE             C/C++ Problem
    #10349-D creating output section ".neardata" without a SECTIONS    Hyperlink_EVM_example_LE             C/C++ Problem
    #10349-D creating output section ".rodata" without a SECTIONS    Hyperlink_EVM_example_LE             C/C++ Problem

    Anyway, I built it on two different computers after commenting the iloopmodeon and I ran it on two different EVMC6678 board.

    The software seemed to run in an infinite loop and I check what was the matter with the debugger and I saw that was the line:

    mcm_reg_wr((volatile int *)(btcfg_cfg_base+0x38),0x83e70b13); //KICK0 key setup

    wich cause the infinite loop.

    Do you think my warnings are the cause of the infinite loop ?

  • Hi John/Derek,

    I am trying to use the example posted on this thread on two C6614. These are similar to C6678s. 

    I want to use QMSS/PKTDMA to transfer packets between two devices over hyperlink.

    How did you resolve following warnings:

    <Linking>
    warning #10349-D: creating output section ".fardata" without a SECTIONS
    specification. For additional information on this section, please see the
    'C6000 EABI Migration' guide at
    http://processors.wiki.ti.com/index.php/C6000_EABI:C6000_EABI_Migration#C6x_
    EABI_Sections
    warning #10349-D: creating output section ".neardata" without a SECTIONS
    specification. For additional information on this section, please see the
    'C6000 EABI Migration' guide at
    http://processors.wiki.ti.com/index.php/C6000_EABI:C6000_EABI_Migration#C6x_
    EABI_Sections
    warning #10349-D: creating output section ".rodata" without a SECTIONS
    specification. For additional information on this section, please see the
    'C6000 EABI Migration' guide at
    http://processors.wiki.ti.com/index.php/C6000_EABI:C6000_EABI_Migration#C6x_
    EABI_Sections
    warning #10321-D: creating group "NEARDP_DATA" to co-locate output sections
    .neardata and .rodata with .bss
    'Finished building target: Hyperlink_EVM_example_LE.out'

    Regards,

    Honey Sarao