Distinguish O2 Micro bridges from generic bridges. PCI Parity

Error reporting seems to be broken on O2 Micro bridges, so do not
activate it.  Should fix kern/38698, reported by Andreas Gustafsson.
This commit is contained in:
dyoung 2008-05-27 21:32:47 +00:00
parent 71f2cf5b71
commit ea0d0ed51e
2 changed files with 31 additions and 4 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: pccbb.c,v 1.168 2008/05/22 01:22:17 dyoung Exp $ */
/* $NetBSD: pccbb.c,v 1.169 2008/05/27 21:32:47 dyoung Exp $ */
/*
* Copyright (c) 1998, 1999 and 2000
@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: pccbb.c,v 1.168 2008/05/22 01:22:17 dyoung Exp $");
__KERNEL_RCSID(0, "$NetBSD: pccbb.c,v 1.169 2008/05/27 21:32:47 dyoung Exp $");
/*
#define CBB_DEBUG
@ -362,6 +362,24 @@ const struct yenta_chipinfo {
{ MAKEID(PCI_VENDOR_CIRRUS, PCI_PRODUCT_CIRRUS_CL_PD6833),
CB_CIRRUS, PCCBB_PCMCIA_MEM_32},
/* O2 Micro products */
{ MAKEID(PCI_VENDOR_O2MICRO, PCI_PRODUCT_O2MICRO_OZ6729),
CB_O2MICRO, PCCBB_PCMCIA_MEM_32},
{ MAKEID(PCI_VENDOR_O2MICRO, PCI_PRODUCT_O2MICRO_OZ6730),
CB_O2MICRO, PCCBB_PCMCIA_MEM_32},
{ MAKEID(PCI_VENDOR_O2MICRO, PCI_PRODUCT_O2MICRO_OZ6832),
CB_O2MICRO, PCCBB_PCMCIA_MEM_32},
{ MAKEID(PCI_VENDOR_O2MICRO, PCI_PRODUCT_O2MICRO_OZ6836),
CB_O2MICRO, PCCBB_PCMCIA_MEM_32},
{ MAKEID(PCI_VENDOR_O2MICRO, PCI_PRODUCT_O2MICRO_OZ6872),
CB_O2MICRO, PCCBB_PCMCIA_MEM_32},
{ MAKEID(PCI_VENDOR_O2MICRO, PCI_PRODUCT_O2MICRO_OZ6922),
CB_O2MICRO, PCCBB_PCMCIA_MEM_32},
{ MAKEID(PCI_VENDOR_O2MICRO, PCI_PRODUCT_O2MICRO_OZ6933),
CB_O2MICRO, PCCBB_PCMCIA_MEM_32},
{ MAKEID(PCI_VENDOR_O2MICRO, PCI_PRODUCT_O2MICRO_OZ6972),
CB_O2MICRO, PCCBB_PCMCIA_MEM_32},
/* sentinel, or Generic chip */
{ 0 /* null id */ , CB_UNKNOWN, PCCBB_PCMCIA_MEM_32},
};
@ -746,7 +764,15 @@ pccbb_chipinit(struct pccbb_softc *sc)
/* I believe it is harmless. */
csr |= (PCI_COMMAND_IO_ENABLE | PCI_COMMAND_MEM_ENABLE |
PCI_COMMAND_MASTER_ENABLE);
csr |= (PCI_COMMAND_PARITY_ENABLE|PCI_COMMAND_SERR_ENABLE);
/* All O2 Micro chips have broken parity-error reporting
* until proven otherwise. The OZ6933 PCI-CardBus Bridge
* is known to have the defect---see PR kern/38698.
*/
if (sc->sc_chipset != CB_O2MICRO)
csr |= PCI_COMMAND_PARITY_ENABLE;
csr |= PCI_COMMAND_SERR_ENABLE;
pci_conf_write(pc, tag, PCI_COMMAND_STATUS_REG, csr);
/*

View File

@ -1,4 +1,4 @@
/* $NetBSD: pccbbvar.h,v 1.33 2008/01/15 21:55:24 christos Exp $ */
/* $NetBSD: pccbbvar.h,v 1.34 2008/05/27 21:32:47 dyoung Exp $ */
/*
* Copyright (c) 1999 HAYAKAWA Koichi. All rights reserved.
*
@ -52,6 +52,7 @@
#define CB_CIRRUS 8 /* Cirrus Logic CL-PD683X */
#define CB_TI125X 9 /* TI PCI1250/1251(B)/1450 */
#define CB_TI1420 10 /* TI PCI1420 */
#define CB_O2MICRO 11 /* O2 Micro 67xx/68xx/69xx */
struct pccbb_softc;
struct pccbb_intrhand_list;