Thread (1 message) 1 message, 1 author, 2014-05-21

Re: [PATCH v2] DMA: add a driver for AMBA AXI NBPF DMAC IP cores

From: Guennadi Liakhovetski <hidden>
Date: 2014-05-21 06:22:08

Hi Vinod,

As you've seen, I've submitted a v3 of this patch with all your comments 
addressed - except one - macros vs. numbers. Would that version be 
acceptable or would you like a v4? Also see a couple of comments below.

On Wed, 21 May 2014, Vinod Koul wrote:
On Sat, May 10, 2014 at 11:15:28AM +0200, Guennadi Liakhovetski wrote:
quoted
Hi Vinod,

Thanks for a review.

On Wed, 7 May 2014, Vinod Koul wrote:
quoted
On Sat, Apr 26, 2014 at 02:03:44PM +0200, Guennadi Liakhovetski wrote:
quoted
This patch adds a driver for NBPF DMAC IP cores from Renesas, designed for
the AMBA AXI bus.
 
quoted
diff --git a/Documentation/devicetree/bindings/dma/nbpfaxi.txt b/Documentation/devicetree/bindings/dma/nbpfaxi.txt
new file mode 100644
index 0000000..d5e2522
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/nbpfaxi.txt
[snip]
quoted
quoted
Pls split the DT bindings to seprate patch. This part needs ack from DT folks
I thaught it would be preferable for both to go into the tree 
simultaneously, i.e. as a single patch, they can review and ack this patch 
too, but ok, can do, np.
That helps in getting that part acked by DT folks and track independent of DMA
changes. Ofocurse both will be applied togther or DT first :)
Done. As for applying after the DT part is in - can it also not be helped 
by the fact, that I'm not adding any own bindings, only using standard 
dmaengine ones?
quoted
quoted
quoted
+static size_t nbpf_xfer_size(struct nbpf_device *nbpf,
+			     enum dma_slave_buswidth width, u32 burst)
+{
+	size_t size;
+
+	if (!burst)
+		burst = 1;
+
+	switch (width) {
+	case DMA_SLAVE_BUSWIDTH_8_BYTES:
+		size = 8 * burst;
+		break;
+	case DMA_SLAVE_BUSWIDTH_4_BYTES:
+		size = 4 * burst;
+		break;
+	case DMA_SLAVE_BUSWIDTH_2_BYTES:
+		size = 2 * burst;
why not
		size = width * burst; 
for all these three cases?
because width is an enum, that "accidentally" coincides with the 
respective numerical value. I find this confusing - if it's an enum, you 
shouldn't use it in calculations. If it's a numerical value, just use it 
explicitly, but mixing both...
ah, i dont agree with the reasoning. We have fair examples of using enums for
these calculations to covert dmaengine values to driver type. This is juts a
conversion and saves code space and simplfies the routine...
I'm fine with using the width for calculations, but then 
DMA_SLAVE_BUSWIDTH_*_BYTES should be killed! Looking through grep results, 
personally I would find

	.src_info.data_width = 1,

in drivers/dma/ste_dma40.c at least as understandable as the present

	.src_info.data_width = DMA_SLAVE_BUSWIDTH_1_BYTE,

or even more. And if someone doesn't find this clear enough, you can 
always add comments. Then all calculations are jastified, including those, 
using the BIT() macro.

[snip]
quoted
quoted
quoted
+static enum dma_status nbpf_tx_status(struct dma_chan *dchan,
+		dma_cookie_t cookie, struct dma_tx_state *state)
+{
+	struct nbpf_channel *chan = nbpf_to_chan(dchan);
+	enum dma_status status = dma_cookie_status(dchan, cookie, state);
+	dma_cookie_t running = chan->running ? chan->running->async_tx.cookie : -EINVAL;
+
+	if (chan->paused)
+		status = DMA_PAUSED;
+
+	/* Note: we cannot return residues for old cookies */
??? If cookie is completed then reside is 0. So how is this comment valid?
For completed ones it's 0, sure.
so what does comment mean here about "old" cookies?
Think about the amba-pl011.c serial driver. The way it handles Rx is it 
submits a 4k buffer, but then waits for an Rx timeout IRQ and pauses, 
reads out status / residue and terminates that transfer. So, Rx transfers 
are routinely incomplete. Their residue was != 0, but ones they are 
terminated you cannot retrieve that residue any longer.

Thanks
Guennadi
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help