Skip to content

Commit bdb366b

Browse files
LaurentiuM1234mmahadevan108
authored andcommitted
drivers: edma_rev2: support 64-bit TCD registers
On some EDMA versions, some TCD registers (e.g: SADDR, DADDR, etc...) have a LOW and a HIGH version, meaning the data they hold is 64-bit (instead of 32-bit). Add support for the following such registers: SADDR, DADDR, SLAST, DLAST. Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
1 parent 41d091e commit bdb366b

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

mcux/mcux-sdk/drivers/edma_rev2/fsl_edma_rev2.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,14 @@ status_t EDMA_ConfigureTransfer(edma_config_t *cfg, int channel,
250250
EDMA_ChannelRegWrite(cfg, channel, EDMA_TCD_BITER, EDMA_TCD_BITER_ELINKNO(biter));
251251
EDMA_ChannelRegWrite(cfg, channel, EDMA_TCD_NBYTES, EDMA_TCD_NBYTES_MLOFFNO(burstSize));
252252

253+
if (cfg->flags & EDMA_HAS_64BIT_TCD_FLAG) {
254+
/* EDMA version has 64-bit TCD but 64-bit addresses are not currently
255+
* supported by the API. Pad higher 32 bits with 0s.
256+
*/
257+
EDMA_ChannelRegWrite(cfg, channel, EDMA_TCD_SADDR_HIGH, 0x0);
258+
EDMA_ChannelRegWrite(cfg, channel, EDMA_TCD_DADDR_HIGH, 0x0);
259+
}
260+
253261
/* clean registers to make sure there's no leftover config */
254262
EDMA_ChannelRegWrite(cfg, channel, EDMA_TCD_CSR, 0);
255263

mcux/mcux-sdk/drivers/edma_rev2/fsl_edma_rev2.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ extern "C" {
1717
#define EDMA_HAS_CH_MUX_FLAG EDMA_BIT(0)
1818
#define EDMA_ALLOWS_128B_TRANSFER_FLAG EDMA_BIT(1)
1919
#define EDMA_HAS_MP_MUX_FLAG EDMA_BIT(2)
20+
#define EDMA_HAS_64BIT_TCD_FLAG EDMA_BIT(3)
2021

2122
/* internal utility macros */
2223
#define EDMA_BIT(x) (1 << (x))
@@ -60,6 +61,10 @@ extern "C" {
6061
#define EDMA_TCD_CH_MUX_INDEX 25
6162
#define EDMA_TCD_CH_MATTR_INDEX 26
6263
#define EDMA_MP_CH_MUX_INDEX 27
64+
#define EDMA_TCD_SADDR_HIGH_INDEX 28
65+
#define EDMA_TCD_DADDR_HIGH_INDEX 29
66+
#define EDMA_TCD_SLAST_SDA_HIGH_INDEX 30
67+
#define EDMA_TCD_DLAST_SGA_HIGH_INDEX 31
6368

6469
/* utility macros - for external and internal usage */
6570
#define EDMA_HAS_MUX(cfg) ((cfg)->flags & EDMA_HAS_CH_MUX_FLAG)
@@ -121,6 +126,10 @@ extern "C" {
121126
/* non-common TCD-related registers */
122127
#define EDMA_TCD_CH_MUX EDMA_REGISTER_MAKE(EDMA_TCD_CH_MUX_INDEX, kEDMA_RegAccess32)
123128
#define EDMA_TCD_CH_MATTR EDMA_REGISTER_MAKE(EDMA_TCD_CH_MATTR_INDEX, kEDMA_RegAccess16)
129+
#define EDMA_TCD_SADDR_HIGH EDMA_REGISTER_MAKE(EDMA_TCD_SADDR_HIGH_INDEX, kEDMA_RegAccess32)
130+
#define EDMA_TCD_DADDR_HIGH EDMA_REGISTER_MAKE(EDMA_TCD_DADDR_HIGH_INDEX, kEDMA_RegAccess32)
131+
#define EDMA_TCD_SLAST_SDA_HIGH EDMA_REGISTER_MAKE(EDMA_TCD_SLAST_SDA_HIGH_INDEX, kEDMA_RegAccess32)
132+
#define EDMA_TCD_DLAST_SGA_HIGH EDMA_REGISTER_MAKE(EDMA_TCD_DLAST_SGA_HIGH_INDEX, kEDMA_RegAccess32)
124133

125134
enum _edma_status {
126135
/* Passed configuration is invalid */

0 commit comments

Comments
 (0)