Module Name:    src
Committed By:   jmcneill
Date:           Fri Dec  5 18:54:35 UTC 2014

Modified Files:
        src/sys/arch/arm/allwinner: awin_dma.c awin_dma.h awin_dma_a31.c
            awin_io.c awin_reg.h files.awin
        src/sys/arch/evbarm/conf: ALLWINNER_A80

Log Message:
A80 DMA controller support


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/allwinner/awin_dma.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/allwinner/awin_dma.h
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/allwinner/awin_dma_a31.c
cvs rdiff -u -r1.35 -r1.36 src/sys/arch/arm/allwinner/awin_io.c
cvs rdiff -u -r1.63 -r1.64 src/sys/arch/arm/allwinner/awin_reg.h
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/arm/allwinner/files.awin
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/evbarm/conf/ALLWINNER_A80

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/allwinner/awin_dma.c
diff -u src/sys/arch/arm/allwinner/awin_dma.c:1.5 src/sys/arch/arm/allwinner/awin_dma.c:1.6
--- src/sys/arch/arm/allwinner/awin_dma.c:1.5	Mon Oct 13 12:34:00 2014
+++ src/sys/arch/arm/allwinner/awin_dma.c	Fri Dec  5 18:54:35 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_dma.c,v 1.5 2014/10/13 12:34:00 jmcneill Exp $ */
+/* $NetBSD: awin_dma.c,v 1.6 2014/12/05 18:54:35 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca>
@@ -30,7 +30,7 @@
 #include "opt_allwinner.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: awin_dma.c,v 1.5 2014/10/13 12:34:00 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: awin_dma.c,v 1.6 2014/12/05 18:54:35 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -58,11 +58,7 @@ CFATTACH_DECL_NEW(awin_dma, sizeof(struc
 static int
 awin_dma_match(device_t parent, cfdata_t cf, void *aux)
 {
-#if defined(ALLWINNER_A10) || defined(ALLWINNER_A20) || defined(ALLWINNER_A31)
 	return awin_dma_sc == NULL;
-#else
-	return 0;
-#endif
 }
 
 static void
@@ -71,6 +67,8 @@ awin_dma_attach(device_t parent, device_
 	struct awin_dma_softc *sc = device_private(self);
 	struct awinio_attach_args * const aio = aux;
 	const struct awin_locators * const loc = &aio->aio_loc;
+	bus_space_handle_t bsh = awin_chip_id() == AWIN_CHIP_ID_A80 ?
+				 aio->aio_a80_core2_bsh : aio->aio_core_bsh;
 
 	KASSERT(awin_dma_sc == NULL);
 	awin_dma_sc = sc;
@@ -78,8 +76,8 @@ awin_dma_attach(device_t parent, device_
 	sc->sc_dev = self;
 	sc->sc_bst = aio->aio_core_bst;
 	sc->sc_dmat = aio->aio_dmat;
-	bus_space_subregion(sc->sc_bst, aio->aio_core_bsh,
-	    loc->loc_offset, loc->loc_size, &sc->sc_bsh);
+	bus_space_subregion(sc->sc_bst, bsh, loc->loc_offset,
+	    loc->loc_size, &sc->sc_bsh);
 
 	aprint_naive("\n");
 	aprint_normal(": DMA\n");
@@ -91,8 +89,9 @@ awin_dma_attach(device_t parent, device_
 		awin_dma_a10_attach(sc, aio, loc);
 		break;
 #endif
-#if defined(ALLWINNER_A31)
+#if defined(ALLWINNER_A31) || defined(ALLWINNER_A80)
 	case AWIN_CHIP_ID_A31:
+	case AWIN_CHIP_ID_A80:
 		awin_dma_a31_attach(sc, aio, loc);
 		break;
 #endif
@@ -166,8 +165,9 @@ awin_dma_dump_regs(void)
 		awin_dma_a10_dump_regs(sc);
 		break;
 #endif
-#if defined(ALLWINNER_A31)
+#if defined(ALLWINNER_A31) || defined(ALLWINNER_A80)
 	case AWIN_CHIP_ID_A31:
+	case AWIN_CHIP_ID_A80:
 		awin_dma_a31_dump_regs(sc);
 		break;
 #endif

Index: src/sys/arch/arm/allwinner/awin_dma.h
diff -u src/sys/arch/arm/allwinner/awin_dma.h:1.1 src/sys/arch/arm/allwinner/awin_dma.h:1.2
--- src/sys/arch/arm/allwinner/awin_dma.h:1.1	Mon Oct 13 12:34:00 2014
+++ src/sys/arch/arm/allwinner/awin_dma.h	Fri Dec  5 18:54:35 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_dma.h,v 1.1 2014/10/13 12:34:00 jmcneill Exp $ */
+/* $NetBSD: awin_dma.h,v 1.2 2014/12/05 18:54:35 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca>
@@ -33,7 +33,7 @@
 #include "opt_allwinner.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: awin_dma.h,v 1.1 2014/10/13 12:34:00 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: awin_dma.h,v 1.2 2014/12/05 18:54:35 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -74,7 +74,7 @@ void awin_dma_a10_dump_regs(struct awin_
 #endif
 
 #endif
-#if defined(ALLWINNER_A31)
+#if defined(ALLWINNER_A31) || defined(ALLWINNER_A80)
 void awin_dma_a31_attach(struct awin_dma_softc *, struct awinio_attach_args *,
 			 const struct awin_locators * const);
 #if defined(DDB)

Index: src/sys/arch/arm/allwinner/awin_dma_a31.c
diff -u src/sys/arch/arm/allwinner/awin_dma_a31.c:1.2 src/sys/arch/arm/allwinner/awin_dma_a31.c:1.3
--- src/sys/arch/arm/allwinner/awin_dma_a31.c:1.2	Mon Oct 13 13:34:54 2014
+++ src/sys/arch/arm/allwinner/awin_dma_a31.c	Fri Dec  5 18:54:35 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_dma_a31.c,v 1.2 2014/10/13 13:34:54 jmcneill Exp $ */
+/* $NetBSD: awin_dma_a31.c,v 1.3 2014/12/05 18:54:35 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca>
@@ -29,7 +29,7 @@
 #include "opt_ddb.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: awin_dma_a31.c,v 1.2 2014/10/13 13:34:54 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: awin_dma_a31.c,v 1.3 2014/12/05 18:54:35 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -96,8 +96,20 @@ awin_dma_a31_attach(struct awin_dma_soft
 
 	mutex_init(&awin_dma_a31_lock, MUTEX_DEFAULT, IPL_SCHED);
 
-	awin_reg_set_clear(aio->aio_core_bst, aio->aio_ccm_bsh,
-	    AWIN_AHB_GATING0_REG, AWIN_AHB_GATING0_DMA, 0);
+	switch (awin_chip_id()) {
+	case AWIN_CHIP_ID_A31:
+		awin_reg_set_clear(aio->aio_core_bst, aio->aio_ccm_bsh,
+		    AWIN_AHB_GATING0_REG, AWIN_AHB_GATING0_DMA, 0);
+		break;
+	case AWIN_CHIP_ID_A80:
+		awin_reg_set_clear(aio->aio_core_bst, aio->aio_ccm_bsh,
+		    AWIN_A80_CCU_SCLK_BUS_CLK_GATING1_REG,
+		    AWIN_A80_CCU_SCLK_BUS_CLK_GATING1_DMA, 0);
+		awin_reg_set_clear(aio->aio_core_bst, aio->aio_ccm_bsh,
+		    AWIN_A80_CCU_SCLK_BUS_SOFT_RST1_REG,
+		    AWIN_A80_CCU_SCLK_BUS_SOFT_RST1_DMA, 0);
+		break;
+	}
 
 	DMA_WRITE(sc, AWIN_A31_DMA_IRQ_EN_REG0_REG, 0);
 	DMA_WRITE(sc, AWIN_A31_DMA_IRQ_EN_REG1_REG, 0);

Index: src/sys/arch/arm/allwinner/awin_io.c
diff -u src/sys/arch/arm/allwinner/awin_io.c:1.35 src/sys/arch/arm/allwinner/awin_io.c:1.36
--- src/sys/arch/arm/allwinner/awin_io.c:1.35	Fri Dec  5 18:41:41 2014
+++ src/sys/arch/arm/allwinner/awin_io.c	Fri Dec  5 18:54:35 2014
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: awin_io.c,v 1.35 2014/12/05 18:41:41 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: awin_io.c,v 1.36 2014/12/05 18:54:35 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -100,6 +100,7 @@ static const struct awin_locators awin_l
 	{ "awingpio", OFFANDSIZE(A80_PIO), NOPORT, NOINTR, A80|REQ },
 	{ "awindma", OFFANDSIZE(DMA), NOPORT, AWIN_IRQ_DMA, A10|A20 },
 	{ "awindma", OFFANDSIZE(DMA), NOPORT, AWIN_A31_IRQ_DMA, A31 },
+	{ "awindma", OFFANDSIZE(A80_DMA), NOPORT, AWIN_A80_IRQ_DMA, A80 },
 	{ "awintmr", OFFANDSIZE(TMR), NOPORT, AWIN_IRQ_TMR0, A10 },
 	{ "awincnt", OFFANDSIZE(CPUCFG), NOPORT, NOINTR, A20 },
 	{ "awincnt", OFFANDSIZE(A31_CPUCFG), NOPORT, NOINTR, A31 },

Index: src/sys/arch/arm/allwinner/awin_reg.h
diff -u src/sys/arch/arm/allwinner/awin_reg.h:1.63 src/sys/arch/arm/allwinner/awin_reg.h:1.64
--- src/sys/arch/arm/allwinner/awin_reg.h:1.63	Fri Dec  5 18:41:41 2014
+++ src/sys/arch/arm/allwinner/awin_reg.h	Fri Dec  5 18:54:35 2014
@@ -2699,6 +2699,7 @@ struct awin_a31_dma_desc {
  * These offsets are relative to AWIN_A80_CORE2_PBASE
  */
 #define AWIN_A80_SYS_CTRL_OFFSET	0x00000000
