Merge tag 'dmaengine-5.7-rc1' of git://git.infradead.org/users/vkoul/slave-dma
Pull dmaengine updates from Vinod Koul: "Core: - Some code cleanup and optimization in core by Andy - Debugfs support for displaying dmaengine channels by Peter Drivers: - New driver for uniphier-xdmac controller - Updates to stm32 dma, mdma and dmamux drivers and PM support - More updates to idxd drivers - Bunch of changes in tegra-apb driver and cleaning up of pm functions - Bunch of spelling fixes and Replace zero-length array patches - Shutdown hook for fsl-dpaa2-qdma driver - Support for interleaved transfers for ti-edma and virtualization support for k3-dma driver - Support for reset and updates in xilinx_dma driver - Improvements and locking updates in at_hdma driver" * tag 'dmaengine-5.7-rc1' of git://git.infradead.org/users/vkoul/slave-dma: (89 commits) dt-bindings: dma: renesas,usb-dmac: add r8a77961 support dmaengine: uniphier-xdmac: Remove redandant error log for platform_get_irq dmaengine: tegra-apb: Improve DMA synchronization dmaengine: tegra-apb: Don't save/restore IRQ flags in interrupt handler dmaengine: tegra-apb: mark PM functions as __maybe_unused dmaengine: fix spelling mistake "exceds" -> "exceeds" dmaengine: sprd: Set request pending flag when DMA controller is active dmaengine: ppc4xx: Use scnprintf() for avoiding potential buffer overflow dmaengine: idxd: remove global token limit check dmaengine: idxd: reflect shadow copy of traffic class programming dmaengine: idxd: Merge definition of dsa_batch_desc into dsa_hw_desc dmaengine: Create debug directories for DMA devices dmaengine: ti: k3-udma: Implement custom dbg_summary_show for debugfs dmaengine: Add basic debugfs support dmaengine: fsl-dpaa2-qdma: remove set but not used variable 'dpaa2_qdma' dmaengine: ti: edma: fix null dereference because of a typo in pointer name dmaengine: fsl-dpaa2-qdma: Adding shutdown hook dmaengine: uniphier-xdmac: Add UniPhier external DMA controller driver dt-bindings: dmaengine: Add UniPhier external DMA controller bindings dmaengine: ti: k3-udma: Implement support for atype (for virtualization) ...
This commit is contained in:
@@ -300,6 +300,8 @@ struct dma_router {
|
||||
* @chan_id: channel ID for sysfs
|
||||
* @dev: class device for sysfs
|
||||
* @name: backlink name for sysfs
|
||||
* @dbg_client_name: slave name for debugfs in format:
|
||||
* dev_name(requester's dev):channel name, for example: "2b00000.mcasp:tx"
|
||||
* @device_node: used to add this to the device chan list
|
||||
* @local: per-cpu pointer to a struct dma_chan_percpu
|
||||
* @client_count: how many clients are using this channel
|
||||
@@ -318,6 +320,9 @@ struct dma_chan {
|
||||
int chan_id;
|
||||
struct dma_chan_dev *dev;
|
||||
const char *name;
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
char *dbg_client_name;
|
||||
#endif
|
||||
|
||||
struct list_head device_node;
|
||||
struct dma_chan_percpu __percpu *local;
|
||||
@@ -618,10 +623,11 @@ static inline void dmaengine_unmap_put(struct dmaengine_unmap_data *unmap)
|
||||
|
||||
static inline void dma_descriptor_unmap(struct dma_async_tx_descriptor *tx)
|
||||
{
|
||||
if (tx->unmap) {
|
||||
dmaengine_unmap_put(tx->unmap);
|
||||
tx->unmap = NULL;
|
||||
}
|
||||
if (!tx->unmap)
|
||||
return;
|
||||
|
||||
dmaengine_unmap_put(tx->unmap);
|
||||
tx->unmap = NULL;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH
|
||||
@@ -805,7 +811,9 @@ struct dma_filter {
|
||||
* called and there are no further references to this structure. This
|
||||
* must be implemented to free resources however many existing drivers
|
||||
* do not and are therefore not safe to unbind while in use.
|
||||
*
|
||||
* @dbg_summary_show: optional routine to show contents in debugfs; default code
|
||||
* will be used when this is omitted, but custom code can show extra,
|
||||
* controller specific information.
|
||||
*/
|
||||
struct dma_device {
|
||||
struct kref ref;
|
||||
@@ -891,6 +899,11 @@ struct dma_device {
|
||||
struct dma_tx_state *txstate);
|
||||
void (*device_issue_pending)(struct dma_chan *chan);
|
||||
void (*device_release)(struct dma_device *dev);
|
||||
/* debugfs support */
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
void (*dbg_summary_show)(struct seq_file *s, struct dma_device *dev);
|
||||
struct dentry *dbg_dev_root;
|
||||
#endif
|
||||
};
|
||||
|
||||
static inline int dmaengine_slave_config(struct dma_chan *chan,
|
||||
@@ -1155,14 +1168,7 @@ static inline dma_cookie_t dmaengine_submit(struct dma_async_tx_descriptor *desc
|
||||
static inline bool dmaengine_check_align(enum dmaengine_alignment align,
|
||||
size_t off1, size_t off2, size_t len)
|
||||
{
|
||||
size_t mask;
|
||||
|
||||
if (!align)
|
||||
return true;
|
||||
mask = (1 << align) - 1;
|
||||
if (mask & (off1 | off2 | len))
|
||||
return false;
|
||||
return true;
|
||||
return !(((1 << align) - 1) & (off1 | off2 | len));
|
||||
}
|
||||
|
||||
static inline bool is_dma_copy_aligned(struct dma_device *dev, size_t off1,
|
||||
@@ -1236,9 +1242,9 @@ static inline int dma_maxpq(struct dma_device *dma, enum dma_ctrl_flags flags)
|
||||
{
|
||||
if (dma_dev_has_pq_continue(dma) || !dmaf_continue(flags))
|
||||
return dma_dev_to_maxpq(dma);
|
||||
else if (dmaf_p_disabled_continue(flags))
|
||||
if (dmaf_p_disabled_continue(flags))
|
||||
return dma_dev_to_maxpq(dma) - 1;
|
||||
else if (dmaf_continue(flags))
|
||||
if (dmaf_continue(flags))
|
||||
return dma_dev_to_maxpq(dma) - 3;
|
||||
BUG();
|
||||
}
|
||||
@@ -1249,7 +1255,7 @@ static inline size_t dmaengine_get_icg(bool inc, bool sgl, size_t icg,
|
||||
if (inc) {
|
||||
if (dir_icg)
|
||||
return dir_icg;
|
||||
else if (sgl)
|
||||
if (sgl)
|
||||
return icg;
|
||||
}
|
||||
|
||||
@@ -1415,11 +1421,12 @@ static inline enum dma_status dma_async_is_complete(dma_cookie_t cookie,
|
||||
static inline void
|
||||
dma_set_tx_state(struct dma_tx_state *st, dma_cookie_t last, dma_cookie_t used, u32 residue)
|
||||
{
|
||||
if (st) {
|
||||
st->last = last;
|
||||
st->used = used;
|
||||
st->residue = residue;
|
||||
}
|
||||
if (!st)
|
||||
return;
|
||||
|
||||
st->last = last;
|
||||
st->used = used;
|
||||
st->residue = residue;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DMA_ENGINE
|
||||
@@ -1496,12 +1503,11 @@ static inline int dmaengine_desc_set_reuse(struct dma_async_tx_descriptor *tx)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (caps.descriptor_reuse) {
|
||||
tx->flags |= DMA_CTRL_REUSE;
|
||||
return 0;
|
||||
} else {
|
||||
if (!caps.descriptor_reuse)
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
tx->flags |= DMA_CTRL_REUSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void dmaengine_desc_clear_reuse(struct dma_async_tx_descriptor *tx)
|
||||
@@ -1517,10 +1523,10 @@ static inline bool dmaengine_desc_test_reuse(struct dma_async_tx_descriptor *tx)
|
||||
static inline int dmaengine_desc_free(struct dma_async_tx_descriptor *desc)
|
||||
{
|
||||
/* this is supported for reusable desc, so check that */
|
||||
if (dmaengine_desc_test_reuse(desc))
|
||||
return desc->desc_free(desc);
|
||||
else
|
||||
if (!dmaengine_desc_test_reuse(desc))
|
||||
return -EPERM;
|
||||
|
||||
return desc->desc_free(desc);
|
||||
}
|
||||
|
||||
/* --- DMA device --- */
|
||||
@@ -1566,9 +1572,7 @@ dmaengine_get_direction_text(enum dma_transfer_direction dir)
|
||||
case DMA_DEV_TO_DEV:
|
||||
return "DEV_TO_DEV";
|
||||
default:
|
||||
break;
|
||||
return "invalid";
|
||||
}
|
||||
|
||||
return "invalid";
|
||||
}
|
||||
#endif /* DMAENGINE_H */
|
||||
|
Reference in New Issue
Block a user