diff options
author | gallatin <gallatin@FreeBSD.org> | 2007-06-05 15:02:14 +0000 |
---|---|---|
committer | gallatin <gallatin@FreeBSD.org> | 2007-06-05 15:02:14 +0000 |
commit | e2b0046ba118954f99c12d150eb0fca9f57a813d (patch) | |
tree | 9423abf31c24c12835db3e8e72d89a523c071a1a /sys/dev | |
parent | 0ad1e85cd4ff50a85dd08dff1ae14c17a9b719bc (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/dev/mxge/if_mxge.c | 15 |
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; |