+#define AWIN_A80_DMA_OFFSET		0x00002000
 #define AWIN_A80_GMAC_OFFSET		0x00030000
 
 #define AWIN_A80_SDMMC_COMM_SDC_RESET_SW	__BIT(18)
@@ -2748,6 +2749,7 @@ struct awin_a31_dma_desc {
 
 #define AWIN_A80_CCU_SCLK_BUS_CLK_GATING0_SD	__BIT(8)
 
+#define AWIN_A80_CCU_SCLK_BUS_CLK_GATING1_DMA	__BIT(24)
 #define AWIN_A80_CCU_SCLK_BUS_CLK_GATING1_GMAC	__BIT(17)
 #define AWIN_A80_CCU_SCLK_BUS_CLK_GATING1_USB_HOST __BIT(1)
 
@@ -2759,6 +2761,7 @@ struct awin_a31_dma_desc {
 
 #define AWIN_A80_CCU_SCLK_BUS_SOFT_RST0_SD	__BIT(8)
 
+#define AWIN_A80_CCU_SCLK_BUS_SOFT_RST1_DMA	__BIT(24)
 #define AWIN_A80_CCU_SCLK_BUS_SOFT_RST1_GMAC	__BIT(17)
 #define AWIN_A80_CCU_SCLK_BUS_SOFT_RST1_USB_HOST __BIT(1)
 

Index: src/sys/arch/arm/allwinner/files.awin
diff -u src/sys/arch/arm/allwinner/files.awin:1.27 src/sys/arch/arm/allwinner/files.awin:1.28
--- src/sys/arch/arm/allwinner/files.awin:1.27	Thu Dec  4 11:16:38 2014
+++ src/sys/arch/arm/allwinner/files.awin	Fri Dec  5 18:54:35 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: files.awin,v 1.27 2014/12/04 11:16:38 jmcneill Exp $
+#	$NetBSD: files.awin,v 1.28 2014/12/05 18:54:35 jmcneill Exp $
 #
 # Configuration info for Allwinner ARM Peripherals
 #
@@ -78,7 +78,7 @@ device	awindma
 attach	awindma at awinio with awin_dma
 file	arch/arm/allwinner/awin_dma.c		awin_dma
 file	arch/arm/allwinner/awin_dma_a10.c	awin_dma & (allwinner_a10 | allwinner_a20)
-file	arch/arm/allwinner/awin_dma_a31.c	awin_dma & allwinner_a31
+file	arch/arm/allwinner/awin_dma_a31.c	awin_dma & (allwinner_a31 | allwinner_a80)
 
 # A10/A20 TWI (IIC)
 device	awiniic : i2cbus, i2cexec, mvi2c

Index: src/sys/arch/evbarm/conf/ALLWINNER_A80
diff -u src/sys/arch/evbarm/conf/ALLWINNER_A80:1.5 src/sys/arch/evbarm/conf/ALLWINNER_A80:1.6
--- src/sys/arch/evbarm/conf/ALLWINNER_A80:1.5	Fri Dec  5 18:42:02 2014
+++ src/sys/arch/evbarm/conf/ALLWINNER_A80	Fri Dec  5 18:54:35 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: ALLWINNER_A80,v 1.5 2014/12/05 18:42:02 jmcneill Exp $
+#	$NetBSD: ALLWINNER_A80,v 1.6 2014/12/05 18:54:35 jmcneill Exp $
 #
 #	ALLWINNER_A80 - Allwinner A80 boards (Cubieboard4, OptimusBoard, etc)
 #
@@ -207,7 +207,7 @@ ld0		at sdmmc0
 awinicu0	at awinio0 
 
 # DMA Controller
-#awindma0	at awinio0
+awindma0	at awinio0
 
 # 64-bit counter
 #awincnt0	at awinio0

Reply via email to