Date: Sat, 23 May 2015 10:08:58 GMT From: pratiksinghal@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r285916 - soc2015/pratiksinghal/cubie-head/sys/arm/allwinner Message-ID: <201505231008.t4NA8wH4036647@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: pratiksinghal Date: Sat May 23 10:08:58 2015 New Revision: 285916 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=285916 Log: Fixed a typo and added some useful comments Modified: soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_dma.c soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c Modified: soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_dma.c ============================================================================== --- soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_dma.c Sat May 23 09:49:40 2015 (r285915) +++ soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_dma.c Sat May 23 10:08:58 2015 (r285916) @@ -17,7 +17,7 @@ #include "a10_dma.h" -/*Total no of channels for Dedicated and Nomal DMA */ +/*Total no of channels for Dedicated and Normal DMA */ #define NNDMA 8 #define NDDMA 8 @@ -65,6 +65,7 @@ static int a10_dma_attach(device_t) ; static int a10_dma_detach(device_t) ; static void a10_dma_release_resources(device_t) ; +static void a10_temp_setup_dma() ; static void a10_dma_intr(void*) ; @@ -153,7 +154,11 @@ /* Not implemented yet. */ static void a10_dma_intr(void* ptr) { - //struct a10_dma_softc* sc = (struct a10_dma_softc*) ptr ; + struct a10_dma_softc* sc = (struct a10_dma_softc*) ptr ; + if(DMA_READ(sc, DMA_IRQ_PEND_STA_REG)&DDMA_IRQ_FULL_ENABLE(0)) + device_printf(sc->a10_dma_dev, "DDMA channel 0 end transfer interrupt received on the dma controller.") ; + else + device_printf(sc->a10_dma_dev, "Unexpected interrupt received in a10_dma_intr") ; return ; } @@ -191,6 +196,11 @@ device_printf(a10_dma_cnt->sc->a10_dma_dev, "Freed DDMA Channel no %u\n", pos) ; } +void a10_temp_setup_dma() +{ + struct a10_dma_softc* sc = a10_dma_cnt->sc ; + DMA_WRITE(sc, DMA_IRQ_EN_REG,DDMA_IRQ_FULL_ENABLE(0)) ; +} static device_method_t a10_dma_methods[] = { DEVMETHOD(device_probe, a10_dma_probe), DEVMETHOD(device_attach, a10_dma_attach), @@ -208,3 +218,6 @@ } ; DRIVER_MODULE(a10_dma, simplebus, a10_dma_driver ,a10_dma_devclass,0,0) ; + +/* The application which wants to use the DMA needs to request a DMA channel and "autoconfigure" it and then handle its interrupts. */ +/* Specifically, (wrt MMC) the MMC driver will start the DMA transfer and then wait for the interrupt to occur. */ Modified: soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c ============================================================================== --- soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c Sat May 23 09:49:40 2015 (r285915) +++ soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c Sat May 23 10:08:58 2015 (r285916) @@ -310,6 +310,7 @@ "Spurious timeout - no active request\n"); } +/* We have to request the dma controller to transfer data in this function. */ static int a10_mmc_pio_transfer(struct a10_mmc_softc *sc, struct mmc_data *data) { @@ -319,6 +320,7 @@ buf = (uint32_t *)data->data; write = (data->flags & MMC_DATA_WRITE) ? 1 : 0; bit = write ? A10_MMC_FIFO_FULL : A10_MMC_FIFO_EMPTY; + uint32_t old_resid = sc->a10_resid ; for (i = sc->a10_resid; i < (data->len >> 2); i++) { if ((A10_MMC_READ_4(sc, A10_MMC_STAS) & bit)) return (1); @@ -328,7 +330,14 @@ buf[i] = A10_MMC_READ_4(sc, A10_MMC_FIFO); sc->a10_resid = i + 1; } - + if(!write) + { + device_printf(sc->a10_dev, "Transferred %d bytes from the card\n", (i-old_resid)*4 ) ; + } + else + { + device_printf(sc->a10_dev, "Wrote %d bytes to the card\n", (i-old_resid)*4 ) ; + } return (0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201505231008.t4NA8wH4036647>