[IOAT]: ioatdma needs to to play nice in a multi-dma-client world
Now that the DMA engine has a multi-client interface, fix the ioatdma driver to play along. At the same time, remove a couple of unnecessary reads and writes. Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
97a1ad431b
commit
e422397634
@@ -191,17 +191,12 @@ static int ioat_dma_alloc_chan_resources(struct dma_chan *chan)
|
|||||||
int i;
|
int i;
|
||||||
LIST_HEAD(tmp_list);
|
LIST_HEAD(tmp_list);
|
||||||
|
|
||||||
/*
|
/* have we already been set up? */
|
||||||
* In-use bit automatically set by reading chanctrl
|
if (!list_empty(&ioat_chan->free_desc))
|
||||||
* If 0, we got it, if 1, someone else did
|
return INITIAL_IOAT_DESC_COUNT;
|
||||||
*/
|
|
||||||
chanctrl = readw(ioat_chan->reg_base + IOAT_CHANCTRL_OFFSET);
|
|
||||||
if (chanctrl & IOAT_CHANCTRL_CHANNEL_IN_USE)
|
|
||||||
return -EBUSY;
|
|
||||||
|
|
||||||
/* Setup register to interrupt and write completion status on error */
|
/* Setup register to interrupt and write completion status on error */
|
||||||
chanctrl = IOAT_CHANCTRL_CHANNEL_IN_USE |
|
chanctrl = IOAT_CHANCTRL_ERR_INT_EN |
|
||||||
IOAT_CHANCTRL_ERR_INT_EN |
|
|
||||||
IOAT_CHANCTRL_ANY_ERR_ABORT_EN |
|
IOAT_CHANCTRL_ANY_ERR_ABORT_EN |
|
||||||
IOAT_CHANCTRL_ERR_COMPLETION_EN;
|
IOAT_CHANCTRL_ERR_COMPLETION_EN;
|
||||||
writew(chanctrl, ioat_chan->reg_base + IOAT_CHANCTRL_OFFSET);
|
writew(chanctrl, ioat_chan->reg_base + IOAT_CHANCTRL_OFFSET);
|
||||||
@@ -282,11 +277,6 @@ static void ioat_dma_free_chan_resources(struct dma_chan *chan)
|
|||||||
in_use_descs - 1);
|
in_use_descs - 1);
|
||||||
|
|
||||||
ioat_chan->last_completion = ioat_chan->completion_addr = 0;
|
ioat_chan->last_completion = ioat_chan->completion_addr = 0;
|
||||||
|
|
||||||
/* Tell hw the chan is free */
|
|
||||||
chanctrl = readw(ioat_chan->reg_base + IOAT_CHANCTRL_OFFSET);
|
|
||||||
chanctrl &= ~IOAT_CHANCTRL_CHANNEL_IN_USE;
|
|
||||||
writew(chanctrl, ioat_chan->reg_base + IOAT_CHANCTRL_OFFSET);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct dma_async_tx_descriptor *
|
static struct dma_async_tx_descriptor *
|
||||||
|
Reference in New Issue
Block a user