This set of patches proposes a new API for dma_get() that procures a DMAC based on the requested copy capability and flags indicating shared/exclusive access. It also updates the existing user of dma_get() to use the new API based on the specific usage. The API uses the number of channels draning in each DMAC to balance the load between the platform DMAC's for users requesting shared access privilege. This provides a primitive level of QoS and prevents overloading any DMAC.
The platform DMAC definitions have also been updated to include information about copy capabilities supported and the type of DMA.
Test Results: 1. Minnowboard Turbot w 5651: Sanity test Score 10/11. Failed Simultaneous playback & capture feature test. This issue is unrelated to this patch.
2. Up Squared Board w Hifiberry DAC+: Sanity Test Score: 6/11 Failed Capture feature tests as the hifiberry doesnt support capture but passed all other feature tests.
Kernel: https://github.com/thesofproject/linux branch: topic/dev SOF Repo: https://github.com/thesofproject/linux/sof branch:master SOFT: https://github.com/thesofproject/linux/sof branch: master
v2 changes: 1. dma_get() consolidated for all platforms 2. dmac definitions include copy capability 3. Added some helper api's to retreive platform DMAC info
v3 changes: 1. Not RFC anymore. First set of real patches with new API. 2. Added type of DMA to platform DMAC definitions 3. Updated atomic arithmetic calls
Ranjani Sridharan (6): platform: dma: move dmac initialization dma: update platform DMAC definitions with capabilities dma: introduce parameter to store the number of channels draining dma: Introduce new API for dma_get() dma: update dma users with the new API dma: trace: dma_copy_new() does not need DMAC ID anymore
src/arch/xtensa/Makefile.am | 1 + src/audio/dai.c | 5 +- src/audio/host.c | 18 +++-- src/drivers/dw-dma.c | 11 +++ src/drivers/hda-dma.c | 8 ++ src/host/common_test.c | 2 +- src/include/sof/dma.h | 29 ++++++- src/ipc/apl-ipc.c | 6 +- src/ipc/byt-ipc.c | 7 +- src/ipc/cnl-ipc.c | 6 +- src/ipc/dma-copy.c | 7 +- src/ipc/hsw-ipc.c | 7 +- src/lib/Makefile.am | 11 +++ src/lib/dma-trace.c | 2 +- src/lib/dma.c | 80 +++++++++++++++++++ src/platform/apollolake/dma.c | 28 +++++-- .../apollolake/include/platform/dma.h | 5 ++ .../apollolake/include/platform/platform.h | 3 - src/platform/apollolake/platform.c | 22 +---- src/platform/baytrail/dma.c | 33 ++++++-- src/platform/baytrail/include/platform/dma.h | 9 +++ .../baytrail/include/platform/platform.h | 3 - src/platform/baytrail/platform.c | 23 +----- src/platform/cannonlake/dma.c | 28 +++++-- .../cannonlake/include/platform/dma.h | 6 ++ .../cannonlake/include/platform/platform.h | 3 - src/platform/cannonlake/platform.c | 23 +----- src/platform/haswell/dma.c | 38 ++++++--- src/platform/haswell/include/platform/dma.h | 5 ++ .../haswell/include/platform/platform.h | 3 - src/platform/haswell/platform.c | 21 +---- 31 files changed, 312 insertions(+), 141 deletions(-) create mode 100644 src/lib/dma.c