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);