@@ -272,6 +272,45 @@ static void dma_mcux_edma_multi_channels_irq_handler(const struct device *dev, u
272
272
}
273
273
#endif
274
274
275
+ #if defined(FSL_FEATURE_SOC_DMAMUX_COUNT ) && FSL_FEATURE_SOC_DMAMUX_COUNT
276
+ static void edma_configure_dmamux (const struct device * dev , uint32_t channel ,
277
+ struct dma_config * config , edma_transfer_type_t transfer_type )
278
+ {
279
+ uint32_t slot = config -> dma_slot ;
280
+ uint8_t dmamux_idx , dmamux_channel ;
281
+
282
+ dmamux_idx = DEV_DMAMUX_IDX (dev , channel );
283
+ dmamux_channel = DEV_DMAMUX_CHANNEL (dev , channel );
284
+
285
+ #if DT_INST_PROP (0 , nxp_a_on )
286
+ if (config -> source_handshake || config -> dest_handshake ||
287
+ transfer_type == kEDMA_MemoryToMemory ) {
288
+ /*software trigger make the channel always on*/
289
+ LOG_DBG ("ALWAYS ON" );
290
+ DMAMUX_EnableAlwaysOn (DEV_DMAMUX_BASE (dev , dmamux_idx ), dmamux_channel , true);
291
+ } else {
292
+ DMAMUX_SetSource (DEV_DMAMUX_BASE (dev , dmamux_idx ), dmamux_channel , slot );
293
+ }
294
+ #else
295
+ DMAMUX_SetSource (DEV_DMAMUX_BASE (dev , dmamux_idx ), dmamux_channel , slot );
296
+ #endif /* nxp_a_on */
297
+
298
+ /* dam_imx_rt_set_channel_priority(dev, channel, config); */
299
+ DMAMUX_EnableChannel (DEV_DMAMUX_BASE (dev , dmamux_idx ), dmamux_channel );
300
+ }
301
+
302
+ static void edma_log_dmamux (const struct device * dev , uint32_t channel )
303
+ {
304
+ uint8_t dmamux_idx = DEV_DMAMUX_IDX (dev , channel );
305
+ uint8_t dmamux_channel = DEV_DMAMUX_CHANNEL (dev , channel );
306
+
307
+ LOG_DBG ("DMAMUX CHCFG 0x%x" , DEV_DMAMUX_BASE (dev , dmamux_idx )-> CHCFG [dmamux_channel ]);
308
+ }
309
+ #else
310
+ #define edma_configure_dmamux (...)
311
+ #define edma_log_dmamux (...)
312
+ #endif /* FSL_FEATURE_SOC_DMA_MUX_COUNT */
313
+
275
314
static int dma_mcux_edma_configure_sg_loop (const struct device * dev ,
276
315
uint32_t channel ,
277
316
struct dma_config * config ,
@@ -438,7 +477,6 @@ static int dma_mcux_edma_configure_basic(const struct device *dev,
438
477
return ret ;
439
478
}
440
479
441
-
442
480
/* Configure a channel */
443
481
static int dma_mcux_edma_configure (const struct device * dev , uint32_t channel ,
444
482
struct dma_config * config )
@@ -468,12 +506,6 @@ static int dma_mcux_edma_configure(const struct device *dev, uint32_t channel,
468
506
return - EINVAL ;
469
507
}
470
508
471
- #if defined(FSL_FEATURE_SOC_DMAMUX_COUNT ) && FSL_FEATURE_SOC_DMAMUX_COUNT
472
- uint8_t dmamux_idx , dmamux_channel ;
473
-
474
- dmamux_idx = DEV_DMAMUX_IDX (dev , channel );
475
- dmamux_channel = DEV_DMAMUX_CHANNEL (dev , channel );
476
- #endif
477
509
data -> transfer_settings .valid = false;
478
510
479
511
switch (config -> channel_direction ) {
@@ -523,25 +555,7 @@ static int dma_mcux_edma_configure(const struct device *dev, uint32_t channel,
523
555
/* Lock and page in the channel configuration */
524
556
key = irq_lock ();
525
557
526
- #if defined(FSL_FEATURE_SOC_DMAMUX_COUNT ) && FSL_FEATURE_SOC_DMAMUX_COUNT
527
-
528
- #if DT_INST_PROP (0 , nxp_a_on )
529
- if (config -> source_handshake || config -> dest_handshake ||
530
- transfer_type == kEDMA_MemoryToMemory ) {
531
- /*software trigger make the channel always on*/
532
- LOG_DBG ("ALWAYS ON" );
533
- DMAMUX_EnableAlwaysOn (DEV_DMAMUX_BASE (dev , dmamux_idx ), dmamux_channel , true);
534
- } else {
535
- DMAMUX_SetSource (DEV_DMAMUX_BASE (dev , dmamux_idx ), dmamux_channel , slot );
536
- }
537
- #else
538
- DMAMUX_SetSource (DEV_DMAMUX_BASE (dev , dmamux_idx ), dmamux_channel , slot );
539
- #endif
540
-
541
- /* dam_imx_rt_set_channel_priority(dev, channel, config); */
542
- DMAMUX_EnableChannel (DEV_DMAMUX_BASE (dev , dmamux_idx ), dmamux_channel );
543
-
544
- #endif
558
+ edma_configure_dmamux (dev , channel , config , transfer_type );
545
559
546
560
if (data -> busy ) {
547
561
EDMA_AbortTransfer (p_handle );
@@ -603,12 +617,7 @@ static int dma_mcux_edma_start(const struct device *dev, uint32_t channel)
603
617
604
618
LOG_DBG ("START TRANSFER" );
605
619
606
- #if defined(FSL_FEATURE_SOC_DMAMUX_COUNT ) && FSL_FEATURE_SOC_DMAMUX_COUNT
607
- uint8_t dmamux_idx = DEV_DMAMUX_IDX (dev , channel );
608
- uint8_t dmamux_channel = DEV_DMAMUX_CHANNEL (dev , channel );
609
-
610
- LOG_DBG ("DMAMUX CHCFG 0x%x" , DEV_DMAMUX_BASE (dev , dmamux_idx )-> CHCFG [dmamux_channel ]);
611
- #endif
620
+ edma_log_dmamux (dev , channel );
612
621
613
622
#if !defined(CONFIG_DMA_MCUX_EDMA_V3 ) && !defined(CONFIG_DMA_MCUX_EDMA_V4 ) \
614
623
&& !defined(CONFIG_DMA_MCUX_EDMA_V5 )
@@ -857,12 +866,7 @@ static int dma_mcux_edma_get_status(const struct device *dev, uint32_t channel,
857
866
}
858
867
status -> dir = DEV_CHANNEL_DATA (dev , channel )-> transfer_settings .direction ;
859
868
860
- #if defined(FSL_FEATURE_SOC_DMAMUX_COUNT ) && FSL_FEATURE_SOC_DMAMUX_COUNT
861
- uint8_t dmamux_idx = DEV_DMAMUX_IDX (dev , channel );
862
- uint8_t dmamux_channel = DEV_DMAMUX_CHANNEL (dev , channel );
863
-
864
- LOG_DBG ("DMAMUX CHCFG 0x%x" , DEV_DMAMUX_BASE (dev , dmamux_idx )-> CHCFG [dmamux_channel ]);
865
- #endif
869
+ edma_log_dmamux (dev , channel );
866
870
867
871
#if defined(CONFIG_DMA_MCUX_EDMA_V3 ) || defined(CONFIG_DMA_MCUX_EDMA_V4 )
868
872
LOG_DBG ("DMA MP_CSR 0x%x" , DEV_BASE (dev )-> MP_CSR );
0 commit comments