On 2017年12月17日 01:55, Liam Girdwood wrote:
On Sat, 2017-12-16 at 09:59 +0800, Keyon Jie wrote:
We should set src_msize and dest_msize for dma peripheral dev copy, for dai/ssp, they should be set to valid slot number, otherwise, the dma may copy in wrong burst size and data will run with wrong speed.
Signed-off-by: Keyon Jie yang.jie@linux.intel.com
src/audio/dai.c | 18 ++++++++++++++++++
This is specific only for DW-MDA engine so should be in dw-dma.c and not dai.c which is generic.
OK, can you propose how should I change in detail then?
Thanks, ~Keyon
Liam
1 file changed, 18 insertions(+)
diff --git a/src/audio/dai.c b/src/audio/dai.c index c50a274..e67e5cf 100644 --- a/src/audio/dai.c +++ b/src/audio/dai.c @@ -599,8 +599,26 @@ static int dai_position(struct comp_dev *dev, struct sof_ipc_stream_posn *posn) return 0; }
+/*
- use array to get msize for specific slot number setting.
- the relation between msize and slot_num should be
- 2 ^ msize = slot_num
- */
+static const uint32_t msize[] = {1, 2, 4, 8}; static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config) {
- struct dai_data *dd = comp_get_drvdata(dev);
- int i;
- /* set dma msize according to slot number */
- for (i = 0; i < ARRAY_SIZE(msize); i++) {
if (msize[i] == config->num_slots) {
dd->config.src_msize = i;
dd->config.dest_msize = i;
break;
}
- }
- /* calc frame bytes */ switch (config->sample_valid_bits) { case 16: