9.6. J784S4 UDMA Resources

9.6.1. Introduction

This chapter provides information of list of udma resources associated with various modules in SOC.

9.6.2. UDMA Channels and PSIL Threads

PSIL is the backbone for UDMA transfers, for every UDMA transfer we need to pair PSIL threads involved.

For example: In order transfer data from memory to UART TX, we need to pair PSIL thread corresponding to UART TX with UDMA Tx PSIL Thread.

Users needs to make sure enough channels are allocated to core according to their usecase:

For example: If user wants to use Main MCSPI0 instance from Main R50, since there 4 MCSPI Tx channels available and for each channel there is corresponding PSIL associated, we need to allocate atleast 4 UDMA Tx channels.

Please refer J784S4 DMA Device Descriptions.

9.6.2.2. MCU NAVSS UDMA PSIL Description

Module

Thread Offset

Thread Count

MCU_CPSW0_TX

0xF000

8

MCU_SAUL0_TX

0xF500

4

MCU_CPSW0_RX

0x7000

1

MCU_SAUL0_RX

0x7504

8

MCU_MCSPI0_CH0_TX

0xF100

1

MCU_MCSPI0_CH1_TX

0xF101

1

MCU_MCSPI0_CH2_TX

0xF102

1

MCU_MCSPI0_CH3_TX

0xF103

1

MCU_MCSPI1_CH0_TX

0xF200

1

MCU_MCSPI1_CH1_TX

0xF201

1

MCU_MCSPI1_CH2_TX

0xF202

1

MCU_MCSPI1_CH3_TX

0xF203

1

MCU_MCSPI2_CH0_TX

0xF204

1

MCU_MCSPI2_CH1_TX

0xF205

1

MCU_MCSPI2_CH2_TX

0xF206

1

MCU_MCSPI2_CH3_TX

0xF207

1

MCU_MCAN0_CH0_TX

0xF104

1

MCU_MCAN0_CH1_TX

0xF105

1

MCU_MCAN0_CH2_TX

0xF106

1

MCU_MCAN1_CH0_TX

0xF301

1

MCU_MCAN1_CH1_TX

0xF302

1

MCU_MCAN1_CH2_TX

0xF303

1

MCU_UART0_TX

0xF300

1

MCU_ADC0_CH0_RX

0x7400

1

MCU_ADC0_CH1_RX

0x7401

1

MCU_ADC1_CH0_RX

0x7402

1

MCU_ADC1_CH1_RX

0x7403

1

MCU_MCSPI0_CH0_RX

0x7100

1

MCU_MCSPI0_CH1_RX

0x7101

1

MCU_MCSPI0_CH2_RX

0x7102

1

MCU_MCSPI0_CH3_RX

0x7103

1

MCU_MCSPI1_CH0_RX

0x7200

1

MCU_MCSPI1_CH1_RX

0x7201

1

MCU_MCSPI1_CH2_RX

0x7202

1

MCU_MCSPI1_CH3_RX

0x7203

1

MCU_MCSPI2_CH0_RX

0x7204

1

MCU_MCSPI2_CH1_RX

0x7205

1

MCU_MCSPI2_CH2_RX

0x7206

1

MCU_MCSPI2_CH3_RX

0x7207

1

MCU_MCAN0_CH0_RX

0x7104

1

MCU_MCAN0_CH1_RX

0x7105

1

MCU_MCAN0_CH2_RX

0x7106

1

MCU_MCAN1_CH0_RX

0x7301

1

MCU_MCAN1_CH1_RX

0x7302

1

MCU_MCAN1_CH2_RX

0x7303

1

MCU_UART0_RX

0x7300

1

9.6.3. UDMA Rings

Each channel will have a ring associated to it submit descriptors to the channel, users needs to make sure they allocated both the channel and the associated ring to same core. Apart from associated rings there are GP(general purpose) rings, these rings can be used as compeletion and teardown compeletion rings. It is recommended to have a compeletion and teardown compeletion ring for each channel.

Please refer J784S4 Ring Accelerator Device Descriptions

9.6.4. UDMA Proxy

Proxy are helpful in submitting data to ring atomically when ring is not in TISCI_MSG_VALUE_RM_RING_MODE_RING, udma driver will allocate default proxy for each driver handle. It is recommended to allocate one proxy ring if the ring expected not to be used in TISCI_MSG_VALUE_RM_RING_MODE_RING.

Please refer J784S4 Proxy Device Descriptions

9.6.5. UDMA Event

There are 3 components involved in UDMA Interrupt Architecture: 1. Interrupt Aggregator Global Events 2. Interrupt Aggregator Virtual Interrupts 3. Interrupt Routers

9.6.5.1. Global Events

UDMA Interrupt Architecture involves 3 different components:

  1. Global Events

  2. Virtual Interrupts(VINTs)

  3. Interrupt Routers(IR)

DMA resources like channels, rings, ring monitors have OES(Output Event Steering) registers. Each OES register can be programmed with a global event. This global event can be a channel trigger event, which will trigger channel transfer or associated to an IA(Interrupt Aggregator). Each global event associated with an Interrupt Aggregator has corresponding register, in which user can program VINT and VINT bit number. When a resource tries to generate event, it will set the bit in VINT number programmed in global event register. Each VINT is a 64 bit register, i.e. each VINT can combine 64 global events and generate single interrupt to input line of IR. Interrupt Router is MUX which can route input event to any one of the output lines.

UDMA LLD allows user to program 7 different event types:

Master Event This is special event which reserves one Virtual Interrupt, which helps to club 64 different events and generate single interrupt core.

DMA Compeletion Event This is per compeletion ring event. This event will be generated after every job compeletion.

DMA Teardown Packet Event This is per teardown packet ring event. This event will be generated when channel teardown happens while dma processing descriptor.

TR Event This is per channel event. This will be used to generate intermediate data transfer events.

Ring Event This event will generated for every empty to non-empty transition of the ring.

Flow Error Event This is per udma instance event. This will be used to register an event for trapping an out of range flow ID received on a packet

Ring Monitor Event This is per ring monitor event.

Note

  1. It is recommended allocate 1 global-events per udma ring/channel to core through RM board config.

  2. Number of IR Output lines allocated recommended to be closure VINTs allocated to core.