Escalde 7506-4LP PCI parity error on Asustek p2b-ds

Hiroharu Tamaru tamaru at myn.rcast.u-tokyo.ac.jp
Mon Apr 19 03:03:56 PDT 2004


Hi, there.

I got a few people asking me the same thing recently, so
I'll reply you on the ML to keep it archived.

At Mon, 19 Apr 2004 12:09:17 +0400, Artem Koutchine wrote:

> I am trying to install an escalde 7506-4LP into 32 PCI slot
> on Asustek P2B-DS motherboard with dual PIII 550Mhz 
> CPUs. I have installed the card and inisialized RAID 5 array
> (3 drives). The in inserted the FreeBSD installed disk (5.2-RC2)
> and tried installing it. During kernel boot i see message like:
> 
> twe0: <3ware Storage Controller> port 0xb800-0xb80f mem 0xe0000000-0xe07fff=
> ff,0xe0800000-0xe080000f irq 5 at device 11.0 on pci0
> twe0: PCI parity error: Reseat card, move card or buggy device present.
> (this line is repeated many times).
> 
> I have searched google and maillist archived and have found that other
> people have met this error message, but there is nowhere clear explanation
> why it is happening. Some people say it should be just ignored. Is it so?

This is the original message I wrote back then:

http://docs.freebsd.org/cgi/getmsg.cgi?fetch=0+0+archive/2002/freebsd-hardware/20020623.freebsd-hardware

I couldn't confirm if it were safe to ignore the message or
not, but I never had any trouble with it for the 1+ year
that I ran the system.  That includes mail alarting and
rebuilding the array through the 3dmd utility.  I use to run
JBOD, mirroring and RAID5 on that card.

After that, I upgraded the M/B to a P4 system (an ordinary
32-bit-PCI Intel 845 setup) and (naturally) I no longer have
any warnings.

The warning message was annoying and bloating the logs, so I
simply patched the driver not to log that particular
message, and instead just count it in a sysctl MIB.

As far as I remember, the rate at which this counter counts
was really stable for an uptime of more than one month.

The patch is against 4-stable of those days, and is attached
below for your reference.

With this patch, do a 'sysctl hw.twe.twe_pe_discard=1' to
shut the message up, and check 'sysctl hw.twe.twe_pe' to see
how many PE counts you got.

Hope it helps.

Hiroharu Tamaru.

diff -ru sys/dev/twe-/twe.c sys/dev/twe/twe.c
--- sys/dev/twe-/twe.c	Tue May 21 21:33:16 2002
+++ sys/dev/twe/twe.c	Tue May 21 21:47:34 2002
@@ -38,6 +38,8 @@
 #define TWE_DEFINE_TABLES
 #include <dev/twe/twe_tables.h>
 
+extern int twe_pe_discard;
+
 /*
  * Command submission.
  */
@@ -1595,13 +1597,17 @@
 
     if ((status_reg & TWE_STATUS_UNEXPECTED_BITS) != 0) {
 	if (time_second > (lastwarn[1] + 5)) {
+	  if (!(twe_pe_discard && (status_reg & TWE_STATUS_PCI_PARITY_ERROR))) {
 	    twe_printf(sc, "unexpected status bit(s) %b\n", status_reg & TWE_STATUS_UNEXPECTED_BITS, 
 		       TWE_STATUS_BITS_DESCRIPTION);
 	    lastwarn[1] = time_second;
+	  }
 	}
 	result = 1;
 	if (status_reg & TWE_STATUS_PCI_PARITY_ERROR) {
+	  if (!twe_pe_discard) {
 	    twe_printf(sc, "PCI parity error: Reseat card, move card or buggy device present.");
+	  }
 	    twe_clear_pci_parity_error(sc);
 	}
 	if (status_reg & TWE_STATUS_PCI_ABORT) {
diff -ru sys/dev/twe-/twe_freebsd.c sys/dev/twe/twe_freebsd.c
--- sys/dev/twe-/twe_freebsd.c	Tue May 21 21:33:16 2002
+++ sys/dev/twe/twe_freebsd.c	Tue May 21 21:40:21 2002
@@ -45,6 +45,7 @@
 #include <dev/twe/twe_tables.h>
 
 #include <sys/devicestat.h>
+#include <sys/sysctl.h>
 
 static devclass_t	twe_devclass;
 
@@ -58,6 +59,13 @@
 #define TWED_BIO_OUT
 #endif
 
+int twe_pe_discard = 0;
+unsigned int twe_pe = 0;
+
+SYSCTL_NODE(_hw, OID_AUTO, twe, CTLFLAG_RW, 0, "Twe RAID Driver mgmt");
+SYSCTL_INT(_hw_twe, OID_AUTO, pe_discard, CTLFLAG_RW, &twe_pe_discard, 0, "no msg for parity error");
+SYSCTL_UINT(_hw_twe, OID_AUTO, pe, CTLFLAG_RD, &twe_pe, 0, "parity error count");
+
 /********************************************************************************
  ********************************************************************************
                                                          Control device interface
@@ -520,6 +528,7 @@
 {
     TWE_CONTROL(sc, TWE_CONTROL_CLEAR_PARITY_ERROR);
     pci_write_config(sc->twe_dev, PCIR_STATUS, TWE_PCI_CLEAR_PARITY_ERROR, 2);
+    ++ twe_pe;
 }
 
 /********************************************************************************


More information about the freebsd-hardware mailing list