Commit 0665a4e9 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'dmaengine-fix-5.8-rc6' of...

Merge tag 'dmaengine-fix-5.8-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine into master

Pull dmaengine fixes from Vinod Koul:

 - update dmaengine tree location to kernel.org

 - dmatest fix for completing threads

 - driver fixes for k3dma, fsl-dma, idxd, ,tegra, and few other drivers

* tag 'dmaengine-fix-5.8-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine: (21 commits)
  dmaengine: ioat setting ioat timeout as module parameter
  dmaengine: fsl-edma: fix wrong tcd endianness for big-endian cpu
  dmaengine: dmatest: stop completed threads when running without set channel
  dmaengine: fsl-edma-common: correct DSIZE_32BYTE
  dmaengine: dw: Initialize channel before each transfer
  dmaengine: idxd: fix misc interrupt handler thread unmasking
  dmaengine: idxd: cleanup workqueue config after disabling
  dmaengine: tegra210-adma: Fix runtime PM imbalance on error
  dmaengine: mcf-edma: Fix NULL pointer exception in mcf_edma_tx_handler
  dmaengine: fsl-edma: Fix NULL pointer exception in fsl_edma_tx_handler
  dmaengine: fsl-edma: Add lockdep assert for exported function
  dmaengine: idxd: fix hw descriptor fields for delta record
  dmaengine: ti: k3-udma: add missing put_device() call in of_xudma_dev_get()
  dmaengine: sh: usb-dmac: set tx_result parameters
  dmaengine: ti: k3-udma: Fix delayed_work usage for tx drain workaround
  dmaengine: idxd: fix cdev locking for open and release
  dmaengine: imx-sdma: Fix: Remove 'always true' comparison
  MAINTAINERS: switch dmaengine tree to kernel.org
  dmaengine: ti: k3-udma: Fix the running channel handling in alloc_chan_resources
  dmaengine: ti: k3-udma: Fix cleanup code for alloc_chan_resources
  ...
