Skip to content

Commit fdcd868

Browse files
committed
drivers: dma: edmav3: Update Drivers for non-aon sources.
Updating the dma_mcux_edma driver to support transfers that do not use Always-On channels to transfer data yet expected hardware to continue to move a buffer of data. E.G. tests/drivers/dma/loop_transfer tests. Signed-off-by: Emilio Benavente <[email protected]>
1 parent 2a9435a commit fdcd868

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

drivers/dma/dma_mcux_edma.c

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,10 +372,18 @@ static int dma_mcux_edma_configure(const struct device *dev, uint32_t channel,
372372
}
373373
}
374374

375-
data->transfer_settings.source_data_size = config->source_data_size;
376-
data->transfer_settings.dest_data_size = config->dest_data_size;
375+
#if (defined(FSL_FEATURE_DMAMUX_HAS_A_ON) && FSL_FEATURE_DMAMUX_HAS_A_ON)
377376
data->transfer_settings.source_burst_length = config->source_burst_length;
378377
data->transfer_settings.dest_burst_length = config->dest_burst_length;
378+
#else
379+
data->transfer_settings.source_burst_length = block_config->block_size;
380+
data->transfer_settings.dest_burst_length = block_config->block_size;
381+
config->source_burst_length = block_config->block_size;
382+
config->dest_burst_length = block_config->block_size;
383+
#endif /* FSL_FEATURE_DMAMUX_HAS_A_ON */
384+
385+
data->transfer_settings.source_data_size = config->source_data_size;
386+
data->transfer_settings.dest_data_size = config->dest_data_size;
379387
data->transfer_settings.direction = config->channel_direction;
380388
data->transfer_settings.transfer_type = transfer_type;
381389
data->transfer_settings.valid = true;
@@ -571,6 +579,9 @@ static int dma_mcux_edma_start(const struct device *dev, uint32_t channel)
571579
#endif
572580
data->busy = true;
573581
EDMA_StartTransfer(DEV_EDMA_HANDLE(dev, channel));
582+
#if defined(CONFIG_DMA_MCUX_EDMA_V3)
583+
EDMA_TriggerChannelStart(DEV_BASE(dev), channel);
584+
#endif
574585
return 0;
575586
}
576587

@@ -600,9 +611,14 @@ static int dma_mcux_edma_suspend(const struct device *dev, uint32_t channel)
600611
{
601612
struct call_back *data = DEV_CHANNEL_DATA(dev, channel);
602613

614+
if (data->transferConfig.majorLoopCounts < 2) {
615+
return -ENOSYS;
616+
}
617+
603618
if (!data->busy) {
604619
return -EINVAL;
605620
}
621+
606622
EDMA_StopTransfer(DEV_EDMA_HANDLE(dev, channel));
607623
return 0;
608624
}
@@ -614,6 +630,7 @@ static int dma_mcux_edma_resume(const struct device *dev, uint32_t channel)
614630
if (!data->busy) {
615631
return -EINVAL;
616632
}
633+
617634
EDMA_StartTransfer(DEV_EDMA_HANDLE(dev, channel));
618635
return 0;
619636
}

0 commit comments

Comments
 (0)