Module Name:    src
Committed By:   snj
Date:           Mon Mar  9 09:29:33 UTC 2015

Modified Files:
        src/sys/arch/powerpc/booke/dev [netbsd-7]: pq3sdhc.c
        src/sys/dev/sdmmc [netbsd-7]: sdhc.c sdmmc.c

Log Message:
Pull up following revision(s) (requested by nonaka in ticket #577):
        sys/arch/powerpc/booke/dev/pq3sdhc.c: revision 1.6
        sys/dev/sdmmc/sdhc.c: revision 1.54
        sys/dev/sdmmc/sdmmc.c: revision 1.24
eSDHC has no DMA_BOUNDARY in BLOCK_SIZE register.
So clear multi segment DMA transfer support bit.
--
fix to simulate multi-segment dma transfer for pq3sdhc(4).
--
pq3sdhc: Enable DMA transfer.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.5.14.1 src/sys/arch/powerpc/booke/dev/pq3sdhc.c
cvs rdiff -u -r1.44.2.6 -r1.44.2.7 src/sys/dev/sdmmc/sdhc.c
cvs rdiff -u -r1.22.4.1 -r1.22.4.2 src/sys/dev/sdmmc/sdmmc.c

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/powerpc/booke/dev/pq3sdhc.c
diff -u src/sys/arch/powerpc/booke/dev/pq3sdhc.c:1.5 src/sys/arch/powerpc/booke/dev/pq3sdhc.c:1.5.14.1
--- src/sys/arch/powerpc/booke/dev/pq3sdhc.c:1.5	Thu Jul 26 18:38:10 2012
+++ src/sys/arch/powerpc/booke/dev/pq3sdhc.c	Mon Mar  9 09:29:32 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: pq3sdhc.c,v 1.5 2012/07/26 18:38:10 matt Exp $	*/
+/*	$NetBSD: pq3sdhc.c,v 1.5.14.1 2015/03/09 09:29:32 snj Exp $	*/
 /*-
  * Copyright (c) 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -31,7 +31,7 @@
 #define	ESDHC_PRIVATE
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pq3sdhc.c,v 1.5 2012/07/26 18:38:10 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pq3sdhc.c,v 1.5.14.1 2015/03/09 09:29:32 snj Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -87,7 +87,7 @@ pq3sdhc_attach(device_t parent, device_t
 	psc->sc_children |= cna->cna_childmask;
 	sc->sc.sc_dmat = cna->cna_dmat;
 	sc->sc.sc_dev = self;
-	//sc->sc.sc_flags |= SDHC_FLAG_USE_DMA;
+	sc->sc.sc_flags |= SDHC_FLAG_USE_DMA;
 	sc->sc.sc_flags |=
 	    SDHC_FLAG_HAVE_DVS | SDHC_FLAG_32BIT_ACCESS | SDHC_FLAG_ENHANCED;
 	sc->sc.sc_host = sc->sc_hosts;

Index: src/sys/dev/sdmmc/sdhc.c
diff -u src/sys/dev/sdmmc/sdhc.c:1.44.2.6 src/sys/dev/sdmmc/sdhc.c:1.44.2.7
--- src/sys/dev/sdmmc/sdhc.c:1.44.2.6	Tue Jan 27 08:17:09 2015
+++ src/sys/dev/sdmmc/sdhc.c	Mon Mar  9 09:29:33 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdhc.c,v 1.44.2.6 2015/01/27 08:17:09 martin Exp $	*/
+/*	$NetBSD: sdhc.c,v 1.44.2.7 2015/03/09 09:29:33 snj Exp $	*/
 /*	$OpenBSD: sdhc.c,v 1.25 2009/01/13 19:44:20 grange Exp $	*/
 
 /*
@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sdhc.c,v 1.44.2.6 2015/01/27 08:17:09 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdhc.c,v 1.44.2.7 2015/03/09 09:29:33 snj Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sdmmc.h"
@@ -425,7 +425,9 @@ sdhc_host_found(struct sdhc_softc *sc, b
 	if (ISSET(caps, SDHC_HIGH_SPEED_SUPP))
 		saa.saa_caps |= SMC_CAPS_SD_HIGHSPEED;
 	if (ISSET(hp->flags, SHF_USE_DMA)) {
-		saa.saa_caps |= SMC_CAPS_DMA | SMC_CAPS_MULTI_SEG_DMA;
+		saa.saa_caps |= SMC_CAPS_DMA;
+		if (!ISSET(hp->sc->sc_flags, SDHC_FLAG_ENHANCED))
+			saa.saa_caps |= SMC_CAPS_MULTI_SEG_DMA;
 	}
 	if (ISSET(sc->sc_flags, SDHC_FLAG_SINGLE_ONLY))
 		saa.saa_caps |= SMC_CAPS_SINGLE_ONLY;

Index: src/sys/dev/sdmmc/sdmmc.c
diff -u src/sys/dev/sdmmc/sdmmc.c:1.22.4.1 src/sys/dev/sdmmc/sdmmc.c:1.22.4.2
--- src/sys/dev/sdmmc/sdmmc.c:1.22.4.1	Mon Dec  1 11:38:43 2014
+++ src/sys/dev/sdmmc/sdmmc.c	Mon Mar  9 09:29:33 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdmmc.c,v 1.22.4.1 2014/12/01 11:38:43 martin Exp $	*/
+/*	$NetBSD: sdmmc.c,v 1.22.4.2 2015/03/09 09:29:33 snj Exp $	*/
 /*	$OpenBSD: sdmmc.c,v 1.18 2009/01/09 10:58:38 jsg Exp $	*/
 
 /*
@@ -49,7 +49,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sdmmc.c,v 1.22.4.1 2014/12/01 11:38:43 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdmmc.c,v 1.22.4.2 2015/03/09 09:29:33 snj Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sdmmc.h"
@@ -626,25 +626,31 @@ sdmmc_function_alloc(struct sdmmc_softc 
 		bus_dma_segment_t ds;
 		int rseg, error;
 
-		error = bus_dmamap_create(sc->sc_dmat, SDMMC_SECTOR_SIZE, 1,
-		    SDMMC_SECTOR_SIZE, 0, BUS_DMA_WAITOK, &sf->bbuf_dmap);
+		error = bus_dmamap_create(sc->sc_dmat, MAXPHYS, 1,
+		    MAXPHYS, 0, BUS_DMA_WAITOK, &sf->bbuf_dmap);
 		if (error)
 			goto fail1;
-		error = bus_dmamem_alloc(sc->sc_dmat, SDMMC_SECTOR_SIZE,
+		error = bus_dmamem_alloc(sc->sc_dmat, MAXPHYS,
 		    PAGE_SIZE, 0, &ds, 1, &rseg, BUS_DMA_WAITOK);
 		if (error)
 			goto fail2;
-		error = bus_dmamem_map(sc->sc_dmat, &ds, 1, SDMMC_SECTOR_SIZE,
+		error = bus_dmamem_map(sc->sc_dmat, &ds, 1, MAXPHYS,
 		    &sf->bbuf, BUS_DMA_WAITOK);
 		if (error)
 			goto fail3;
 		error = bus_dmamap_load(sc->sc_dmat, sf->bbuf_dmap,
-		    sf->bbuf, SDMMC_SECTOR_SIZE, NULL,
+		    sf->bbuf, MAXPHYS, NULL,
 		    BUS_DMA_WAITOK|BUS_DMA_READ|BUS_DMA_WRITE);
+		if (error)
+			goto fail4;
+		error = bus_dmamap_create(sc->sc_dmat, MAXPHYS, 1,
+		    MAXPHYS, 0, BUS_DMA_WAITOK, &sf->sseg_dmap);
 		if (!error)
 			goto out;
 
-		bus_dmamem_unmap(sc->sc_dmat, sf->bbuf, SDMMC_SECTOR_SIZE);
+		bus_dmamap_unload(sc->sc_dmat, sf->bbuf_dmap);
+fail4:
+		bus_dmamem_unmap(sc->sc_dmat, sf->bbuf, MAXPHYS);
 fail3:
 		bus_dmamem_free(sc->sc_dmat, &ds, 1);
 fail2:
@@ -666,8 +672,9 @@ sdmmc_function_free(struct sdmmc_functio
 	if (ISSET(sc->sc_flags, SMF_MEM_MODE) &&
 	    ISSET(sc->sc_caps, SMC_CAPS_DMA) &&
 	    !ISSET(sc->sc_caps, SMC_CAPS_MULTI_SEG_DMA)) {
+		bus_dmamap_destroy(sc->sc_dmat, sf->sseg_dmap);
 		bus_dmamap_unload(sc->sc_dmat, sf->bbuf_dmap);
-		bus_dmamem_unmap(sc->sc_dmat, sf->bbuf, SDMMC_SECTOR_SIZE);
+		bus_dmamem_unmap(sc->sc_dmat, sf->bbuf, MAXPHYS);
 		bus_dmamem_free(sc->sc_dmat,
 		    sf->bbuf_dmap->dm_segs, sf->bbuf_dmap->dm_nsegs);
 		bus_dmamap_destroy(sc->sc_dmat, sf->bbuf_dmap);

Reply via email to