Discussion:
[PATCH 1/2] dmaengine: edma: Document variables used for residue accounting
Joel Fernandes
2014-04-28 20:48:47 UTC
Permalink
The granular residue accounting code uses certain variables specifically
for residue accounting. Document these in the structure declaration.
Also move around some elements and group them together.

Cc: Thomas Gleixner <tglx at linutronix.de>
Signed-off-by: Joel Fernandes <joelf at ti.com>
---
drivers/dma/edma.c | 26 ++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
index 4c574f60..8926078 100644
--- a/drivers/dma/edma.c
+++ b/drivers/dma/edma.c
@@ -70,12 +70,34 @@ struct edma_desc {
int cyclic;
int absync;
int pset_nr;
+ struct edma_chan *echan;
int processed;
+
+ /*
+ * The following 4 elements are used for residue accounting.
+ *
+ * - processed_stat: the number of SG elements we have traversed
+ * so far to cover accounting. This is updated directly to processed
+ * during edma_callback and is always <= processed, because processed
+ * refers to the number of pending transfer (programmed to EDMA
+ * controller), where as processed_stat tracks number of transfers
+ * accounted for so far.
+ *
+ * - residue: The amount of bytes we have left to transfer for this desc
+ *
+ * - residue_stat: The residue in bytes of data we have covered
+ * so far for accounting. This is updated directly to residue
+ * during callbacks to keep it current.
+ *
+ * - sg_len: Tracks the length of the current intermediate transfer,
+ * this is required to update the residue during intermediate transfer
+ * completion callback.
+ */
int processed_stat;
- u32 residue;
u32 sg_len;
+ u32 residue;
u32 residue_stat;
- struct edma_chan *echan;
+
struct edma_pset pset[0];
};
--
1.7.9.5
Joel Fernandes
2014-04-28 20:48:48 UTC
Permalink
edma param struct is now within an edma_pset struct introduced in Thomas
Gleixner's edma tx status series. Update memcpy function for the same.

Cc: Thomas Gleixner <tglx at linutronix.de>
Signed-off-by: Joel Fernandes <joelf at ti.com>
---
drivers/dma/edma.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
index 8926078..ec9c410 100644
--- a/drivers/dma/edma.c
+++ b/drivers/dma/edma.c
@@ -582,8 +582,8 @@ struct dma_async_tx_descriptor *edma_prep_dma_memcpy(
* on completion of every TR, and enable transfer-completion
* interrupt on completion of the whole transfer.
*/
- edesc->pset[0].opt |= ITCCHEN;
- edesc->pset[0].opt |= TCINTEN;
+ edesc->pset[0].param.opt |= ITCCHEN;
+ edesc->pset[0].param.opt |= TCINTEN;

return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags);
}
--
1.7.9.5
Loading...