Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 211bfef7 authored by Jingchang Lu's avatar Jingchang Lu Committed by Vinod Koul
Browse files

dmaengine: fsl-edma: fix dmamux index calculating error

parent f892afb0
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -248,11 +248,12 @@ static void fsl_edma_chan_mux(struct fsl_edma_chan *fsl_chan,
			unsigned int slot, bool enable)
			unsigned int slot, bool enable)
{
{
	u32 ch = fsl_chan->vchan.chan.chan_id;
	u32 ch = fsl_chan->vchan.chan.chan_id;
	void __iomem *muxaddr = fsl_chan->edma->muxbase[ch / DMAMUX_NR];
	void __iomem *muxaddr;
	unsigned chans_per_mux, ch_off;
	unsigned chans_per_mux, ch_off;


	chans_per_mux = fsl_chan->edma->n_chans / DMAMUX_NR;
	chans_per_mux = fsl_chan->edma->n_chans / DMAMUX_NR;
	ch_off = fsl_chan->vchan.chan.chan_id % chans_per_mux;
	ch_off = fsl_chan->vchan.chan.chan_id % chans_per_mux;
	muxaddr = fsl_chan->edma->muxbase[ch / chans_per_mux];


	if (enable)
	if (enable)
		edma_writeb(fsl_chan->edma,
		edma_writeb(fsl_chan->edma,
@@ -724,6 +725,7 @@ static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec,
{
{
	struct fsl_edma_engine *fsl_edma = ofdma->of_dma_data;
	struct fsl_edma_engine *fsl_edma = ofdma->of_dma_data;
	struct dma_chan *chan, *_chan;
	struct dma_chan *chan, *_chan;
	unsigned long chans_per_mux = fsl_edma->n_chans / DMAMUX_NR;


	if (dma_spec->args_count != 2)
	if (dma_spec->args_count != 2)
		return NULL;
		return NULL;
@@ -732,7 +734,7 @@ static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec,
	list_for_each_entry_safe(chan, _chan, &fsl_edma->dma_dev.channels, device_node) {
	list_for_each_entry_safe(chan, _chan, &fsl_edma->dma_dev.channels, device_node) {
		if (chan->client_count)
		if (chan->client_count)
			continue;
			continue;
		if ((chan->chan_id / DMAMUX_NR) == dma_spec->args[0]) {
		if ((chan->chan_id / chans_per_mux) == dma_spec->args[0]) {
			chan = dma_get_slave_channel(chan);
			chan = dma_get_slave_channel(chan);
			if (chan) {
			if (chan) {
				chan->device->privatecnt++;
				chan->device->privatecnt++;