Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: edma: Add edma_assign_channel_eventq() to move channel to a give queue

In some cases it is desired to move a channel to a specific event queue.
Such a use case is audio, where it is preferred that it is served with
highest priority compared to other DMA clients.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Acked-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>

authored by

Peter Ujfalusi and committed by
Vinod Koul
eb3fe7de 85a70762

+30
+28
arch/arm/common/edma.c
··· 1414 1414 } 1415 1415 EXPORT_SYMBOL(edma_clear_event); 1416 1416 1417 + /* 1418 + * edma_assign_channel_eventq - move given channel to desired eventq 1419 + * Arguments: 1420 + * channel - channel number 1421 + * eventq_no - queue to move the channel 1422 + * 1423 + * Can be used to move a channel to a selected event queue. 1424 + */ 1425 + void edma_assign_channel_eventq(unsigned channel, enum dma_event_q eventq_no) 1426 + { 1427 + unsigned ctlr; 1428 + 1429 + ctlr = EDMA_CTLR(channel); 1430 + channel = EDMA_CHAN_SLOT(channel); 1431 + 1432 + if (channel >= edma_cc[ctlr]->num_channels) 1433 + return; 1434 + 1435 + /* default to low priority queue */ 1436 + if (eventq_no == EVENTQ_DEFAULT) 1437 + eventq_no = edma_cc[ctlr]->default_queue; 1438 + if (eventq_no >= edma_cc[ctlr]->num_tc) 1439 + return; 1440 + 1441 + map_dmach_queue(ctlr, channel, eventq_no); 1442 + } 1443 + EXPORT_SYMBOL(edma_assign_channel_eventq); 1444 + 1417 1445 static int edma_setup_from_hw(struct device *dev, struct edma_soc_info *pdata, 1418 1446 struct edma *edma_cc) 1419 1447 {
+2
include/linux/platform_data/edma.h
··· 150 150 void edma_pause(unsigned channel); 151 151 void edma_resume(unsigned channel); 152 152 153 + void edma_assign_channel_eventq(unsigned channel, enum dma_event_q eventq_no); 154 + 153 155 struct edma_rsv_info { 154 156 155 157 const s16 (*rsv_chans)[2];