summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/pci/pci.c22
-rw-r--r--sys/dev/pci/pci_map.c12
2 files changed, 13 insertions, 21 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index eb28392e01e..e68226b8cbd 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci.c,v 1.45 2006/03/22 00:36:03 jsg Exp $ */
+/* $OpenBSD: pci.c,v 1.46 2006/07/04 18:07:29 kettenis Exp $ */
/* $NetBSD: pci.c,v 1.31 1997/06/06 23:48:04 thorpej Exp $ */
/*
@@ -222,7 +222,6 @@ pcisubmatch(struct device *parent, void *match, void *aux)
{
struct cfdata *cf = match;
struct pci_attach_args *pa = aux;
- int success;
if (cf->pcicf_dev != PCI_UNK_DEV &&
cf->pcicf_dev != pa->pa_device)
@@ -231,24 +230,7 @@ pcisubmatch(struct device *parent, void *match, void *aux)
cf->pcicf_function != pa->pa_function)
return (0);
- success = (*cf->cf_attach->ca_match)(parent, match, aux);
-
- /*
- * My Dell BIOS does not enable certain non-critical PCI devices
- * for IO and memory cycles (e.g. network card). This is
- * the generic approach to fixing this problem. Basically, if
- * we support the card, then we enable its IO cycles.
- */
- if (success) {
- pcireg_t csr = pci_conf_read(pa->pa_pc, pa->pa_tag,
- PCI_COMMAND_STATUS_REG);
-
- pci_conf_write(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG,
- csr | PCI_COMMAND_MASTER_ENABLE |
- PCI_COMMAND_IO_ENABLE | PCI_COMMAND_MEM_ENABLE);
- }
-
- return (success);
+ return ((*cf->cf_attach->ca_match)(parent, match, aux));
}
int
diff --git a/sys/dev/pci/pci_map.c b/sys/dev/pci/pci_map.c
index aee590c3b27..c95487360bf 100644
--- a/sys/dev/pci/pci_map.c
+++ b/sys/dev/pci/pci_map.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_map.c,v 1.16 2006/05/31 08:58:05 jason Exp $ */
+/* $OpenBSD: pci_map.c,v 1.17 2006/07/04 18:07:29 kettenis Exp $ */
/* $NetBSD: pci_map.c,v 1.7 2000/05/10 16:58:42 thorpej Exp $ */
/*-
@@ -306,9 +306,19 @@ pci_mapreg_map(struct pci_attach_args *pa, int reg, pcireg_t type, int busflags,
bus_space_handle_t handle;
bus_addr_t base;
bus_size_t size;
+ pcireg_t csr;
int flags;
int rv;
+ csr = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG);
+ if (PCI_MAPREG_TYPE(type) == PCI_MAPREG_TYPE_IO)
+ csr |= PCI_COMMAND_IO_ENABLE;
+ else
+ csr |= PCI_COMMAND_MEM_ENABLE;
+ /* XXX Should this only be done for devices that do DMA? */
+ csr |= PCI_COMMAND_MASTER_ENABLE;
+ pci_conf_write(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG, csr);
+
if (PCI_MAPREG_TYPE(type) == PCI_MAPREG_TYPE_IO) {
if ((pa->pa_flags & PCI_FLAGS_IO_ENABLED) == 0)
return (EINVAL);