diff --git a/sys/dev/pci/pccbb.c b/sys/dev/pci/pccbb.c index 8d102d69f6a8..76f56d410613 100644 --- a/sys/dev/pci/pccbb.c +++ b/sys/dev/pci/pccbb.c @@ -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 -__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); /* diff --git a/sys/dev/pci/pccbbvar.h b/sys/dev/pci/pccbbvar.h index 9b04f972389c..995532415505 100644 --- a/sys/dev/pci/pccbbvar.h +++ b/sys/dev/pci/pccbbvar.h @@ -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;