diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-07-17 12:55:43 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-07-17 12:55:43 -0400 |
| commit | 47ebe00b684c2bc183a766bc33c8b5943bc0df85 (patch) | |
| tree | c0f155acc5623f6990d20b7a623f48f5e7aa0f61 /include/linux | |
| parent | fa121bb3fed6313b1f0af23952301e06cf6d32ed (diff) | |
| parent | 5c274ca4cfb22a455e880f61536b1894fa29fd17 (diff) | |
Merge tag 'dmaengine-5.3-rc1' of git://git.infradead.org/users/vkoul/slave-dma
Pull dmaengine updates from Vinod Koul:
- Add support in dmaengine core to do device node checks for DT devices
and update bunch of drivers to use that and remove open coding from
drivers
- New driver/driver support for new hardware, namely:
- MediaTek UART APDMA
- Freescale i.mx7ulp edma2
- Synopsys eDMA IP core version 0
- Allwinner H6 DMA
- Updates to axi-dma and support for interleaved cyclic transfers
- Greg's debugfs return value check removals on drivers
- Updates to stm32-dma, hsu, dw, pl330, tegra drivers
* tag 'dmaengine-5.3-rc1' of git://git.infradead.org/users/vkoul/slave-dma: (68 commits)
dmaengine: Revert "dmaengine: fsl-edma: add i.mx7ulp edma2 version support"
dmaengine: at_xdmac: check for non-empty xfers_list before invoking callback
Documentation: dmaengine: clean up description of dmatest usage
dmaengine: tegra210-adma: remove PM_CLK dependency
dmaengine: fsl-edma: add i.mx7ulp edma2 version support
dt-bindings: dma: fsl-edma: add new i.mx7ulp-edma
dmaengine: fsl-edma-common: version check for v2 instead
dmaengine: fsl-edma-common: move dmamux register to another single function
dmaengine: fsl-edma: add drvdata for fsl-edma
dmaengine: Revert "dmaengine: fsl-edma: support little endian for edma driver"
dmaengine: rcar-dmac: Reject zero-length slave DMA requests
dmaengine: dw: Enable iDMA 32-bit on Intel Elkhart Lake
dmaengine: dw-edma: fix semicolon.cocci warnings
dmaengine: sh: usb-dmac: Use [] to denote a flexible array member
dmaengine: dmatest: timeout value of -1 should specify infinite wait
dmaengine: dw: Distinguish ->remove() between DW and iDMA 32-bit
dmaengine: fsl-edma: support little endian for edma driver
dmaengine: hsu: Revert "set HSU_CH_MTSR to memory width"
dmagengine: pl330: add code to get reset property
dt-bindings: pl330: document the optional resets property
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/dma/edma.h | 47 | ||||
| -rw-r--r-- | include/linux/dmaengine.h | 12 | ||||
| -rw-r--r-- | include/linux/fpga/adi-axi-common.h | 19 | ||||
| -rw-r--r-- | include/linux/pci_ids.h | 1 | ||||
| -rw-r--r-- | include/linux/platform_data/dma-imx.h | 1 | ||||
| -rw-r--r-- | include/linux/sudmac.h | 49 |
6 files changed, 75 insertions, 54 deletions
diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h new file mode 100644 index 000000000000..cab6e18773da --- /dev/null +++ b/include/linux/dma/edma.h | |||
| @@ -0,0 +1,47 @@ | |||
| 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 | struct dw_edma; | ||
| 16 | |||
| 17 | /** | ||
| 18 | * struct dw_edma_chip - representation of DesignWare eDMA controller hardware | ||
| 19 | * @dev: struct device of the eDMA controller | ||
| 20 | * @id: instance ID | ||
| 21 | * @irq: irq line | ||
| 22 | * @dw: struct dw_edma that is filed by dw_edma_probe() | ||
| 23 | */ | ||
| 24 | struct dw_edma_chip { | ||
| 25 | struct device *dev; | ||
| 26 | int id; | ||
| 27 | int irq; | ||
| 28 | struct dw_edma *dw; | ||
| 29 | }; | ||
| 30 | |||
| 31 | /* Export to the platform drivers */ | ||
| 32 | #if IS_ENABLED(CONFIG_DW_EDMA) | ||
| 33 | int dw_edma_probe(struct dw_edma_chip *chip); | ||
| 34 | int dw_edma_remove(struct dw_edma_chip *chip); | ||
| 35 | #else | ||
| 36 | static inline int dw_edma_probe(struct dw_edma_chip *chip) | ||
| 37 | { | ||
| 38 | return -ENODEV; | ||
| 39 | } | ||
| 40 | |||
| 41 | static inline int dw_edma_remove(struct dw_edma_chip *chip) | ||
| 42 | { | ||
| 43 | return 0; | ||
| 44 | } | ||
| 45 | #endif /* CONFIG_DW_EDMA */ | ||
| 46 | |||
| 47 | #endif /* _DW_EDMA_H */ | ||
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index c952f987ee57..8fcdee1c0cf9 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h | |||
| @@ -1302,7 +1302,8 @@ enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie); | |||
| 1302 | enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx); | 1302 | enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx); |
| 1303 | void dma_issue_pending_all(void); | 1303 | void dma_issue_pending_all(void); |
| 1304 | struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask, | 1304 | struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask, |
| 1305 | dma_filter_fn fn, void *fn_param); | 1305 | dma_filter_fn fn, void *fn_param, |
| 1306 | struct device_node *np); | ||
| 1306 | struct dma_chan *dma_request_slave_channel(struct device *dev, const char *name); | 1307 | struct dma_chan *dma_request_slave_channel(struct device *dev, const char *name); |
| 1307 | 1308 | ||
| 1308 | struct dma_chan *dma_request_chan(struct device *dev, const char *name); | 1309 | struct dma_chan *dma_request_chan(struct device *dev, const char *name); |
| @@ -1327,7 +1328,9 @@ static inline void dma_issue_pending_all(void) | |||
| 1327 | { | 1328 | { |
| 1328 | } | 1329 | } |
| 1329 | static inline struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask, | 1330 | static inline struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask, |
| 1330 | dma_filter_fn fn, void *fn_param) | 1331 | dma_filter_fn fn, |
| 1332 | void *fn_param, | ||
| 1333 | struct device_node *np) | ||
| 1331 | { | 1334 | { |
| 1332 | return NULL; | 1335 | return NULL; |
| 1333 | } | 1336 | } |
| @@ -1399,7 +1402,8 @@ void dma_async_device_unregister(struct dma_device *device); | |||
| 1399 | void dma_run_dependencies(struct dma_async_tx_descriptor *tx); | 1402 | void dma_run_dependencies(struct dma_async_tx_descriptor *tx); |
| 1400 | struct dma_chan *dma_get_slave_channel(struct dma_chan *chan); | 1403 | struct dma_chan *dma_get_slave_channel(struct dma_chan *chan); |
| 1401 | struct dma_chan *dma_get_any_slave_channel(struct dma_device *device); | 1404 | struct dma_chan *dma_get_any_slave_channel(struct dma_device *device); |
| 1402 | #define dma_request_channel(mask, x, y) __dma_request_channel(&(mask), x, y) | 1405 | #define dma_request_channel(mask, x, y) \ |
| 1406 | __dma_request_channel(&(mask), x, y, NULL) | ||
| 1403 | #define dma_request_slave_channel_compat(mask, x, y, dev, name) \ | 1407 | #define dma_request_slave_channel_compat(mask, x, y, dev, name) \ |
| 1404 | __dma_request_slave_channel_compat(&(mask), x, y, dev, name) | 1408 | __dma_request_slave_channel_compat(&(mask), x, y, dev, name) |
| 1405 | 1409 | ||
| @@ -1417,6 +1421,6 @@ static inline struct dma_chan | |||
| 1417 | if (!fn || !fn_param) | 1421 | if (!fn || !fn_param) |
| 1418 | return NULL; | 1422 | return NULL; |
| 1419 | 1423 | ||
| 1420 | return __dma_request_channel(mask, fn, fn_param); | 1424 | return __dma_request_channel(mask, fn, fn_param, NULL); |
| 1421 | } | 1425 | } |
| 1422 | #endif /* DMAENGINE_H */ | 1426 | #endif /* DMAENGINE_H */ |
diff --git a/include/linux/fpga/adi-axi-common.h b/include/linux/fpga/adi-axi-common.h new file mode 100644 index 000000000000..7fc95d5c95bb --- /dev/null +++ b/include/linux/fpga/adi-axi-common.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | ||
| 2 | /* | ||
| 3 | * Analog Devices AXI common registers & definitions | ||
| 4 | * | ||
| 5 | * Copyright 2019 Analog Devices Inc. | ||
| 6 | * | ||
| 7 | * https://wiki.analog.com/resources/fpga/docs/axi_ip | ||
| 8 | * https://wiki.analog.com/resources/fpga/docs/hdl/regmap | ||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef ADI_AXI_COMMON_H_ | ||
| 12 | #define ADI_AXI_COMMON_H_ | ||
| 13 | |||
| 14 | #define ADI_AXI_REG_VERSION 0x0000 | ||
| 15 | |||
| 16 | #define ADI_AXI_PCORE_VER(major, minor, patch) \ | ||
| 17 | (((major) << 16) | ((minor) << 8) | (patch)) | ||
| 18 | |||
| 19 | #endif /* ADI_AXI_COMMON_H_ */ | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 40015609c4b5..c842735a4f45 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2367,6 +2367,7 @@ | |||
| 2367 | #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3 0xabcd | 2367 | #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3 0xabcd |
| 2368 | #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3_AXI 0xabce | 2368 | #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3_AXI 0xabce |
| 2369 | #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB31 0xabcf | 2369 | #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB31 0xabcf |
| 2370 | #define PCI_DEVICE_ID_SYNOPSYS_EDDA 0xedda | ||
| 2370 | 2371 | ||
| 2371 | #define PCI_VENDOR_ID_USR 0x16ec | 2372 | #define PCI_VENDOR_ID_USR 0x16ec |
| 2372 | 2373 | ||
diff --git a/include/linux/platform_data/dma-imx.h b/include/linux/platform_data/dma-imx.h index 80f9be858bd0..281adbb26e6b 100644 --- a/include/linux/platform_data/dma-imx.h +++ b/include/linux/platform_data/dma-imx.h | |||
| @@ -52,7 +52,6 @@ struct imx_dma_data { | |||
| 52 | int dma_request2; /* secondary DMA request line */ | 52 | int dma_request2; /* secondary DMA request line */ |
| 53 | enum sdma_peripheral_type peripheral_type; | 53 | enum sdma_peripheral_type peripheral_type; |
| 54 | int priority; | 54 | int priority; |
| 55 | struct device_node *of_node; | ||
| 56 | }; | 55 | }; |
| 57 | 56 | ||
| 58 | static inline int imx_dma_is_ipu(struct dma_chan *chan) | 57 | static inline int imx_dma_is_ipu(struct dma_chan *chan) |
diff --git a/include/linux/sudmac.h b/include/linux/sudmac.h deleted file mode 100644 index cccc0a665d26..000000000000 --- a/include/linux/sudmac.h +++ /dev/null | |||
| @@ -1,49 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0-only */ | ||
| 2 | /* | ||
| 3 | * Header for the SUDMAC driver | ||
| 4 | * | ||
| 5 | * Copyright (C) 2013 Renesas Solutions Corp. | ||
| 6 | */ | ||
| 7 | #ifndef SUDMAC_H | ||
| 8 | #define SUDMAC_H | ||
| 9 | |||
| 10 | #include <linux/dmaengine.h> | ||
| 11 | #include <linux/shdma-base.h> | ||
| 12 | #include <linux/types.h> | ||
| 13 | |||
| 14 | /* Used by slave DMA clients to request DMA to/from a specific peripheral */ | ||
| 15 | struct sudmac_slave { | ||
| 16 | struct shdma_slave shdma_slave; /* Set by the platform */ | ||
| 17 | }; | ||
| 18 | |||
| 19 | /* | ||
| 20 | * Supplied by platforms to specify, how a DMA channel has to be configured for | ||
| 21 | * a certain peripheral | ||
| 22 | */ | ||
| 23 | struct sudmac_slave_config { | ||
| 24 | int slave_id; | ||
| 25 | }; | ||
| 26 | |||
| 27 | struct sudmac_channel { | ||
| 28 | unsigned long offset; | ||
| 29 | unsigned long config; | ||
| 30 | unsigned long wait; /* The configuable range is 0 to 3 */ | ||
| 31 | unsigned long dint_end_bit; | ||
| 32 | }; | ||
| 33 | |||
| 34 | struct sudmac_pdata { | ||
| 35 | const struct sudmac_slave_config *slave; | ||
| 36 | int slave_num; | ||
| 37 | const struct sudmac_channel *channel; | ||
| 38 | int channel_num; | ||
| 39 | }; | ||
| 40 | |||
| 41 | /* Definitions for the sudmac_channel.config */ | ||
| 42 | #define SUDMAC_TX_BUFFER_MODE BIT(0) | ||
| 43 | #define SUDMAC_RX_END_MODE BIT(1) | ||
| 44 | |||
| 45 | /* Definitions for the sudmac_channel.dint_end_bit */ | ||
| 46 | #define SUDMAC_DMA_BIT_CH0 BIT(0) | ||
| 47 | #define SUDMAC_DMA_BIT_CH1 BIT(1) | ||
| 48 | |||
| 49 | #endif | ||
