summaryrefslogtreecommitdiffstats
path: root/sys/alpha/pci
diff options
context:
space:
mode:
authorticso <ticso@FreeBSD.org>2002-04-17 13:57:50 +0000
committerticso <ticso@FreeBSD.org>2002-04-17 13:57:50 +0000
commit3c9d9503e20003c7db21575321e128375d730e28 (patch)
treef1575076d05954cd39f6b5225baeef1e0d5ff6a9 /sys/alpha/pci
parentdc24ddd41e8f19486380221cdd30ad699719d0d2 (diff)
downloadFreeBSD-src-3c9d9503e20003c7db21575321e128375d730e28.zip
FreeBSD-src-3c9d9503e20003c7db21575321e128375d730e28.tar.gz
Clear the error flags in the LCA_IOC_STAT0 register after
machine_checks. This fixes pci config reads for non existing devices on secondary pci busses. Thanks to Andrew Gallatin for pointing me to the register Reviewed by: gallatin Approved by: gallatin
Diffstat (limited to 'sys/alpha/pci')
-rw-r--r--sys/alpha/pci/lca.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/sys/alpha/pci/lca.c b/sys/alpha/pci/lca.c
index 92a5afa..fcfede1 100644
--- a/sys/alpha/pci/lca.c
+++ b/sys/alpha/pci/lca.c
@@ -215,6 +215,10 @@ lca_init()
chipset = lca_chipset;
}
+static void
+lca_machine_check(unsigned long mces, struct trapframe *framep,
+ unsigned long vector, unsigned long param);
+
static int
lca_probe(device_t dev)
{
@@ -226,6 +230,8 @@ lca_probe(device_t dev)
isa_init_intr();
lca_init_sgmap();
+ platform.mcheck_handler = lca_machine_check;
+
device_add_child(dev, "pcib", 0);
return 0;
@@ -249,5 +255,17 @@ lca_attach(device_t dev)
return 0;
}
+static void
+lca_machine_check(unsigned long mces, struct trapframe *framep,
+ unsigned long vector, unsigned long param)
+{
+ long stat0;
+
+ machine_check(mces, framep, vector, param);
+ /* clear error flags in IOC_STATUS0 register */
+ stat0 = REGVAL64(LCA_IOC_STAT0);
+ REGVAL64(LCA_IOC_STAT0) = stat0;
+}
+
DRIVER_MODULE(lca, root, lca_driver, lca_devclass, 0, 0);
OpenPOWER on IntegriCloud