MLK-11259-1: dmaengine: imx-sdma: support dual fifo for DEV_TO_DEV
As SSI has dual fifo, add src_dualfifo and dst_dualfifo in imx_dma_data to support dual fifo in DMA_DEV_TO_DEV. Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com> (cherry picked from commit cfde1308f170166a0099ca39ee8733895f9626f0)
This commit is contained in:
committed by
Octavian Purdila
parent
ef1f8c6189
commit
536907cd2f
@ -174,6 +174,8 @@
|
||||
#define SDMA_WATERMARK_LEVEL_SPDIF BIT(10)
|
||||
#define SDMA_WATERMARK_LEVEL_SP BIT(11)
|
||||
#define SDMA_WATERMARK_LEVEL_DP BIT(12)
|
||||
#define SDMA_WATERMARK_LEVEL_SD BIT(13)
|
||||
#define SDMA_WATERMARK_LEVEL_DD BIT(14)
|
||||
#define SDMA_WATERMARK_LEVEL_HWML (0xFF << 16)
|
||||
#define SDMA_WATERMARK_LEVEL_LWE BIT(28)
|
||||
#define SDMA_WATERMARK_LEVEL_HWE BIT(29)
|
||||
@ -333,6 +335,8 @@ struct sdma_channel {
|
||||
unsigned int chn_real_count;
|
||||
struct tasklet_struct tasklet;
|
||||
struct imx_dma_data data;
|
||||
bool src_dualfifo;
|
||||
bool dst_dualfifo;
|
||||
};
|
||||
|
||||
#define IMX_DMA_SG_LOOP BIT(0)
|
||||
@ -1038,6 +1042,11 @@ static void sdma_set_watermarklevel_for_p2p(struct sdma_channel *sdmac)
|
||||
sdmac->watermark_level |= SDMA_WATERMARK_LEVEL_DP;
|
||||
|
||||
sdmac->watermark_level |= SDMA_WATERMARK_LEVEL_CONT;
|
||||
|
||||
if (sdmac->src_dualfifo)
|
||||
sdmac->watermark_level |= SDMA_WATERMARK_LEVEL_SD;
|
||||
if (sdmac->dst_dualfifo)
|
||||
sdmac->watermark_level |= SDMA_WATERMARK_LEVEL_DD;
|
||||
}
|
||||
|
||||
static int sdma_config_channel(struct dma_chan *chan)
|
||||
@ -1183,6 +1192,8 @@ static int sdma_alloc_chan_resources(struct dma_chan *chan)
|
||||
sdmac->peripheral_type = data->peripheral_type;
|
||||
sdmac->event_id0 = data->dma_request;
|
||||
sdmac->event_id1 = data->dma_request2;
|
||||
sdmac->src_dualfifo = data->src_dualfifo;
|
||||
sdmac->dst_dualfifo = data->dst_dualfifo;
|
||||
|
||||
ret = clk_enable(sdmac->sdma->clk_ipg);
|
||||
if (ret)
|
||||
@ -1879,17 +1890,11 @@ static struct dma_chan *sdma_xlate(struct of_phandle_args *dma_spec,
|
||||
if (dma_spec->args_count != 3)
|
||||
return NULL;
|
||||
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
data.dma_request = dma_spec->args[0];
|
||||
data.peripheral_type = dma_spec->args[1];
|
||||
data.priority = dma_spec->args[2];
|
||||
/*
|
||||
* init dma_request2 to zero, which is not used by the dts.
|
||||
* For P2P, dma_request2 is init from dma_request_channel(),
|
||||
* chan->private will point to the imx_dma_data, and in
|
||||
* device_alloc_chan_resources(), imx_dma_data.dma_request2 will
|
||||
* be set to sdmac->event_id1.
|
||||
*/
|
||||
data.dma_request2 = 0;
|
||||
|
||||
return dma_request_channel(mask, sdma_filter_fn, &data);
|
||||
}
|
||||
|
||||
@ -56,6 +56,8 @@ struct imx_dma_data {
|
||||
int dma_request2; /* secondary DMA request line */
|
||||
enum sdma_peripheral_type peripheral_type;
|
||||
int priority;
|
||||
bool src_dualfifo;
|
||||
bool dst_dualfifo;
|
||||
};
|
||||
|
||||
static inline int imx_dma_is_ipu(struct dma_chan *chan)
|
||||
|
||||
Reference in New Issue
Block a user