summaryrefslogtreecommitdiffstats
path: root/sys/dev/mxge
diff options
context:
space:
mode:
authorgallatin <gallatin@FreeBSD.org>2007-06-05 15:02:14 +0000
committergallatin <gallatin@FreeBSD.org>2007-06-05 15:02:14 +0000
commite2b0046ba118954f99c12d150eb0fca9f57a813d (patch)
tree9423abf31c24c12835db3e8e72d89a523c071a1a /sys/dev/mxge
parent0ad1e85cd4ff50a85dd08dff1ae14c17a9b719bc (diff)
downloadFreeBSD-src-e2b0046ba118954f99c12d150eb0fca9f57a813d.zip
FreeBSD-src-e2b0046ba118954f99c12d150eb0fca9f57a813d.tar.gz
Use pmap_change_attr() to setup a write combine attribute for our
device memory, rather than relying on the less reliable MTRR method used by mem_range_attr_set(). Glanced at by: jhb
Diffstat (limited to 'sys/dev/mxge')
-rw-r--r--sys/dev/mxge/if_mxge.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sys/dev/mxge/if_mxge.c b/sys/dev/mxge/if_mxge.c
index 93c55a1..2feaaf6 100644
--- a/sys/dev/mxge/if_mxge.c
+++ b/sys/dev/mxge/if_mxge.c
@@ -80,6 +80,10 @@ __FBSDID("$FreeBSD$");
#include <vm/vm.h> /* for pmap_mapdev() */
#include <vm/pmap.h>
+#if defined(__i386) || defined(__amd64)
+#include <machine/specialreg.h>
+#endif
+
#include <dev/mxge/mxge_mcp.h>
#include <dev/mxge/mcp_gen_header.h>
#include <dev/mxge/if_mxge_var.h>
@@ -146,8 +150,17 @@ mxge_enable_wc(mxge_softc_t *sc)
vm_offset_t len;
int err, action;
- pa = rman_get_start(sc->mem_res);
len = rman_get_size(sc->mem_res);
+#if defined(__i386) || defined(__amd64)
+ err = pmap_change_attr((vm_offset_t) sc->sram,
+ len, PAT_WRITE_COMBINING);
+ if (err == 0)
+ return;
+ else
+ device_printf(sc->dev, "pmap_change_attr failed, %d\n",
+ err);
+#endif
+ pa = rman_get_start(sc->mem_res);
mrdesc.mr_base = pa;
mrdesc.mr_len = len;
mrdesc.mr_flags = MDF_WRITECOMBINE;
OpenPOWER on IntegriCloud