Module Name: src
Committed By: cliff
Date: Fri Apr 16 23:44:18 UTC 2010
Modified Files:
src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixl_pcix.c
Log Message:
- in attach, if Host BAR does not cover all RAM, instead of panic,
complain a lot, and force use of DMA bounce buffers
To generate a diff of this commit:
cvs rdiff -u -r1.1.2.3 -r1.1.2.4 src/sys/arch/mips/rmi/rmixl_pcix.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/mips/rmi/rmixl_pcix.c
diff -u src/sys/arch/mips/rmi/rmixl_pcix.c:1.1.2.3 src/sys/arch/mips/rmi/rmixl_pcix.c:1.1.2.4
--- src/sys/arch/mips/rmi/rmixl_pcix.c:1.1.2.3 Mon Apr 12 22:42:07 2010
+++ src/sys/arch/mips/rmi/rmixl_pcix.c Fri Apr 16 23:44:17 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: rmixl_pcix.c,v 1.1.2.3 2010/04/12 22:42:07 cliff Exp $ */
+/* $NetBSD: rmixl_pcix.c,v 1.1.2.4 2010/04/16 23:44:17 cliff Exp $ */
/*
* Copyright (c) 2001 Wasabi Systems, Inc.
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_pcix.c,v 1.1.2.3 2010/04/12 22:42:07 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixl_pcix.c,v 1.1.2.4 2010/04/16 23:44:17 cliff Exp $");
#include "opt_pci.h"
#include "pci.h"
@@ -316,7 +316,7 @@
sc->sc_64bit_dmat = obio->obio_64bit_dmat;
sc->sc_tmsk = obio->obio_tmsk;
- aprint_normal(" RMI XLR PCI-X Interface\n");
+ aprint_normal(": RMI XLR PCI-X Interface\n");
rmixl_pcix_intcfg(sc);
@@ -351,13 +351,23 @@
hbar_size |= (uint64_t)hbar_size_hi << 32;
}
if ((hbar_addr != 0) || (hbar_size < mem_cluster_maxaddr)) {
- printf("%s: HostBAR0 addr %#x, size %#x\n",
- device_xname(self), hbar_addr_lo, hbar_size_lo);
+ aprint_error_dev(self, "HostBAR0 addr %#x, size %#x\n",
+ hbar_addr_lo, hbar_size_lo);
if ((hbar_size_lo & PCI_MAPREG_MEM_TYPE_64BIT) != 0)
- printf("%s: HostBAR1 addr %#x, size %#x\n",
- device_xname(self), hbar_addr_hi, hbar_size_hi);
- panic("PCI-X Host BAR does not cover RAM range 0..%#"PRIx64,
- mem_cluster_maxaddr);
+ aprint_error_dev(self, "HostBAR1 addr %#x, size %#x\n",
+ hbar_addr_hi, hbar_size_hi);
+ aprint_error_dev(self, "WARNING: firmware PCI-X setup error: "
+ "RAM %#"PRIx64"..%#"PRIx64" not accessible by Host BAR, "
+ "enabling DMA bounce buffers\n",
+ hbar_size, mem_cluster_maxaddr-1);
+
+ /* force use of bouce buffers for uncovered RAM */
+ if (hbar_size < ((uint64_t)1 << 32)) {
+ sc->sc_64bit_dmat = NULL;
+ sc->sc_32bit_dmat->_bounce_alloc_hi = hbar_size;
+ } else {
+ sc->sc_64bit_dmat->_bounce_alloc_hi = hbar_size;
+ }
}
/*
@@ -531,8 +541,7 @@
*/
struct rmixl_config *rcp = &rmixl_configuration;
- aprint_normal("%s: configuring PCI bus\n",
- device_xname(sc->sc_dev));
+ aprint_normal_dev(sc->sc_dev, "%s: configuring PCI bus\n");
ioext = extent_create("pciio",
rcp->rc_pci_io_pbase,