Use the AHC_DISABLE_PCI_PERR flag to silence parity error reporting on

chips where setting the FAILDIS bit is not effective.  While here,
try again to make it clear that reported parity errors indicate
a failure of some PCI device *other than* the aic7xxx controller.
This commit is contained in:
Justin T. Gibbs 2005-09-22 05:11:35 +00:00
parent a6869ccad0
commit ad3d2a4dc5
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=150453

View File

@ -2023,11 +2023,15 @@ ahc_pci_intr(struct ahc_softc *ahc)
status1 = aic_pci_read_config(ahc->dev_softc,
PCIR_STATUS + 1, /*bytes*/1);
printf("%s: PCI error Interrupt at seqaddr = 0x%x\n",
ahc_name(ahc),
ahc_inb(ahc, SEQADDR0) | (ahc_inb(ahc, SEQADDR1) << 8));
if ((status1 & ~DPE) != 0
|| (ahc->flags & AHC_DISABLE_PCI_PERR) == 0) {
printf("%s: PCI error Interrupt at seqaddr = 0x%x\n",
ahc_name(ahc),
ahc_inb(ahc, SEQADDR0) | (ahc_inb(ahc, SEQADDR1) << 8));
}
if (status1 & DPE) {
if (status1 & DPE
&& (ahc->flags & AHC_DISABLE_PCI_PERR) == 0) {
ahc->pci_target_perr_count++;
printf("%s: Data Parity Error Detected during address "
"or write data phase\n", ahc_name(ahc));
@ -2060,17 +2064,20 @@ ahc_pci_intr(struct ahc_softc *ahc)
ahc_outb(ahc, CLRINT, CLRPARERR);
}
if (ahc->pci_target_perr_count > AHC_PCI_TARGET_PERR_THRESH) {
if (ahc->pci_target_perr_count > AHC_PCI_TARGET_PERR_THRESH
&& (ahc->flags & AHC_DISABLE_PCI_PERR) == 0) {
printf(
"%s: WARNING WARNING WARNING WARNING\n"
"%s: Too many PCI parity errors observed as a target.\n"
"%s: Some device on this bus is generating bad parity.\n"
"%s: This is an error *observed by*, not *generated by*, this controller.\n"
"%s: Some device on this PCI bus is generating bad parity.\n"
"%s: This is an error *observed by*, not *generated by*, %s.\n"
"%s: PCI parity error checking has been disabled.\n"
"%s: WARNING WARNING WARNING WARNING\n",
ahc_name(ahc), ahc_name(ahc), ahc_name(ahc),
ahc_name(ahc), ahc_name(ahc), ahc_name(ahc));
ahc_name(ahc), ahc_name(ahc), ahc_name(ahc),
ahc_name(ahc));
ahc->seqctl |= FAILDIS;
ahc->flags |= AHC_DISABLE_PCI_PERR;
ahc_outb(ahc, SEQCTL, ahc->seqctl);
}
ahc_unpause(ahc);