mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 00:21:32 +00:00
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)) / \
|
((PAGE_SIZE - offsetof(struct rcar_dmac_desc_page, chunks)) / \
|
||||||
sizeof(struct rcar_dmac_xfer_chunk))
|
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
|
* struct rcar_dmac_chan - R-Car Gen2 DMA Controller Channel
|
||||||
* @chan: base DMA channel object
|
* @chan: base DMA channel object
|
||||||
* @iomem: channel I/O memory base
|
* @iomem: channel I/O memory base
|
||||||
* @index: index of this channel in the controller
|
* @index: index of this channel in the controller
|
||||||
* @src_xfer_size: size (in bytes) of hardware transfers on the source side
|
* @src: slave memory address and size on the source side
|
||||||
* @dst_xfer_size: size (in bytes) of hardware transfers on the destination side
|
* @dst: slave memory address and size on the destination side
|
||||||
* @src_slave_addr: slave source memory address
|
|
||||||
* @dst_slave_addr: slave destination memory address
|
|
||||||
* @mid_rid: hardware MID/RID for the DMA client using this channel
|
* @mid_rid: hardware MID/RID for the DMA client using this channel
|
||||||
* @lock: protects the channel CHCR register and the desc members
|
* @lock: protects the channel CHCR register and the desc members
|
||||||
* @desc.free: list of free descriptors
|
* @desc.free: list of free descriptors
|
||||||
@ -142,10 +150,8 @@ struct rcar_dmac_chan {
|
|||||||
void __iomem *iomem;
|
void __iomem *iomem;
|
||||||
unsigned int index;
|
unsigned int index;
|
||||||
|
|
||||||
unsigned int src_xfer_size;
|
struct rcar_dmac_chan_slave src;
|
||||||
unsigned int dst_xfer_size;
|
struct rcar_dmac_chan_slave dst;
|
||||||
dma_addr_t src_slave_addr;
|
|
||||||
dma_addr_t dst_slave_addr;
|
|
||||||
int mid_rid;
|
int mid_rid;
|
||||||
|
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
@ -793,13 +799,13 @@ static void rcar_dmac_chan_configure_desc(struct rcar_dmac_chan *chan,
|
|||||||
case DMA_DEV_TO_MEM:
|
case DMA_DEV_TO_MEM:
|
||||||
chcr = RCAR_DMACHCR_DM_INC | RCAR_DMACHCR_SM_FIXED
|
chcr = RCAR_DMACHCR_DM_INC | RCAR_DMACHCR_SM_FIXED
|
||||||
| RCAR_DMACHCR_RS_DMARS;
|
| RCAR_DMACHCR_RS_DMARS;
|
||||||
xfer_size = chan->src_xfer_size;
|
xfer_size = chan->src.xfer_size;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DMA_MEM_TO_DEV:
|
case DMA_MEM_TO_DEV:
|
||||||
chcr = RCAR_DMACHCR_DM_FIXED | RCAR_DMACHCR_SM_INC
|
chcr = RCAR_DMACHCR_DM_FIXED | RCAR_DMACHCR_SM_INC
|
||||||
| RCAR_DMACHCR_RS_DMARS;
|
| RCAR_DMACHCR_RS_DMARS;
|
||||||
xfer_size = chan->dst_xfer_size;
|
xfer_size = chan->dst.xfer_size;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DMA_MEM_TO_MEM:
|
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
|
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,
|
return rcar_dmac_chan_prep_sg(rchan, sgl, sg_len, dev_addr,
|
||||||
dir, flags, false);
|
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
|
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,
|
desc = rcar_dmac_chan_prep_sg(rchan, sgl, sg_len, dev_addr,
|
||||||
dir, flags, true);
|
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
|
* We could lock this, but you shouldn't be configuring the
|
||||||
* channel, while using it...
|
* channel, while using it...
|
||||||
*/
|
*/
|
||||||
rchan->src_slave_addr = cfg->src_addr;
|
rchan->src.slave_addr = cfg->src_addr;
|
||||||
rchan->dst_slave_addr = cfg->dst_addr;
|
rchan->dst.slave_addr = cfg->dst_addr;
|
||||||
rchan->src_xfer_size = cfg->src_addr_width;
|
rchan->src.xfer_size = cfg->src_addr_width;
|
||||||
rchan->dst_xfer_size = cfg->dst_addr_width;
|
rchan->dst.xfer_size = cfg->dst_addr_width;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user