at v6.2 2.6 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (c) 2018-2019 Synopsys, Inc. and/or its affiliates. 4 * Synopsys DesignWare eDMA core driver 5 * 6 * Author: Gustavo Pimentel <gustavo.pimentel@synopsys.com> 7 */ 8 9#ifndef _DW_EDMA_H 10#define _DW_EDMA_H 11 12#include <linux/device.h> 13#include <linux/dmaengine.h> 14 15#define EDMA_MAX_WR_CH 8 16#define EDMA_MAX_RD_CH 8 17 18struct dw_edma; 19 20struct dw_edma_region { 21 phys_addr_t paddr; 22 void __iomem *vaddr; 23 size_t sz; 24}; 25 26struct dw_edma_core_ops { 27 int (*irq_vector)(struct device *dev, unsigned int nr); 28}; 29 30enum dw_edma_map_format { 31 EDMA_MF_EDMA_LEGACY = 0x0, 32 EDMA_MF_EDMA_UNROLL = 0x1, 33 EDMA_MF_HDMA_COMPAT = 0x5 34}; 35 36/** 37 * enum dw_edma_chip_flags - Flags specific to an eDMA chip 38 * @DW_EDMA_CHIP_LOCAL: eDMA is used locally by an endpoint 39 */ 40enum dw_edma_chip_flags { 41 DW_EDMA_CHIP_LOCAL = BIT(0), 42}; 43 44/** 45 * struct dw_edma_chip - representation of DesignWare eDMA controller hardware 46 * @dev: struct device of the eDMA controller 47 * @id: instance ID 48 * @nr_irqs: total number of DMA IRQs 49 * @ops DMA channel to IRQ number mapping 50 * @flags dw_edma_chip_flags 51 * @reg_base DMA register base address 52 * @ll_wr_cnt DMA write link list count 53 * @ll_rd_cnt DMA read link list count 54 * @rg_region DMA register region 55 * @ll_region_wr DMA descriptor link list memory for write channel 56 * @ll_region_rd DMA descriptor link list memory for read channel 57 * @dt_region_wr DMA data memory for write channel 58 * @dt_region_rd DMA data memory for read channel 59 * @mf DMA register map format 60 * @dw: struct dw_edma that is filled by dw_edma_probe() 61 */ 62struct dw_edma_chip { 63 struct device *dev; 64 int id; 65 int nr_irqs; 66 const struct dw_edma_core_ops *ops; 67 u32 flags; 68 69 void __iomem *reg_base; 70 71 u16 ll_wr_cnt; 72 u16 ll_rd_cnt; 73 /* link list address */ 74 struct dw_edma_region ll_region_wr[EDMA_MAX_WR_CH]; 75 struct dw_edma_region ll_region_rd[EDMA_MAX_RD_CH]; 76 77 /* data region */ 78 struct dw_edma_region dt_region_wr[EDMA_MAX_WR_CH]; 79 struct dw_edma_region dt_region_rd[EDMA_MAX_RD_CH]; 80 81 enum dw_edma_map_format mf; 82 83 struct dw_edma *dw; 84}; 85 86/* Export to the platform drivers */ 87#if IS_ENABLED(CONFIG_DW_EDMA) 88int dw_edma_probe(struct dw_edma_chip *chip); 89int dw_edma_remove(struct dw_edma_chip *chip); 90#else 91static inline int dw_edma_probe(struct dw_edma_chip *chip) 92{ 93 return -ENODEV; 94} 95 96static inline int dw_edma_remove(struct dw_edma_chip *chip) 97{ 98 return 0; 99} 100#endif /* CONFIG_DW_EDMA */ 101 102#endif /* _DW_EDMA_H */