mirror of
https://github.com/torvalds/linux.git
synced 2024-12-11 13:41:55 +00:00
dmaengine: pl330: Remove useless xfer_cb indirection
The xfer_cb callback of the pl330_req struct is always set to the same function. This adds an unnecessary step of indirection. Instead just call the callback function directly. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
parent
be025329fd
commit
6079d38ca2
@ -351,10 +351,6 @@ struct pl330_req {
|
|||||||
enum dma_transfer_direction rqtype;
|
enum dma_transfer_direction rqtype;
|
||||||
/* Index of peripheral for the xfer. */
|
/* Index of peripheral for the xfer. */
|
||||||
unsigned peri:5;
|
unsigned peri:5;
|
||||||
/* Unique token for this xfer, set by the client. */
|
|
||||||
void *token;
|
|
||||||
/* Callback to be called after xfer. */
|
|
||||||
void (*xfer_cb)(void *token, enum pl330_op_err err);
|
|
||||||
/* If NULL, req will be done at last set parameters. */
|
/* If NULL, req will be done at last set parameters. */
|
||||||
struct pl330_reqcfg *cfg;
|
struct pl330_reqcfg *cfg;
|
||||||
/* Pointer to first xfer in the request. */
|
/* Pointer to first xfer in the request. */
|
||||||
@ -551,12 +547,6 @@ struct dma_pl330_desc {
|
|||||||
struct dma_pl330_chan *pchan;
|
struct dma_pl330_chan *pchan;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void _callback(struct pl330_req *r, enum pl330_op_err err)
|
|
||||||
{
|
|
||||||
if (r && r->xfer_cb)
|
|
||||||
r->xfer_cb(r->token, err);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool _queue_empty(struct pl330_thread *thrd)
|
static inline bool _queue_empty(struct pl330_thread *thrd)
|
||||||
{
|
{
|
||||||
return (IS_FREE(&thrd->req[0]) && IS_FREE(&thrd->req[1]))
|
return (IS_FREE(&thrd->req[0]) && IS_FREE(&thrd->req[1]))
|
||||||
@ -1544,6 +1534,25 @@ xfer_exit:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dma_pl330_rqcb(struct pl330_req *req, enum pl330_op_err err)
|
||||||
|
{
|
||||||
|
struct dma_pl330_desc *desc = container_of(req, struct dma_pl330_desc, req);
|
||||||
|
struct dma_pl330_chan *pch = desc->pchan;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
/* If desc aborted */
|
||||||
|
if (!pch)
|
||||||
|
return;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&pch->lock, flags);
|
||||||
|
|
||||||
|
desc->status = DONE;
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&pch->lock, flags);
|
||||||
|
|
||||||
|
tasklet_schedule(&pch->task);
|
||||||
|
}
|
||||||
|
|
||||||
static void pl330_dotask(unsigned long data)
|
static void pl330_dotask(unsigned long data)
|
||||||
{
|
{
|
||||||
struct pl330_dmac *pl330 = (struct pl330_dmac *) data;
|
struct pl330_dmac *pl330 = (struct pl330_dmac *) data;
|
||||||
@ -1585,10 +1594,8 @@ static void pl330_dotask(unsigned long data)
|
|||||||
err = PL330_ERR_ABORT;
|
err = PL330_ERR_ABORT;
|
||||||
|
|
||||||
spin_unlock_irqrestore(&pl330->lock, flags);
|
spin_unlock_irqrestore(&pl330->lock, flags);
|
||||||
|
dma_pl330_rqcb(thrd->req[1 - thrd->lstenq].r, err);
|
||||||
_callback(thrd->req[1 - thrd->lstenq].r, err);
|
dma_pl330_rqcb(thrd->req[thrd->lstenq].r, err);
|
||||||
_callback(thrd->req[thrd->lstenq].r, err);
|
|
||||||
|
|
||||||
spin_lock_irqsave(&pl330->lock, flags);
|
spin_lock_irqsave(&pl330->lock, flags);
|
||||||
|
|
||||||
thrd->req[0].r = NULL;
|
thrd->req[0].r = NULL;
|
||||||
@ -1695,7 +1702,7 @@ static int pl330_update(const struct pl330_info *pi)
|
|||||||
list_del(&rqdone->rqd);
|
list_del(&rqdone->rqd);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&pl330->lock, flags);
|
spin_unlock_irqrestore(&pl330->lock, flags);
|
||||||
_callback(rqdone, PL330_ERR_NONE);
|
dma_pl330_rqcb(rqdone, PL330_ERR_NONE);
|
||||||
spin_lock_irqsave(&pl330->lock, flags);
|
spin_lock_irqsave(&pl330->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1852,8 +1859,8 @@ static void pl330_release_channel(void *ch_id)
|
|||||||
|
|
||||||
_stop(thrd);
|
_stop(thrd);
|
||||||
|
|
||||||
_callback(thrd->req[1 - thrd->lstenq].r, PL330_ERR_ABORT);
|
dma_pl330_rqcb(thrd->req[1 - thrd->lstenq].r, PL330_ERR_ABORT);
|
||||||
_callback(thrd->req[thrd->lstenq].r, PL330_ERR_ABORT);
|
dma_pl330_rqcb(thrd->req[thrd->lstenq].r, PL330_ERR_ABORT);
|
||||||
|
|
||||||
pl330 = thrd->dmac;
|
pl330 = thrd->dmac;
|
||||||
|
|
||||||
@ -2207,25 +2214,6 @@ static void pl330_tasklet(unsigned long data)
|
|||||||
spin_unlock_irqrestore(&pch->lock, flags);
|
spin_unlock_irqrestore(&pch->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dma_pl330_rqcb(void *token, enum pl330_op_err err)
|
|
||||||
{
|
|
||||||
struct dma_pl330_desc *desc = token;
|
|
||||||
struct dma_pl330_chan *pch = desc->pchan;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
/* If desc aborted */
|
|
||||||
if (!pch)
|
|
||||||
return;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&pch->lock, flags);
|
|
||||||
|
|
||||||
desc->status = DONE;
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&pch->lock, flags);
|
|
||||||
|
|
||||||
tasklet_schedule(&pch->task);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool pl330_filter(struct dma_chan *chan, void *param)
|
bool pl330_filter(struct dma_chan *chan, void *param)
|
||||||
{
|
{
|
||||||
u8 *peri_id;
|
u8 *peri_id;
|
||||||
@ -2417,12 +2405,10 @@ static dma_cookie_t pl330_tx_submit(struct dma_async_tx_descriptor *tx)
|
|||||||
static inline void _init_desc(struct dma_pl330_desc *desc)
|
static inline void _init_desc(struct dma_pl330_desc *desc)
|
||||||
{
|
{
|
||||||
desc->req.x = &desc->px;
|
desc->req.x = &desc->px;
|
||||||
desc->req.token = desc;
|
|
||||||
desc->rqcfg.swap = SWAP_NO;
|
desc->rqcfg.swap = SWAP_NO;
|
||||||
desc->rqcfg.scctl = CCTRL0;
|
desc->rqcfg.scctl = CCTRL0;
|
||||||
desc->rqcfg.dcctl = CCTRL0;
|
desc->rqcfg.dcctl = CCTRL0;
|
||||||
desc->req.cfg = &desc->rqcfg;
|
desc->req.cfg = &desc->rqcfg;
|
||||||
desc->req.xfer_cb = dma_pl330_rqcb;
|
|
||||||
desc->txd.tx_submit = pl330_tx_submit;
|
desc->txd.tx_submit = pl330_tx_submit;
|
||||||
|
|
||||||
INIT_LIST_HEAD(&desc->node);
|
INIT_LIST_HEAD(&desc->node);
|
||||||
|
Loading…
Reference in New Issue
Block a user