From owner-svn-soc-all@FreeBSD.ORG Sat Jun 20 12:15:09 2015 Return-Path: Delivered-To: svn-soc-all@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id D18B3772 for ; Sat, 20 Jun 2015 12:15:09 +0000 (UTC) (envelope-from pratiksinghal@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B30E2970 for ; Sat, 20 Jun 2015 12:15:09 +0000 (UTC) (envelope-from pratiksinghal@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.9/8.14.9) with ESMTP id t5KCF9xF021749 for ; Sat, 20 Jun 2015 12:15:09 GMT (envelope-from pratiksinghal@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.9/8.14.9/Submit) id t5KCF9OG021731 for svn-soc-all@FreeBSD.org; Sat, 20 Jun 2015 12:15:09 GMT (envelope-from pratiksinghal@FreeBSD.org) Date: Sat, 20 Jun 2015 12:15:09 GMT Message-Id: <201506201215.t5KCF9OG021731@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to pratiksinghal@FreeBSD.org using -f From: pratiksinghal@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r287377 - soc2015/pratiksinghal/cubie-head/sys/arm/allwinner MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2015 12:15:10 -0000 Author: pratiksinghal Date: Sat Jun 20 12:15:08 2015 New Revision: 287377 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=287377 Log: Corrected the way segment address is passed in prepare function Modified: soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c Modified: soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c ============================================================================== --- soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c Sat Jun 20 11:20:25 2015 (r287376) +++ soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_mmc.c Sat Jun 20 12:15:08 2015 (r287377) @@ -97,7 +97,7 @@ int a10_dma_ops ; bus_dma_tag_t a10_dma_buff_tag ; bus_dmamap_t a10_dma_buff_map ; - bus_addr_t a10_dma_buff_addr ; + bus_addr_t a10_dma_buff_addrs[A10_DMA_NSEGS] ; }; @@ -230,7 +230,7 @@ sc->a10_use_dma = 0 ; } } - sc->a10_dma_buff_addr = 0; + sc->a10_dma_buff_addrs[0] = 0; #ifdef DEBUG device_printf(sc->a10_dev, "DMA status %d\n", sc->a10_use_dma) ; #endif @@ -300,22 +300,22 @@ rem = min(len,cmd->data->len) ; uint32_t error = bus_dmamap_load(sc->a10_dma_buff_tag, sc->a10_dma_buff_map, cmd->data->data,rem,a10_dma_buff_cb, - &sc->a10_dma_buff_addr,0) ; + sc->a10_dma_buff_addrs,0) ; if (error == EINPROGRESS) { - for( ; sc->a10_dma_buff_addr == 0 ; ) { } + for( ; sc->a10_dma_buff_addrs[0] == 0 ; ) { } } else if (error != 0) { device_printf(sc->a10_dev, "DMA transaction failed due to insufficient resources\n") ; return EIO ; } - bus_addr_t paddr = sc->a10_dma_buff_addr ; while (rem > 0) { if (desc == sc->a10_dma_ndesc) break ; len = min(sc->a10_dma_xfer_len, rem) ; dma[desc].buff_size = htole32(len) ; - dma[desc].buff_addr = htole32(paddr + off) ; + device_printf(sc->a10_dev, "The address is %lu\n", sc->a10_dma_buff_addrs[desc]) ; + dma[desc].buff_addr = htole32(sc->a10_dma_buff_addrs[desc]) ; dma[desc].config = htole32(A10_MMC_DMA_CONFIG_CH|A10_MMC_DMA_CONFIG_OWN) ; cmd->data->len -= len ; @@ -374,11 +374,10 @@ static int a10_mmc_can_do_dma(struct mmc_request* req) { - return (1) ; - //if ((req->cmd->data->len > A10_MMC_DMA_MAXLEN) || (req->cmd->data->len <= A10_MMC_DMA_MINLEN)) - // return (0) ; - //else - // return (1) ; + if ((req->cmd->data->len > A10_MMC_DMA_MAXLEN) || (req->cmd->data->len <= A10_MMC_DMA_MINLEN)) + return (0) ; + else + return (1) ; } static void a10_dma_cb(void* arg, bus_dma_segment_t* segs, int nsegs, int error) @@ -399,7 +398,10 @@ printf("a10_mmc: Error in a10_dma_buff_callback function, code = %d\n", error) ; return ; } - *(bus_addr_t*)arg = segs[0].ds_addr ; + bus_addr_t* ptr = (bus_addr_t*) arg ; + int i = 0; + for(i=0; ia10_resid = 0; sc->a10_idst = 0 ; sc->a10_intr_wait = 0; - sc->a10_dma_buff_addr = 0 ; + sc->a10_dma_buff_addrs[0] = 0 ; req->done(req); }