Skip to content

Commit 41d091e

Browse files
LaurentiuM1234mmahadevan108
authored andcommitted
drivers: edma_rev2: support MUX register in MP space
On some EDMA versions, the channel MUX register may be placed inside the MP region (instead of the TCD region). Add support for this. EDMA versions with this quirk will signal it via the `EDMA_HAS_MP_MUX_FLAG` flag. Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
1 parent cb1e268 commit 41d091e

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ static uint32_t EDMA_GetChannelRegBase(edma_config_t *cfg, int channel, uint32_t
5353
{
5454
uint32_t index = EDMA_REG_INDEX(reg);
5555

56-
if (reg == EDMA_MP_CH_GRPRI) {
56+
if (reg == EDMA_MP_CH_GRPRI || reg == EDMA_MP_CH_MUX) {
5757
return cfg->regmap + cfg->registerLayout[index] + channel * 0x4;
5858
} else {
5959
return EDMA_GetChannelBase(cfg, channel) + cfg->registerLayout[index];
@@ -118,6 +118,8 @@ uint32_t EDMA_MPRegRead(edma_config_t *cfg, uint32_t reg)
118118

119119
status_t EDMA_SetChannelMux(edma_config_t *cfg, int channel, uint32_t mux)
120120
{
121+
uint32_t muxReg;
122+
121123
if (channel >= cfg->channels) {
122124
return kStatus_InvalidArgument;
123125
}
@@ -126,11 +128,17 @@ status_t EDMA_SetChannelMux(edma_config_t *cfg, int channel, uint32_t mux)
126128
return kStatus_EDMA_InvalidConfiguration;
127129
}
128130

129-
if (EDMA_ChannelRegRead(cfg, channel, EDMA_TCD_CH_MUX) != 0 && mux != 0) {
131+
if (cfg->flags & EDMA_HAS_MP_MUX_FLAG) {
132+
muxReg = EDMA_MP_CH_MUX;
133+
} else {
134+
muxReg = EDMA_TCD_CH_MUX;
135+
}
136+
137+
if (EDMA_ChannelRegRead(cfg, channel, muxReg) != 0 && mux != 0) {
130138
return kStatus_Busy;
131139
}
132140

133-
EDMA_ChannelRegWrite(cfg, channel, EDMA_TCD_CH_MUX, mux);
141+
EDMA_ChannelRegWrite(cfg, channel, muxReg, mux);
134142

135143
return kStatus_Success;
136144
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ extern "C" {
1616
/* flag macros */
1717
#define EDMA_HAS_CH_MUX_FLAG EDMA_BIT(0)
1818
#define EDMA_ALLOWS_128B_TRANSFER_FLAG EDMA_BIT(1)
19+
#define EDMA_HAS_MP_MUX_FLAG EDMA_BIT(2)
1920

2021
/* internal utility macros */
2122
#define EDMA_BIT(x) (1 << (x))
@@ -58,6 +59,7 @@ extern "C" {
5859
#define EDMA_MP_HRS_HIGH_INDEX 24
5960
#define EDMA_TCD_CH_MUX_INDEX 25
6061
#define EDMA_TCD_CH_MATTR_INDEX 26
62+
#define EDMA_MP_CH_MUX_INDEX 27
6163

6264
/* utility macros - for external and internal usage */
6365
#define EDMA_HAS_MUX(cfg) ((cfg)->flags & EDMA_HAS_CH_MUX_FLAG)
@@ -115,6 +117,7 @@ extern "C" {
115117
#define EDMA_MP_INT_HIGH EDMA_REGISTER_MAKE(EDMA_MP_INT_HIGH_INDEX, kEDMA_RegAccess32)
116118
#define EDMA_MP_HRS_LOW EDMA_REGISTER_MAKE(EDMA_MP_HRS_LOW_INDEX, kEDMA_RegAccess32)
117119
#define EDMA_MP_HRS_HIGH EDMA_REGISTER_MAKE(EDMA_MP_HRS_HIGH_INDEX, kEDMA_RegAccess32)
120+
#define EDMA_MP_CH_MUX EDMA_REGISTER_MAKE(EDMA_MP_CH_MUX_INDEX, kEDMA_RegAccess32)
118121
/* non-common TCD-related registers */
119122
#define EDMA_TCD_CH_MUX EDMA_REGISTER_MAKE(EDMA_TCD_CH_MUX_INDEX, kEDMA_RegAccess32)
120123
#define EDMA_TCD_CH_MATTR EDMA_REGISTER_MAKE(EDMA_TCD_CH_MATTR_INDEX, kEDMA_RegAccess16)

0 commit comments

Comments
 (0)