socsvn commit: r286264 - soc2015/pratiksinghal/cubie-head/sys/arm/allwinner
pratiksinghal at FreeBSD.org
pratiksinghal at FreeBSD.org
Wed May 27 23:59:01 UTC 2015
Author: pratiksinghal
Date: Wed May 27 23:58:59 2015
New Revision: 286264
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=286264
Log:
Added locks in a10_dma for controller
Modified:
soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_dma.c
soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_dma.h
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 Wed May 27 22:30:21 2015 (r286263)
+++ soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_dma.c Wed May 27 23:58:59 2015 (r286264)
@@ -47,6 +47,7 @@
} ;
struct a10_dma_controller {
+ struct mtx a10_controller_mtx ;
struct a10_dma_softc* sc ;
struct a10_dma_channel ddma_channels[NDDMA] ;
struct a10_dma_channel ndma_channels[NNDMA] ;
@@ -86,7 +87,7 @@
sc->a10_dma_dev = dev ;
mtx_init(&sc->a10_dma_mtx, device_get_nameunit(sc->a10_dma_dev),"a10_dma", MTX_DEF) ;
-
+ mtx_init(&a10_dma_cnt->a10_controller_mtx, "A10 DMA controller", "a10_dma_controller", MTX_DEF) ;
sc->a10_dma_mem_resource = bus_alloc_resource_any(sc->a10_dma_dev, SYS_RES_MEMORY, &sc->a10_dma_mem_rid, RF_ACTIVE) ;
if(sc->a10_dma_mem_resource == NULL) {
@@ -163,7 +164,6 @@
a10_get_ddma_channel()
{
uint8_t pos = NDDMA + 1 ;
-
if(a10_dma_cnt->nddma_channels_in_use >= NDDMA)
return (pos) ;
@@ -176,10 +176,11 @@
if(pos > NDDMA)
return (pos) ;
-
+ a10_controller_lock(a10_dma_cnt) ;
a10_dma_cnt->ddma_channels[pos].in_use = 1 ;
a10_dma_cnt->nddma_channels_in_use++ ;
- a10_dma_cnt->ddma_channels[pos].a10_dma_channel_type = DDMA ;
+ a10_dma_cnt->ddma_channels[pos].a10_dma_channel_type = DDMA ;
+ a10_controller_unlock(a10_dma_cnt) ;
return pos ;
}
@@ -190,8 +191,10 @@
device_printf(a10_dma_cnt->sc->a10_dma_dev, "Invalid position %u while freeing dma channel!\n",pos) ;
return ;
}
+ a10_controller_lock(a10_dma_cnt) ;
a10_dma_cnt->ddma_channels[pos].in_use = 0 ;
a10_dma_cnt->nddma_channels_in_use-- ;
+ a10_controller_unlock(a10_dma_cnt) ;
device_printf(a10_dma_cnt->sc->a10_dma_dev, "Freed DDMA Channel no %u\n", pos) ;
}
Modified: soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_dma.h
==============================================================================
--- soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_dma.h Wed May 27 22:30:21 2015 (r286263)
+++ soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_dma.h Wed May 27 23:58:59 2015 (r286264)
@@ -51,6 +51,9 @@
#define a10_dma_lock(_sc) mtx_lock(&(_sc)->a10_dma_mtx)
#define a10_dma_unlock(_sc) mtx_unlock(&(_sc)->a10_dma_mtx)
+#define a10_controller_lock(_sc) mtx_lock(&(_sc)->a10_controller_mtx)
+#define a10_controller_unlock(_sc) mtx_unlock(&(_sc)->a10_controller_mtx)
+
/* Helper Macros */
#define SET_BIT(n) (1 << (n))
Modified: soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c
==============================================================================
--- soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c Wed May 27 22:30:21 2015 (r286263)
+++ soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c Wed May 27 23:58:59 2015 (r286264)
@@ -62,6 +62,7 @@
struct a10_mmc_softc {
bus_space_handle_t a10_bsh;
bus_space_tag_t a10_bst;
+ //bus_dma_tag_t a10_dmat ;
device_t a10_dev;
int a10_bus_busy;
int a10_id;
@@ -190,7 +191,17 @@
goto fail;
}
sc->ddma_channel = NDDMA + 1 ;
- sc->use_dma = 0 ;
+ sc->use_dma = 0 ;
+
+ // /* Setup DMA */
+ // uint32_t err = bus_dma_tag_create(bus_get_dma_tag(dev), 4096,0,
+ // BUS_SPACE_MAXADDR,BUS_SPACE_MAXADDR,NULL,NULL,
+ // BUS_SPACE_UNRESTRICTED,1,PAGE_SIZE,0,
+ // busdma_lock_mutex,&sc->sc_mtx,&sc->a10_dmat) ;
+ // if(err) {
+ // device_printf(dev, "Could not create dma tag.\n");
+ // goto fail ;
+ // }
return (0);
fail:
@@ -691,7 +702,7 @@
static void a10_mmc_init_dma(device_t parent)
{
/* Identify the parent tag. */
- bus_dma_tag_t parent_tag = bus_get_dma_tag(parent) ;
+ //bus_dma_tag_t parent_tag = bus_get_dma_tag(parent) ;
/*TODO :- Create children dma tags and maps and initiate the dma transfer. */
}
More information about the svn-soc-all
mailing list