1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- From 80e7256b69b395f91738b44dc259c9fa4d15dda3 Mon Sep 17 00:00:00 2001
- From: Martin Sperl <kernel@martin.sperl.org>
- Date: Fri, 22 Apr 2016 17:17:13 +0000
- Subject: [PATCH] Revert "bcm2835-dma: Fix up convert to DMA pool"
- This reverts commit ec2e48fda22c57cab56a4332d1a095f91c919493.
- ---
- drivers/dma/bcm2835-dma.c | 36 ++++++++++--------------------------
- 1 file changed, 10 insertions(+), 26 deletions(-)
- --- a/drivers/dma/bcm2835-dma.c
- +++ b/drivers/dma/bcm2835-dma.c
- @@ -488,17 +488,6 @@ static struct dma_async_tx_descriptor *b
- c->cyclic = true;
-
- return vchan_tx_prep(&c->vc, &d->vd, flags);
- -error_cb:
- - i--;
- - for (; i >= 0; i--) {
- - struct bcm2835_cb_entry *cb_entry = &d->cb_list[i];
- -
- - dma_pool_free(c->cb_pool, cb_entry->cb, cb_entry->paddr);
- - }
- -
- - kfree(d->cb_list);
- - kfree(d);
- - return NULL;
- }
-
- static struct dma_async_tx_descriptor *
- @@ -545,7 +534,6 @@ bcm2835_dma_prep_slave_sg(struct dma_cha
- if (!d)
- return NULL;
-
- - d->c = c;
- d->dir = direction;
-
- if (c->ch >= 8) /* LITE channel */
- @@ -565,21 +553,15 @@ bcm2835_dma_prep_slave_sg(struct dma_cha
- d->frames += len / max_size + 1;
- }
-
- - d->cb_list = kcalloc(d->frames, sizeof(*d->cb_list), GFP_KERNEL);
- - if (!d->cb_list) {
- + /* Allocate memory for control blocks */
- + d->control_block_size = d->frames * sizeof(struct bcm2835_dma_cb);
- + d->control_block_base = dma_zalloc_coherent(chan->device->dev,
- + d->control_block_size, &d->control_block_base_phys,
- + GFP_NOWAIT);
- + if (!d->control_block_base) {
- kfree(d);
- return NULL;
- }
- - /* Allocate memory for control blocks */
- - for (i = 0; i < d->frames; i++) {
- - struct bcm2835_cb_entry *cb_entry = &d->cb_list[i];
- -
- - cb_entry->cb = dma_pool_zalloc(c->cb_pool, GFP_ATOMIC,
- - &cb_entry->paddr);
- -
- - if (!cb_entry->cb)
- - goto error_cb;
- - }
-
- /*
- * Iterate over all SG entries, create a control block
- @@ -596,7 +578,7 @@ bcm2835_dma_prep_slave_sg(struct dma_cha
-
- for (j = 0; j < len; j += max_size) {
- struct bcm2835_dma_cb *control_block =
- - d->cb_list[i + split_cnt].cb;
- + &d->control_block_base[i + split_cnt];
-
- /* Setup addresses */
- if (d->dir == DMA_DEV_TO_MEM) {
- @@ -638,7 +620,9 @@ bcm2835_dma_prep_slave_sg(struct dma_cha
- if (i < sg_len - 1 || len - j > max_size) {
- /* Next block is the next frame. */
- control_block->next =
- - d->cb_list[i + split_cnt + 1].paddr;
- + d->control_block_base_phys +
- + sizeof(struct bcm2835_dma_cb) *
- + (i + split_cnt + 1);
- } else {
- /* Next block is empty. */
- control_block->next = 0;
|