parents 6cbba1f9 87730ccb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5112,7 +5112,7 @@ M: Vinod Koul <vkoul@kernel.org>
L:	dmaengine@vger.kernel.org
S:	Maintained
Q:	https://patchwork.kernel.org/project/linux-dmaengine/list/
T:	git git://git.infradead.org/users/vkoul/slave-dma.git
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git
F:	Documentation/devicetree/bindings/dma/
F:	Documentation/driver-api/dmaengine/
F:	drivers/dma/
+2 −0
Original line number Diff line number Diff line
@@ -1176,6 +1176,8 @@ static int dmatest_run_set(const char *val, const struct kernel_param *kp)
	} else if (dmatest_run) {
		if (!is_threaded_test_pending(info)) {
			pr_info("No channels configured, continue with any\n");
			if (!is_threaded_test_run(info))
				stop_threaded_test(info);
			add_threaded_test(info);
		}
		start_threaded_tests(info);
+0 −12
Original line number Diff line number Diff line
@@ -118,16 +118,11 @@ static void dwc_initialize(struct dw_dma_chan *dwc)
{
	struct dw_dma *dw = to_dw_dma(dwc->chan.device);

	if (test_bit(DW_DMA_IS_INITIALIZED, &dwc->flags))
		return;

	dw->initialize_chan(dwc);

	/* Enable interrupts */
	channel_set_bit(dw, MASK.XFER, dwc->mask);
	channel_set_bit(dw, MASK.ERROR, dwc->mask);

	set_bit(DW_DMA_IS_INITIALIZED, &dwc->flags);
}

/*----------------------------------------------------------------------*/
@@ -954,8 +949,6 @@ static void dwc_issue_pending(struct dma_chan *chan)

void do_dw_dma_off(struct dw_dma *dw)
{
	unsigned int i;

	dma_writel(dw, CFG, 0);

	channel_clear_bit(dw, MASK.XFER, dw->all_chan_mask);
@@ -966,9 +959,6 @@ void do_dw_dma_off(struct dw_dma *dw)

	while (dma_readl(dw, CFG) & DW_CFG_DMA_EN)
		cpu_relax();

	for (i = 0; i < dw->dma.chancnt; i++)
		clear_bit(DW_DMA_IS_INITIALIZED, &dw->chan[i].flags);
}

void do_dw_dma_on(struct dw_dma *dw)
@@ -1032,8 +1022,6 @@ static void dwc_free_chan_resources(struct dma_chan *chan)
	/* Clear custom channel configuration */
	memset(&dwc->dws, 0, sizeof(struct dw_dma_slave));

	clear_bit(DW_DMA_IS_INITIALIZED, &dwc->flags);

	/* Disable interrupts */
	channel_clear_bit(dw, MASK.XFER, dwc->mask);
	channel_clear_bit(dw, MASK.BLOCK, dwc->mask);
+16 −12
Original line number Diff line number Diff line
@@ -352,26 +352,28 @@ static void fsl_edma_set_tcd_regs(struct fsl_edma_chan *fsl_chan,
	/*
	 * TCD parameters are stored in struct fsl_edma_hw_tcd in little
	 * endian format. However, we need to load the TCD registers in
	 * big- or little-endian obeying the eDMA engine model endian.
	 * big- or little-endian obeying the eDMA engine model endian,
	 * and this is performed from specific edma_write functions
	 */
	edma_writew(edma, 0,  &regs->tcd[ch].csr);
	edma_writel(edma, le32_to_cpu(tcd->saddr), &regs->tcd[ch].saddr);
	edma_writel(edma, le32_to_cpu(tcd->daddr), &regs->tcd[ch].daddr);

	edma_writew(edma, le16_to_cpu(tcd->attr), &regs->tcd[ch].attr);
	edma_writew(edma, le16_to_cpu(tcd->soff), &regs->tcd[ch].soff);
	edma_writel(edma, (s32)tcd->saddr, &regs->tcd[ch].saddr);
	edma_writel(edma, (s32)tcd->daddr, &regs->tcd[ch].daddr);

	edma_writel(edma, le32_to_cpu(tcd->nbytes), &regs->tcd[ch].nbytes);
	edma_writel(edma, le32_to_cpu(tcd->slast), &regs->tcd[ch].slast);
	edma_writew(edma, (s16)tcd->attr, &regs->tcd[ch].attr);
	edma_writew(edma, tcd->soff, &regs->tcd[ch].soff);

	edma_writew(edma, le16_to_cpu(tcd->citer), &regs->tcd[ch].citer);
	edma_writew(edma, le16_to_cpu(tcd->biter), &regs->tcd[ch].biter);
	edma_writew(edma, le16_to_cpu(tcd->doff), &regs->tcd[ch].doff);
	edma_writel(edma, (s32)tcd->nbytes, &regs->tcd[ch].nbytes);
	edma_writel(edma, (s32)tcd->slast, &regs->tcd[ch].slast);

	edma_writel(edma, le32_to_cpu(tcd->dlast_sga),
	edma_writew(edma, (s16)tcd->citer, &regs->tcd[ch].citer);
	edma_writew(edma, (s16)tcd->biter, &regs->tcd[ch].biter);
	edma_writew(edma, (s16)tcd->doff, &regs->tcd[ch].doff);

	edma_writel(edma, (s32)tcd->dlast_sga,
			&regs->tcd[ch].dlast_sga);

	edma_writew(edma, le16_to_cpu(tcd->csr), &regs->tcd[ch].csr);
	edma_writew(edma, (s16)tcd->csr, &regs->tcd[ch].csr);
}

static inline
@@ -589,6 +591,8 @@ void fsl_edma_xfer_desc(struct fsl_edma_chan *fsl_chan)
{
	struct virt_dma_desc *vdesc;

	lockdep_assert_held(&fsl_chan->vchan.lock);

	vdesc = vchan_next_desc(&fsl_chan->vchan);
	if (!vdesc)
		return;
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@
#define EDMA_TCD_ATTR_DSIZE_16BIT	BIT(0)
#define EDMA_TCD_ATTR_DSIZE_32BIT	BIT(1)
#define EDMA_TCD_ATTR_DSIZE_64BIT	(BIT(0) | BIT(1))
#define EDMA_TCD_ATTR_DSIZE_32BYTE	(BIT(3) | BIT(0))
#define EDMA_TCD_ATTR_DSIZE_32BYTE	(BIT(2) | BIT(0))
#define EDMA_TCD_ATTR_SSIZE_8BIT	0
#define EDMA_TCD_ATTR_SSIZE_16BIT	(EDMA_TCD_ATTR_DSIZE_16BIT << 8)
#define EDMA_TCD_ATTR_SSIZE_32BIT	(EDMA_TCD_ATTR_DSIZE_32BIT << 8)
Loading