[PATCH v7] mtd: rawnand: sunxi: Add MDMA support
Boris Brezillon
boris.brezillon at collabora.com
Wed Oct 28 10:35:45 EDT 2020
On Mon, 12 Oct 2020 17:41:22 +0200 (CEST)
Manuel Dipolt <mdipolt at robart.cc> wrote:
> @@ -363,24 +364,34 @@ static int sunxi_nfc_dma_op_prepare(struct sunxi_nfc *nfc, const void *buf,
> if (!ret)
> return -ENOMEM;
>
> - dmad = dmaengine_prep_slave_sg(nfc->dmac, sg, 1, tdir, DMA_CTRL_ACK);
> - if (!dmad) {
> - ret = -EINVAL;
> - goto err_unmap_buf;
> + if (!nfc->caps->has_mdma) {
> + dmad = dmaengine_prep_slave_sg(nfc->dmac, sg, 1, tdir, DMA_CTRL_ACK);
> + if (!dmad) {
> + ret = -EINVAL;
> + goto err_unmap_buf;
> + }
> }
>
> writel(readl(nfc->regs + NFC_REG_CTL) | NFC_RAM_METHOD,
> nfc->regs + NFC_REG_CTL);
> writel(nchunks, nfc->regs + NFC_REG_SECTOR_NUM);
> writel(chunksize, nfc->regs + NFC_REG_CNT);
> - if (nfc->caps->extra_mbus_conf)
> +
> + if (nfc->caps->has_mdma) {
> + writel(readl(nfc->regs + NFC_REG_CTL) & ~NFC_DMA_TYPE_NORMAL,
> + nfc->regs + NFC_REG_CTL);
> writel(chunksize * nchunks, nfc->regs + NFC_REG_MDMA_CNT);
> + writel(sg_dma_address(sg), nfc->regs + NFC_REG_MDMA_ADDR);
> + } else {
> + writel(readl(nfc->regs + NFC_REG_CTL) | NFC_DMA_TYPE_NORMAL,
> + nfc->regs + NFC_REG_CTL);
You might want to try dropping this writel (looks like it was only done
when extra_mbus_conf was set).
>
> - dmat = dmaengine_submit(dmad);
> + dmat = dmaengine_submit(dmad);
>
> - ret = dma_submit_error(dmat);
> - if (ret)
> - goto err_clr_dma_flag;
> + ret = dma_submit_error(dmat);
> + if (ret)
> + goto err_clr_dma_flag;
> + }
>
> return 0;
>
More information about the linux-mtd
mailing list