// SPDX-License-Identifier: GPL-2.0
/*
* Xilinx ZynqMP DPDMA Engine driver
*
* Copyright (C) 2015 - 2020 Xilinx, Inc.
*
* Author: Hyun Woo Kwon <hyun.kwon@xilinx.com>
*/
#include <linux/bitfield.h>
#include <linux/bits.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/dmaengine.h>
#include <linux/dmapool.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_dma.h>
#include <linux/platform_device.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/wait.h>
#include <dt-bindings/dma/xlnx-zynqmp-dpdma.h>
#include "../dmaengine.h"
#include "../virt-dma.h"
/* DPDMA registers */
#define XILINX_DPDMA_ERR_CTRL 0x000
#define XILINX_DPDMA_ISR 0x004
#define XILINX_DPDMA_IMR 0x008
#define XILINX_DPDMA_IEN 0x00c
#define XILINX_DPDMA_IDS 0x010
#define XILINX_DPDMA_INTR_DESC_DONE(n) BIT((n) + 0)
#define XILINX_DPDMA_INTR_DESC_DONE_MASK GENMASK(5, 0)
#define XILINX_DPDMA_INTR_NO_OSTAND(n) BIT((n) + 6)
#define XILINX_DPDMA_INTR_NO_OSTAND_MASK GENMASK(11, 6)
#define XILINX_DPDMA_INTR_AXI_ERR(n) BIT((n) + 12)
#define XILINX_DPDMA_INTR_AXI