mirror of https://gitee.com/openkylin/linux.git
dmaengine: rcar-dmac: group slave configuration
Group slave address and transfer size in own structs for source and destination. This is in preparation for hooking up the dma-mapping API to the slave addresses. Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
parent
24ed5d2c07
commit
c5ed08e988
|
@ -117,15 +117,23 @@ struct rcar_dmac_desc_page {
|
|||
((PAGE_SIZE - offsetof(struct rcar_dmac_desc_page, chunks)) / \
|
||||
sizeof(struct rcar_dmac_xfer_chunk))
|
||||
|
||||
/*
|
||||
* struct rcar_dmac_chan_slave - Slave configuration
|
||||
* @slave_addr: slave memory address
|
||||
* @xfer_size: size (in bytes) of hardware transfers
|
||||
*/
|
||||
struct rcar_dmac_chan_slave {
|
||||
phys_addr_t slave_addr;
|
||||
unsigned int xfer_size;
|
||||
};
|
||||
|
||||
/*
|
||||
* struct rcar_dmac_chan - R-Car Gen2 DMA Controller Channel
|
||||
* @chan: base DMA channel object
|
||||
* @iomem: channel I/O memory base
|
||||
* @index: index of this channel in the controller
|
||||
* @src_xfer_size: size (in bytes) of hardware transfers on the source side
|
||||
* @dst_xfer_size: size (in bytes) of hardware transfers on the destination side
|
||||
* @src_slave_addr: slave source memory address
|
||||
* @dst_slave_addr: slave destination memory address
|
||||
* @src: slave memory address and size on the source side
|
||||
* @dst: slave memory address and size on the destination side
|
||||
* @mid_rid: hardware MID/RID for the DMA client using this channel
|
||||
* @lock: protects the channel CHCR register and the desc members
|
||||
* @desc.free: list of free descriptors
|
||||
|
@ -142,10 +150,8 @@ struct rcar_dmac_chan {
|
|||
void __iomem *iomem;
|
||||
unsigned int index;
|
||||
|
||||
unsigned int src_xfer_size;
|
||||
unsigned int dst_xfer_size;
|
||||
dma_addr_t src_slave_addr;
|
||||
dma_addr_t dst_slave_addr;
|
||||
struct rcar_dmac_chan_slave src;
|
||||
struct rcar_dmac_chan_slave dst;
|
||||
int mid_rid;
|
||||
|
||||
spinlock_t lock;
|
||||
|
@ -793,13 +799,13 @@ static void rcar_dmac_chan_configure_desc(struct rcar_dmac_chan *chan,
|
|||
case DMA_DEV_TO_MEM:
|
||||
chcr = RCAR_DMACHCR_DM_INC | RCAR_DMACHCR_SM_FIXED
|
||||
| RCAR_DMACHCR_RS_DMARS;
|
||||
xfer_size = chan->src_xfer_size;
|
||||
xfer_size = chan->src.xfer_size;
|
||||
break;
|
||||
|
||||
case DMA_MEM_TO_DEV:
|
||||
chcr = RCAR_DMACHCR_DM_FIXED | RCAR_DMACHCR_SM_INC
|
||||
| RCAR_DMACHCR_RS_DMARS;
|
||||
xfer_size = chan->dst_xfer_size;
|
||||
xfer_size = chan->dst.xfer_size;
|
||||
break;
|
||||
|
||||
case DMA_MEM_TO_MEM:
|
||||
|
@ -1040,7 +1046,7 @@ rcar_dmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
|
|||
}
|
||||
|
||||
dev_addr = dir == DMA_DEV_TO_MEM
|
||||
? rchan->src_slave_addr : rchan->dst_slave_addr;
|
||||
? rchan->src.slave_addr : rchan->dst.slave_addr;
|
||||
return rcar_dmac_chan_prep_sg(rchan, sgl, sg_len, dev_addr,
|
||||
dir, flags, false);
|
||||
}
|
||||
|
@ -1095,7 +1101,7 @@ rcar_dmac_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr,
|
|||
}
|
||||
|
||||
dev_addr = dir == DMA_DEV_TO_MEM
|
||||
? rchan->src_slave_addr : rchan->dst_slave_addr;
|
||||
? rchan->src.slave_addr : rchan->dst.slave_addr;
|
||||
desc = rcar_dmac_chan_prep_sg(rchan, sgl, sg_len, dev_addr,
|
||||
dir, flags, true);
|
||||
|
||||
|
@ -1112,10 +1118,10 @@ static int rcar_dmac_device_config(struct dma_chan *chan,
|
|||
* We could lock this, but you shouldn't be configuring the
|
||||
* channel, while using it...
|
||||
*/
|
||||
rchan->src_slave_addr = cfg->src_addr;
|
||||
rchan->dst_slave_addr = cfg->dst_addr;
|
||||
rchan->src_xfer_size = cfg->src_addr_width;
|
||||
rchan->dst_xfer_size = cfg->dst_addr_width;
|
||||
rchan->src.slave_addr = cfg->src_addr;
|
||||
rchan->dst.slave_addr = cfg->dst_addr;
|
||||
rchan->src.xfer_size = cfg->src_addr_width;
|
||||
rchan->dst.xfer_size = cfg->dst_addr_width;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue