Skip to content

Commit 43398d2

Browse files
Marcin Makalrgirdwo
authored andcommitted
dma: fixed writebacks when operating via L1 on dma buffer in L2 mem
Signed-off-by: Marcin Maka <marcin.maka@linux.intel.com>
1 parent 83ed9f8 commit 43398d2

File tree

7 files changed

+19
-19
lines changed

7 files changed

+19
-19
lines changed

src/audio/buffer.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ struct comp_buffer *buffer_new(struct sof_ipc_buffer *desc)
7373
return NULL;
7474
}
7575

76-
bzero(buffer->addr, desc->size);
7776
memcpy(&buffer->ipc_buffer, desc, sizeof(*desc));
7877

7978
buffer->size = buffer->alloc_size = desc->size;
@@ -84,6 +83,8 @@ struct comp_buffer *buffer_new(struct sof_ipc_buffer *desc)
8483
buffer->avail = 0;
8584
buffer->connected = 0;
8685

86+
buffer_zero(buffer);
87+
8788
spinlock_init(&buffer->lock);
8889

8990
return buffer;

src/audio/dai.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,7 @@ static void dai_dma_cb(void *data, uint32_t type, struct dma_sg_elem *next)
106106
struct comp_buffer, sink_list);
107107

108108
/* fill buffer with silence */
109-
bzero(dma_buffer->addr, dma_buffer->size);
110-
111-
/* writeback buffer contents from cache */
112-
dcache_writeback_region(dma_buffer->addr,
113-
dma_buffer->size);
109+
buffer_zero(dma_buffer);
114110
}
115111
return;
116112
}
@@ -453,6 +449,7 @@ static int dai_prepare(struct comp_dev *dev)
453449
struct comp_buffer, source_list);
454450
}
455451

452+
/* TODO: not sure what this wb is for? */
456453
/* write back buffer contents from cache */
457454
dcache_writeback_region(dma_buffer->addr, dma_buffer->size);
458455

src/drivers/dw-dma.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ static int dw_dma_set_config(struct dma *dma, int channel,
591591

592592
/* initialise descriptors */
593593
bzero(p->chan[channel].lli, sizeof(struct dw_lli2) *
594-
p->chan[channel].desc_count);
594+
p->chan[channel].desc_count);
595595
lli_desc = lli_desc_head = p->chan[channel].lli;
596596
lli_desc_tail = p->chan[channel].lli + p->chan[channel].desc_count - 1;
597597

src/include/sof/audio/buffer.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@ void comp_update_buffer_produce(struct comp_buffer *buffer, uint32_t bytes);
8585
/* called by a component after consuming data from this buffer */
8686
void comp_update_buffer_consume(struct comp_buffer *buffer, uint32_t bytes);
8787

88+
static inline void buffer_zero(struct comp_buffer *buffer)
89+
{
90+
tracev_buffer("BZr");
91+
92+
bzero(buffer->addr, buffer->size);
93+
if (buffer->ipc_buffer.caps & SOF_MEM_CAPS_DMA)
94+
dcache_writeback_region(buffer->addr, buffer->size);
95+
}
96+
8897
/* get the max number of bytes that can be copied between sink and source */
8998
static inline int comp_buffer_can_copy_bytes(struct comp_buffer *source,
9099
struct comp_buffer *sink, uint32_t bytes)
@@ -122,7 +131,7 @@ static inline void buffer_reset_pos(struct comp_buffer *buffer)
122131
buffer->avail = 0;
123132

124133
/* clear buffer contents */
125-
bzero(buffer->addr, buffer->size);
134+
buffer_zero(buffer);
126135
}
127136

128137
/* 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)
139148
return 0;
140149
}
141150

142-
static inline void buffer_zero(struct comp_buffer *buffer)
143-
{
144-
tracev_buffer("BZr");
145-
146-
bzero(buffer->addr, buffer->size);
147-
}
148-
149151
#endif

src/platform/baytrail/platform.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ int platform_init(struct sof *sof)
308308
trace_point(TRACE_BOOT_PLATFORM_MBOX);
309309

310310
/* clear mailbox for early trace and debug */
311-
bzero((void*)MAILBOX_BASE, IPC_MAX_MAILBOX_BYTES);
311+
bzero((void *)MAILBOX_BASE, IPC_MAX_MAILBOX_BYTES);
312312

313313
trace_point(TRACE_BOOT_PLATFORM_SHIM);
314314

src/platform/haswell/platform.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ int platform_init(struct sof *sof)
247247
trace_point(TRACE_BOOT_PLATFORM_MBOX);
248248

249249
/* clear mailbox for early trace and debug */
250-
bzero((void*)MAILBOX_BASE, IPC_MAX_MAILBOX_BYTES);
250+
bzero((void *)MAILBOX_BASE, IPC_MAX_MAILBOX_BYTES);
251251

252252
trace_point(TRACE_BOOT_PLATFORM_SHIM);
253253
platform_init_shim();

test/cmocka/src/lib/lib/bzero.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ static void test_lib_lib_bzero_char_zero_middle_beg(void **state)
158158

159159
(void) state;
160160

161-
bzero(test_data->str+test_data_zero_middle->beg,
162-
test_data_zero_middle->len);
161+
bzero(test_data->str + test_data_zero_middle->beg,
162+
test_data_zero_middle->len);
163163
assert_int_equal(check_test_arr(default_char),
164164
test_data_zero_middle->beg);
165165
}

0 commit comments

Comments
 (0)