Hard Processor System Technical Reference Manual: Agilex™ 5 SoCs

ID 814346
Date 4/07/2025
Public
Document Table of Contents

5.2.6.2. Programming Flow for Linked-List-Based Multi-Block Transfer

  1. The software reads the DMAC channel enable register (DMAC_CHENREG) to select an available (unused) channel.
  2. The software programs the CHx_CFG2 register with appropriate values for the DMA transfer. The SRC_MLTBLK_TYPE and/or DST_MLTBLK_TYPE bits must be set to 2’b11.
  3. The software programs the base address of the first linked list item and the master interface on which the linked list item is available in the CHx_LLP register.
  4. The software creates one or more linked list items in system memory. The software can create the entire linked list item in advance or dynamically extend the linked list using the CHx_CTL.SHADOWREG_OR_LLI_LAST and CHx_CTL.LLI_Last fields of the LLI.
  5. The software enables the channel by writing 1 to the appropriate bit location in the DMAC_CHENREG register.
  6. DMAC initiates the DMA block transfer operation based on the settings for the block transfer. The block transfer might start immediately or after the hardware or software handshaking request, depending on the settings of the TT_FC field in the CHx_CFG2 register. DMAC copies the linked list contents to the registers used for executing the DMA block transfer (that is, the CHx_SAR and/or the CHx_DAR, CHx_BLOCK_TS, and CHx_CTL registers) and initiates the DMA block transfer.
  7. During the linked list fetch phase:
    1. If DMAC sees the CHx_CTL.SHADOWREG_OR_LLI_LAST bit of the fetched LLI as 1, it understands that the current block is the final block in the transfer and completes the DMA transfer operation at the end of current block transfer.
    2. If DMAC sees the CHx_CTL.SHADOWREG_OR_LLI_LAST bit of the fetched LLI as 0, it understands that there are one or more blocks to be transferred and goes to step 6.
    3. If DMAC sees the CHx_CTL.SHADOWREG_OR_LLI_LAST bit of the fetched LLI as 0, DMAC might generate the ShadowReg_Or_LLI_Invalid_ERR interrupt. DMAC waits till the software writes (any value) to CHx_BLK_TFR_RESUMEREQREG to indicate the valid LLI availability, before attempting another LLI read operation.