summaryrefslogtreecommitdiffstats
path: root/sys/alpha
diff options
context:
space:
mode:
authormjacob <mjacob@FreeBSD.org>2000-09-11 21:10:25 +0000
committermjacob <mjacob@FreeBSD.org>2000-09-11 21:10:25 +0000
commitb86ac90f88aa6c735b2e09cc5a5a69ef0d5122e9 (patch)
tree78a482e1c40802db84b4471c8537a840f7ed12d7 /sys/alpha
parenteeb5416b4738f452cac300d13f704c4b03d5d370 (diff)
downloadFreeBSD-src-b86ac90f88aa6c735b2e09cc5a5a69ef0d5122e9.zip
FreeBSD-src-b86ac90f88aa6c735b2e09cc5a5a69ef0d5122e9.tar.gz
Well, this works for me and I can now boot my PC164 again.
Nobody said it broke their system.
Diffstat (limited to 'sys/alpha')
-rw-r--r--sys/alpha/pci/cia.c75
1 files changed, 41 insertions, 34 deletions
diff --git a/sys/alpha/pci/cia.c b/sys/alpha/pci/cia.c
index da618c5..7357753 100644
--- a/sys/alpha/pci/cia.c
+++ b/sys/alpha/pci/cia.c
@@ -355,31 +355,7 @@ cia_init()
if (initted) return;
initted = 1;
- cia_rev = REGVAL(CIA_CSR_REV) & REV_MASK;
-
- /*
- * Determine if we have a Pyxis. Only two systypes can
- * have this: the EB164 systype (AlphaPC164LX and AlphaPC164SX)
- * and the DEC_ST550 systype (Miata).
- */
- if ((hwrpb->rpb_type == ST_EB164 &&
- (hwrpb->rpb_variation & SV_ST_MASK) >= SV_ST_ALPHAPC164LX_400) ||
- hwrpb->rpb_type == ST_DEC_550)
- cia_ispyxis = TRUE;
- else
- cia_ispyxis = FALSE;
-
- /*
- * ALCOR/ALCOR2 Revisions >= 2 and Pyxis have the CNFG register.
- */
- if (cia_rev >= 2 || cia_ispyxis)
- cia_config = REGVAL(CIA_CSR_CNFG);
- else
- cia_config = 0;
-
- if (alpha_implver() != ALPHA_IMPLVER_EV5
- || alpha_amask(ALPHA_AMASK_BWX)
- || !(cia_config & CNFG_BWEN)) {
+ if (chipset_bwx == 0) {
swiz_init_space(&io_space.swiz, KV(CIA_PCI_SIO1));
swiz_init_space_hae(&mem_space.swiz, KV(CIA_PCI_SMEM1),
cia_swiz_set_hae_mem, 0);
@@ -414,16 +390,47 @@ cia_probe(device_t dev)
isa_init_intr();
cia_init_sgmap();
- if (alpha_implver() != ALPHA_IMPLVER_EV5
- || alpha_amask(ALPHA_AMASK_BWX)
- || !(cia_config & CNFG_BWEN))
+ cia_rev = REGVAL(CIA_CSR_REV) & REV_MASK;
+
+ /*
+ * Determine if we have a Pyxis. Only two systypes can
+ * have this: the EB164 systype (AlphaPC164LX and AlphaPC164SX)
+ * and the DEC_ST550 systype (Miata).
+ */
+ if ((hwrpb->rpb_type == ST_EB164 &&
+ (hwrpb->rpb_variation & SV_ST_MASK) >= SV_ST_ALPHAPC164LX_400) ||
+ hwrpb->rpb_type == ST_DEC_550)
+ cia_ispyxis = TRUE;
+ else
+ cia_ispyxis = FALSE;
+
+
+
+ /*
+ * ALCOR/ALCOR2 Revisions >= 2 and Pyxis have the CNFG register.
+ */
+ if (cia_rev >= 2 || cia_ispyxis)
+ cia_config = REGVAL(CIA_CSR_CNFG);
+ else
+ cia_config = 0;
+
+ if ((alpha_implver() < ALPHA_IMPLVER_EV5) ||
+ (alpha_amask(ALPHA_AMASK_BWX) != 0) ||
+ (cia_config & CNFG_BWEN) == 0) {
use_bwx = 0;
+ } else {
+ use_bwx = 1;
+ }
+
+ if (cia_ispyxis) {
+ if (use_bwx == 0) {
+ printf("PYXIS but not BWX?\n");
+ }
+ }
device_add_child(dev, "pcib", 0);
device_set_ivars(dev, (void *)use_bwx);
-
- chipset_bwx = use_bwx;
-
+ chipset_bwx = use_bwx = (use_bwx == (uintptr_t) 1);
return 0;
}
@@ -485,14 +492,14 @@ cia_attach(device_t dev)
if (!platform.iointr) /* XXX */
set_iointr(alpha_dispatch_intr);
- if (cia_ispyxis) {
- snprintf(chipset_type, sizeof(chipset_type), "pyxis");
+ if (chipset_bwx) {
+ snprintf(chipset_type, sizeof(chipset_type), "cia/bwx");
chipset_bwx = 1;
chipset_ports = CIA_EV56_BWIO;
chipset_memory = CIA_EV56_BWMEM;
chipset_dense = CIA_PCI_DENSE;
} else {
- snprintf(chipset_type, sizeof(chipset_type), "cia");
+ snprintf(chipset_type, sizeof(chipset_type), "cia/swiz");
chipset_bwx = 0;
chipset_ports = CIA_PCI_SIO1;
chipset_memory = CIA_PCI_SMEM1;
OpenPOWER on IntegriCloud