summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2011-04-21 21:56:28 +0000
committermarius <marius@FreeBSD.org>2011-04-21 21:56:28 +0000
commit72db64ceeaeef4fc6ff9287d3f3da51be1657bf0 (patch)
treea1d47c7c2354d8cbc35ae6450bc5d72c73ecb0b5
parent67b7f32d210bfb9796258a6989b0e1706e8c7bab (diff)
downloadFreeBSD-src-72db64ceeaeef4fc6ff9287d3f3da51be1657bf0.zip
FreeBSD-src-72db64ceeaeef4fc6ff9287d3f3da51be1657bf0.tar.gz
- Use the streaming cache unless BUS_DMA_COHERENT is specified. Since
r220375 all drivers enabled in the sparc64 GENERIC should be either correctly using bus_dmamap_sync(9) calls or supply BUS_DMA_COHERENT when appropriate or as a workaround for missing bus_dmamap_sync(9) calls (sound(4) drivers and partially sym(4)). In at least some configurations taking advantage of the streaming cache results in a modest performance improvement. - Remove the memory barrier for BUS_DMASYNC_PREREAD which as the comment already suggested is bogus. - Add my copyright for having implemented several things like support for the Fire and Oberon IOMMUs, taking over PROM IOMMU mappings etc.
-rw-r--r--sys/sparc64/sparc64/iommu.c14
1 files changed, 1 insertions, 13 deletions
diff --git a/sys/sparc64/sparc64/iommu.c b/sys/sparc64/sparc64/iommu.c
index 2fa1c12..d151ce7 100644
--- a/sys/sparc64/sparc64/iommu.c
+++ b/sys/sparc64/sparc64/iommu.c
@@ -28,6 +28,7 @@
/*-
* Copyright (c) 1999-2002 Eduardo Horvath
* Copyright (c) 2001-2003 Thomas Moestl
+ * Copyright (c) 2007, 2009 Marius Strobl <marius@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -77,7 +78,6 @@ __FBSDID("$FreeBSD$");
* - When running out of DVMA space, return EINPROGRESS in the non-
* BUS_DMA_NOWAIT case and delay the callback until sufficient space
* becomes available.
- * - Use the streaming cache unless BUS_DMA_COHERENT is specified.
*/
#include "opt_iommu.h"
@@ -564,17 +564,8 @@ static __inline int
iommu_use_streaming(struct iommu_state *is, bus_dmamap_t map, bus_size_t size)
{
- /*
- * This cannot be enabled yet, as many driver are still missing
- * bus_dmamap_sync() calls. As soon as there is a BUS_DMA_STREAMING
- * flag, this should be reenabled conditionally on it.
- */
-#ifdef notyet
return (size >= IOMMU_STREAM_THRESH && IOMMU_HAS_SB(is) &&
(map->dm_flags & DMF_COHERENT) == 0);
-#else
- return (0);
-#endif
}
/*
@@ -1182,9 +1173,6 @@ iommu_dvmamap_sync(bus_dma_tag_t dt, bus_dmamap_t map, bus_dmasync_op_t op)
if ((map->dm_flags & DMF_LOADED) == 0)
return;
- /* XXX This is probably bogus. */
- if ((op & BUS_DMASYNC_PREREAD) != 0)
- membar(Sync);
if ((map->dm_flags & DMF_STREAMED) != 0 &&
((op & BUS_DMASYNC_POSTREAD) != 0 ||
(op & BUS_DMASYNC_PREWRITE) != 0)) {
OpenPOWER on IntegriCloud