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