dma: fixed writebacks when operating via L1 on dma buffer in L2 mem

Signed-off-by: Marcin Maka <marcin.maka@linux.intel.com>
This commit is contained in:
Marcin Maka 2018-08-23 15:25:22 +02:00 committed by Liam Girdwood
parent 83ed9f8139
commit 43398d22db
7 changed files with 19 additions and 19 deletions

View File

@ -73,7 +73,6 @@ struct comp_buffer *buffer_new(struct sof_ipc_buffer *desc)
return NULL;
}
bzero(buffer->addr, desc->size);
memcpy(&buffer->ipc_buffer, desc, sizeof(*desc));
buffer->size = buffer->alloc_size = desc->size;
@ -84,6 +83,8 @@ struct comp_buffer *buffer_new(struct sof_ipc_buffer *desc)
buffer->avail = 0;
buffer->connected = 0;
buffer_zero(buffer);
spinlock_init(&buffer->lock);
return buffer;

View File

@ -106,11 +106,7 @@ static void dai_dma_cb(void *data, uint32_t type, struct dma_sg_elem *next)
struct comp_buffer, sink_list);
/* fill buffer with silence */
bzero(dma_buffer->addr, dma_buffer->size);
/* writeback buffer contents from cache */
dcache_writeback_region(dma_buffer->addr,
dma_buffer->size);
buffer_zero(dma_buffer);
}
return;
}
@ -453,6 +449,7 @@ static int dai_prepare(struct comp_dev *dev)
struct comp_buffer, source_list);
}
/* TODO: not sure what this wb is for? */
/* write back buffer contents from cache */
dcache_writeback_region(dma_buffer->addr, dma_buffer->size);

View File

@ -85,6 +85,15 @@ void comp_update_buffer_produce(struct comp_buffer *buffer, uint32_t bytes);
/* called by a component after consuming data from this buffer */
void comp_update_buffer_consume(struct comp_buffer *buffer, uint32_t bytes);
static inline void buffer_zero(struct comp_buffer *buffer)
{
tracev_buffer("BZr");
bzero(buffer->addr, buffer->size);
if (buffer->ipc_buffer.caps & SOF_MEM_CAPS_DMA)
dcache_writeback_region(buffer->addr, buffer->size);
}
/* get the max number of bytes that can be copied between sink and source */
static inline int comp_buffer_can_copy_bytes(struct comp_buffer *source,
struct comp_buffer *sink, uint32_t bytes)
@ -122,7 +131,7 @@ static inline void buffer_reset_pos(struct comp_buffer *buffer)
buffer->avail = 0;
/* clear buffer contents */
bzero(buffer->addr, buffer->size);
buffer_zero(buffer);
}
/* set the runtime size of a buffer in bytes and improve the data cache */
@ -139,11 +148,4 @@ static inline int buffer_set_size(struct comp_buffer *buffer, uint32_t size)
return 0;
}
static inline void buffer_zero(struct comp_buffer *buffer)
{
tracev_buffer("BZr");
bzero(buffer->addr, buffer->size);
}
#endif

View File

@ -308,7 +308,7 @@ int platform_init(struct sof *sof)
trace_point(TRACE_BOOT_PLATFORM_MBOX);
/* clear mailbox for early trace and debug */
bzero((void*)MAILBOX_BASE, IPC_MAX_MAILBOX_BYTES);
bzero((void *)MAILBOX_BASE, IPC_MAX_MAILBOX_BYTES);
trace_point(TRACE_BOOT_PLATFORM_SHIM);

View File

@ -247,7 +247,7 @@ int platform_init(struct sof *sof)
trace_point(TRACE_BOOT_PLATFORM_MBOX);
/* clear mailbox for early trace and debug */
bzero((void*)MAILBOX_BASE, IPC_MAX_MAILBOX_BYTES);
bzero((void *)MAILBOX_BASE, IPC_MAX_MAILBOX_BYTES);
trace_point(TRACE_BOOT_PLATFORM_SHIM);
platform_init_shim();

View File

@ -158,7 +158,7 @@ static void test_lib_lib_bzero_char_zero_middle_beg(void **state)
(void) state;
bzero(test_data->str+test_data_zero_middle->beg,
bzero(test_data->str + test_data_zero_middle->beg,
test_data_zero_middle->len);
assert_int_equal(check_test_arr(default_char),
test_data_zero_middle->beg);