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.

AM625: Use of DMSS Thread IDs

Part Number: AM625

A 16-bit "THREAD_ID" field appears in multiple block copy DMA (BCDMA) registers within the DMSS. In SPRUIV7 – MAY 2022, those typically are described as "Thread ID: This field contains the (up-to) 16-bit value which will be output on the strm_o_thread_id output during all transactions for this channel." However, I have been unable to find any explanatory text about what thread ID value should be used.

Please explain the use of these thread IDs. Specifically:

  1. Can any 16-bit value be used, or are specific ranges of IDs necessary for particular types of BCDMA transfers? Or, is it just an arbitrary tag value, for example, to link receive and transfer channels?
  2. Do thread IDs need to match in the corresponding transmit and receive registers, e.g. BCDMA_0_RCHAN_THREAD_j and  BCDMA_0_TCHAN_THREAD_j, for a given channel?
  3. After a transfer with a given thread ID has completed, can that ID be reused on any subsequent transfer? In other words, does a given thread ID have any lasting importance after its associated transfer has been completed?
  • Hello ,

    Thank you for the query.

    Let me check internally regarding the implementation and comeback to you with the inputs i receive on the use case.

    Please expect a delay in reply.

    Regards,

    Sreenivasa

  • Hello ,

    Please refer below inputs 

    For block copy channels this value does not need to be set and the register field should not exist.

    For PKTDMA channels and split TX/RX channels in the BCDMA this value will need to be set to whichever
    endpoint the channel is being paired to from the thread map.
    i.e. an RX channel for CPSW will use a thread value in the range starting at 0x4600. A TX channel talking
    to CPSW will use 0x4600 | 0x8000 to indicate a destination thread.

    Thread ID is set per channel so the BCDMA_0_RCHAN_THREAD_j needs to be set to the expected endpoint for that channel.
    The thread ID is persistent as long as that channel is active. It does not need to be modified transfer to transfer.

    Regards,

    Sreenivasa

  • Thanks for the information. I have not been able to find a numerical thread map table in the AM62x TRM. So, please point me to that table in SPRUIV7 or other document, or provide it here.

    For my application, I need to receive data from the CSI interface, so I believe I will need a transmit thread ID for CSI and a receive thread ID for the BCDMA receive channel. Is that correct? If so, please provide at least the thread IDs needed to receive CSI data via BCDMA.

  • Hello ,

    Thank you for the note. Let me verify and update you.

    Regards,

    Sreenivasa

  • Grant,

    That is correct.

    The thread map is not yet included in the TRM, but you can find it below:

    You will need to pair a CSI source thread with a BCDMA destination thread. Offsets should be 0x4700 and (0xA000+RX Channel number) respectively.

    Thanks,

    Chris

  • Thanks, Chris. To verify that I understand the thread mapping, please comment on the thread IDs for the following example.

    I wish to receive data on the first BCDMA receive channel that's output on the PSI-L bus from the first CSI channel . However, the first BCDMA receive channel for the AM625 is numbered 54, because it follows 32 block-copy channels and 22 transmit channels. Please provide the thread IDs for my example. Here are the possibilities I am trying to sort through:

    • The source (transmit) thread ID for CSI is (0x4700 + 0) = 0x4700?
    • The peer (receive) thread ID for BCDM is 0 for BCDMA receive channel 0? Or is it the BCDMA channel number of 54?
    • Or, is the BCDMA thread ID based on the BCDMA Threads value of 0x2000, that is (0x2000 + 0) = 0x2000? Or is it (0x2000 + 54) = 0x1036?

    Also, I'm unclear where the value of  "0xA000" in your reply above comes from: please clarify.

  • Grant,

    The source thread for CSI is correct. For BCDMA thread paring it is the RX channel number, not the total channel number.

    The thread number can be used as is for a source thread, but for a destination thread it needs to be offset with 0x8000.

    CSI Source = 0x4700+0. BCDMA Dest = 0x2000 (thread) |0x8000 (dest offset)  + 0 (RX Chan #) = 0xA000.

    Thanks,

    Chris