Skip to contentSkip to conversation

dma: Add Synopsys eDMA IP version 0 support

RFC New Eugeniy Paltsev 1 participant 1 message Dec 12, 2018

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

RFC 2/6 dma: Add Synopsys eDMA IP version 0 support

Hi Gustavo,

Quoted 2 lines · Gustavo Pimentel

Add support for the eDMA IP version 0 driver for both register maps (legacy and unroll).

[snip]

Quoted 6 lines
drivers/dma/dw-edma/dw-edma-v0-core.c new file +0 -0
new file mode 100644
index 0000000..cc362b0

drivers/dma/dw-edma/dw-edma-v0-core.c line 10

Quoted 10 lines
drivers/dma/dw-edma/dw-edma-v0-core.c new file +10 -0
@@ -0,0 +1,346 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2018 Synopsys, Inc. and/or its affiliates.
+// Synopsys DesignWare eDMA v0 core
+
+#include "dw-edma-core.h"
+#include "dw-edma-v0-core.h"
+#include "dw-edma-v0-regs.h"
+#include "dw-edma-v0-debugfs.h"
+
+#define QWORD_HI(value)		((value & 0xFFFFFFFF00000000llu) >> 32)

Use upper_32_bits() macros.

drivers/dma/dw-edma/dw-edma-v0-core.c line 11

Quoted 1 line
drivers/dma/dw-edma/dw-edma-v0-core.c new file +1 -0
+#define QWORD_LO(value)		(value & 0x00000000FFFFFFFFllu)

Use lower_32_bits() macros.

Quoted 6 lines
drivers/dma/dw-edma/dw-edma-v0-core.c new file +6 -0
+enum dw_edma_control {
+	DW_EDMA_CB		= BIT(0),
+	DW_EDMA_TCB		= BIT(1),
+	DW_EDMA_LLP		= BIT(2),
+	DW_EDMA_LIE		= BIT(3),
+	DW_EDMA_RIE		= BIT(4),

[snip]

Quoted 1 line
drivers/dma/dw-edma/dw-edma-v0-core.c new file +1 -0
+		viewport_sel = (ch & 0x00000007ul);

[snip]

Quoted 6 lines
drivers/dma/dw-edma/dw-edma-v0-core.c new file +6 -0
+void dw_edma_v0_core_off(struct dw_edma *dw)
+{
+	SET_BOTH(dw, int_mask, 0x00FF00FFul);
+	SET_BOTH(dw, int_clear, 0x00FF00FFul);
+	SET_BOTH(dw, engine_en, 0x00000000ul);
+}

[snip]

drivers/dma/dw-edma/dw-edma-v0-core.c

Quoted 3 lines
drivers/dma/dw-edma/dw-edma-v0-core.c new file +3 -0
+		num_ch &= 0x0000000Ful;
+	} else {
+		num_ch &= 0x000F0000ul;

I guess it's better to name this magic numbers via defines.

[snip]

drivers/dma/dw-edma/dw-edma-v0-core.c

Quoted 10 lines
drivers/dma/dw-edma/dw-edma-v0-core.c new file +10 -0
+
+bool dw_edma_v0_core_status_done_int(struct dw_edma_chan *chan)
+{
+	struct dw_edma *dw = chan->chip->dw;
+	u32 tmp;
+
+	tmp = GET_RW(dw, chan->dir, int_status);
+	tmp &= BIT(chan->id);
+
+	return tmp ? true : false;

return !!tmp;

drivers/dma/dw-edma/dw-edma-v0-core.c

Quoted 11 lines
drivers/dma/dw-edma/dw-edma-v0-core.c new file +11 -0
+}
+
+bool dw_edma_v0_core_status_abort_int(struct dw_edma_chan *chan)
+{
+	struct dw_edma *dw = chan->chip->dw;
+	u32 tmp;
+
+	tmp = GET_RW(dw, chan->dir, int_status);
+	tmp &= BIT(chan->id + 16);
+
+	return tmp ? true : false;

ditto.

Signature · 1 line
 Eugeniy Paltsev