diff -drupN a/include/linux/dma/sunxi-dma.h b/include/linux/dma/sunxi-dma.h --- a/include/linux/dma/sunxi-dma.h 1970-01-01 03:00:00.000000000 +0300 +++ b/include/linux/dma/sunxi-dma.h 2022-06-12 05:28:14.000000000 +0300 @@ -0,0 +1,302 @@ +/* + * include/linux/dma/sunxi-dma.h + * + * Copyright (C) 2015-2020 Allwinnertech Co., Ltd + * + * Author: Wim Hwang + * + * Sunxi DMA controller driver + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +/* + * The source DRQ type and port corresponding relation + * + */ +#ifndef __SUNXI_DMA_H__ +#define __SUNXI_DMA_H__ + +#include + +#if defined(CONFIG_ARCH_SUN8IW10) +#include "sunxi/dma-sun8iw10.h" +#elif defined(CONFIG_ARCH_SUN8IW11) +#include "sunxi/dma-sun8iw11.h" +#elif defined(CONFIG_ARCH_SUN8IW17) +#include "sunxi/dma-sun8iw17.h" +#elif defined(CONFIG_ARCH_SUN50IW2P1) +#include "sunxi/dma-sun50iw2.h" +#elif defined(CONFIG_ARCH_SUN50IW3P1) +#include "sunxi/dma-sun50iw3.h" +#elif defined(CONFIG_ARCH_SUN50IW6P1) +#include "sunxi/dma-sun50iw6.h" +#elif defined(CONFIG_ARCH_SUN3IW1P1) +#include "sunxi/dma-sun3iw1.h" +#elif defined(CONFIG_ARCH_SUN8IW7) +#include "sunxi/dma-sun8iw7.h" +#elif defined(CONFIG_ARCH_SUN8IW12) +#include "sunxi/dma-sun8iw12.h" +#elif defined(CONFIG_ARCH_SUN8IW15) +#include "sunxi/dma-sun8iw15.h" +#elif defined(CONFIG_ARCH_SUN8IW16) +#include "sunxi/dma-sun8iw16.h" +#elif defined(CONFIG_ARCH_SUN50IW8) +#include "sunxi/dma-sun50iw8.h" +#elif defined(CONFIG_ARCH_SUN8IW18) +#include "sunxi/dma-sun8iw18.h" +#elif defined(CONFIG_ARCH_SUN50IW5T) +#include "sunxi/dma-sun50iw5t.h" +#elif defined(CONFIG_ARCH_SUN50IW9) +#include "sunxi/dma-sun50iw9.h" +#elif defined(CONFIG_ARCH_SUN50IW10) +#include "sunxi/dma-sun50iw10.h" +#elif defined(CONFIG_ARCH_SUN50IW11) +#include "sunxi/dma-sun50iw11.h" +#elif defined(CONFIG_ARCH_SUN8IW19) +#include "sunxi/dma-sun8iw19.h" +#else + +#define DRQSRC_SRAM 0 +#define DRQSRC_SDRAM 0 + +#if !defined(CONFIG_ARCH_SUN8IW5) \ + && !defined(CONFIG_ARCH_SUN8IW3) \ + && !defined(CONFIG_ARCH_SUN8IW8) \ + && !defined(CONFIG_ARCH_SUN8IW9) +#define DRQSRC_SPDIFRX 2 +#endif + +#if !defined(CONFIG_ARCH_SUN8IW9) +#define DRQSRC_DAUDIO_0_RX 3 +#endif + +#if !defined(CONFIG_ARCH_SUN9I) \ + && !defined(CONFIG_ARCH_SUN8IW8) +#define DRQSRC_DAUDIO_1_RX 4 +#define DRQSRC_NAND0 5 +#endif + +#define DRQSRC_UART0_RX 6 +#define DRQSRC_UART1_RX 7 +#define DRQSRC_UART2_RX 8 + +#ifndef CONFIG_ARCH_SUN8IW8 +#define DRQSRC_UART3_RX 9 +#define DRQSRC_UART4_RX 10 +#endif +/* #define DRQSRC_RESEVER 11 */ +/* #define DRQSRC_RESEVER 12 */ + +#ifndef CONFIG_ARCH_SUN9I + +#ifdef CONFIG_ARCH_SUN8IW1 +#define DRQSRC_HDMI_DDC 13 +#define DRQSRC_HDMI_AUDIO 14 +#endif + +#if !defined(CONFIG_ARCH_SUN8IW6) +#define DRQSRC_AUDIO_CODEC 15 +#if defined(CONFIG_ARCH_SUN50I) +#define DRQSRC_CODEC DRQSRC_AUDIO_CODEC +#endif +#endif + +#if !defined(CONFIG_ARCH_SUN8IW3) \ + && !defined(CONFIG_ARCH_SUN8IW6) +#define DRQSRC_SS 16 +#if defined(CONFIG_ARCH_SUN50I) +#define DRQSRC_CE_RX DRQSRC_SS +#endif +#endif + +#define DRQSRC_OTG_EP1 17 +#define DRQSRC_OTG_EP2 18 +#define DRQSRC_OTG_EP3 19 +#define DRQSRC_OTG_EP4 20 + +#if !defined(CONFIG_ARCH_SUN8IW8) +#define DRQSRC_OTG_EP5 21 +#endif + +#else +#define DRQSRC_AC97 18 +#endif + +#if defined(CONFIG_ARCH_SUN8IW1) \ + || defined(CONFIG_ARCH_SUN9I) +#define DRQSRC_UART5_RX 22 +#endif + +#define DRQSRC_SPI0_RX 23 + +#if !defined(CONFIG_ARCH_SUN8IW8) +#define DRQSRC_SPI1_RX 24 +#endif + +#if defined(CONFIG_ARCH_SUN8IW1) \ + || defined(CONFIG_ARCH_SUN9I) +#define DRQSRC_SPI2_RX 25 +#define DRQSRC_SPI3_RX 26 +#endif + +#if defined(CONFIG_ARCH_SUN8IW1) +#define DRQSRC_TP 27 +#define DRQSRC_NAND1 28 +#define DRQSRC_MTC_ACC 29 +#define DRQSRC_DIGITAL_MIC 30 + +#elif defined(CONFIG_ARCH_SUN8IW6) \ + || defined(CONFIG_ARCH_SUN8IW7) + +#define DRQDST_TDMRX 28 +#endif + + +/* + * The source and destination DRQ type and port corresponding relation + */ +#define DRQDST_SRAM 0 +#define DRQDST_SDRAM 0 + +#if !defined(CONFIG_ARCH_SUN8IW5) \ + && !defined(CONFIG_ARCH_SUN8IW5) \ + && !defined(CONFIG_ARCH_SUN8IW8) +#define DRQDST_SPDIFTX 2 +#endif + +#if !defined(CONFIG_ARCH_SUN8IW9) +#define DRQDST_DAUDIO_0_TX 3 +#endif + +#if !defined(CONFIG_ARCH_SUN8IW8) \ + && !defined(CONFIG_ARCH_SUN8IW9) +#define DRQDST_DAUDIO_1_TX 4 +#endif + +#if !defined(CONFIG_ARCH_SUN9I) \ + && !defined(CONFIG_ARCH_SUN8IW8) +#define DRQDST_NAND0 5 +#endif + +#define DRQDST_UART0_TX 6 +#define DRQDST_UART1_TX 7 +#define DRQDST_UART2_TX 8 + +#if !defined(CONFIG_ARCH_SUN8IW8) +#define DRQDST_UART3_TX 9 +#define DRQDST_UART4_TX 10 +#endif + +#if defined(CONFIG_ARCH_SUN8IW3) \ + || defined(CONFIG_ARCH_SUN8IW5) \ + || defined(CONFIG_ARCH_SUN8IW8) \ + || defined(CONFIG_ARCH_SUN8IW9) +#define DRQSRC_TCON0 12 +#endif + +#ifndef CONFIG_ARCH_SUN9I + +#if defined(CONFIG_ARCH_SUN8IW1) +#define DRQDST_HDMI_DDC 13 +#define DRQDST_HDMI_AUDIO 14 +#endif + +#if !defined(CONFIG_ARCH_SUN8IW6) +#define DRQDST_AUDIO_CODEC 15 +#if defined(CONFIG_ARCH_SUN50I) +#define DRQDST_CODEC DRQDST_AUDIO_CODEC +#endif +#endif + +#if !defined(CONFIG_ARCH_SUN8IW3) \ + && !defined(CONFIG_ARCH_SUN8IW6) +#define DRQDST_SS 16 +#if defined(CONFIG_ARCH_SUN50I) +#define DRQDST_CE_TX DRQDST_SS +#endif +#endif + +#define DRQDST_OTG_EP1 17 +#define DRQDST_OTG_EP2 18 +#define DRQDST_OTG_EP3 19 +#define DRQDST_OTG_EP4 20 +#if !defined(CONFIG_ARCH_SUN8IW8) +#define DRQDST_OTG_EP5 21 +#endif + +#else +#define DRQDST_CIR_TX 15 +#define DRQDST_AC97 18 +#endif + +#if defined(CONFIG_ARCH_SUN8IW1) \ + || defined(CONFIG_ARCH_SUN9I) +#define DRQDST_UART5_TX 22 +#endif + +#define DRQDST_SPI0_TX 23 +#define DRQDST_SPI1_TX 24 + +#if defined(CONFIG_ARCH_SUN8IW1) \ + && defined(CONFIG_ARCH_SUN9I) +#define DRQDST_SPI2TX 25 +#define DRQDST_SPI3TX 26 +#endif + +#if defined(CONFIG_ARCH_SUN8IW1) +#define DRQDST_NAND1 28 +#define DRQDST_MTC_ACC 29 +#define DRQDST_DIGITAL_MIC 30 + +#elif defined(CONFIG_ARCH_SUN8IW6) \ + || defined(CONFIG_ARCH_SUN8IW7) + +#define DRQDST_DAUDIO_2_TX 27 +#define DRQDST_TDM_TX 28 +#define DRQDST_CIR_TX 29 +#elif defined(CONFIG_ARCH_SUN50I) +#define DRQDST_DAUDIO_2_TX 27 +#endif + +#endif /* CONFIG_ARCH_SUN8IW10 */ + +#define sunxi_slave_id(d, s) (((d)<<16) | (s)) +#define GET_SRC_DRQ(x) ((x) & 0x000000ff) +#define GET_DST_DRQ(x) ((x) & 0x00ff0000) + +/* + * The following DRQ type just for CPUs. + */ +#ifdef CONFIG_ARCH_SUN9I +#define DRQSRC_R_DAUDIO_0_RX 1 +#define DRQSRC_R_UART_RX 2 +#define DRQSRC_R_CIR_RX 3 +#define DRQSRC_R_DAUDIO_1_RX 4 +#define DRQSRC_SPI3_RX 5 + +#define DRQDST_R_DAUDIO_0_TX 1 +#define DRQDST_R_UART_TX 2 +#define DRQDST_R_CIR_TX 3 +#define DRQDST_R_DAUDIO_1_TX 4 +#define DRQDST_SPI3_TX 5 +#endif + +#define SUNXI_DMA_DRV "sunxi_dmac" +#define SUNXI_RDMA_DRV "sunxi_rdmac" + +#define SUNXI_FILTER(name) name##_filter_fn + +bool sunxi_rdma_filter_fn(struct dma_chan *chan, void *param); +bool sunxi_dma_filter_fn(struct dma_chan *chan, void *param); + +struct sunxi_dma_info { + char name[16]; + u32 port; + struct device *use_dev; +}; + +#endif /* __SUNXI_DMA_H__ */