diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2007-12-18 19:39:28 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2007-12-18 19:39:28 +0000 |
commit | 6419734f0d7db56ba7400f42ff11714b3b3a0b93 (patch) | |
tree | 33acbfe8022daa8d8e9811bde11d036fbbd55533 /sys | |
parent | 77542aa901a76f5b145d7a04a62597c53cc79e5c (diff) |
Better probe routine for lcg, now that I found the magic bit on KA46.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/vax/vsa/lcg.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/sys/arch/vax/vsa/lcg.c b/sys/arch/vax/vsa/lcg.c index a6c7eafccf1..416ab9265ca 100644 --- a/sys/arch/vax/vsa/lcg.c +++ b/sys/arch/vax/vsa/lcg.c @@ -1,4 +1,4 @@ -/* $OpenBSD: lcg.c,v 1.11 2007/10/01 16:11:19 krw Exp $ */ +/* $OpenBSD: lcg.c,v 1.12 2007/12/18 19:39:27 miod Exp $ */ /* * Copyright (c) 2006 Miodrag Vallat. * @@ -158,32 +158,39 @@ lcg_match(struct device *parent, void *vcf, void *aux) struct vsbus_softc *sc = (void *)parent; struct vsbus_attach_args *va = aux; vaddr_t cfgreg; - int depth, missing; + int depth; +#ifdef PARANOIA + int missing; volatile u_int8_t *ch; +#endif + + if (va->va_paddr != LCG_REG_ADDR) + return (0); switch (vax_boardtype) { default: return (0); case VAX_BTYP_46: - case VAX_BTYP_48: - if (va->va_paddr != LCG_REG_ADDR) + if ((vax_confdata & 0x40) == 0) return (0); - + break; + case VAX_BTYP_48: + /* KA48 can't boot without the frame buffer board */ break; } /* - * Check the configuration register. - * This is done to sort out empty frame buffer slots, since the video - * memory test sometimes passes! + * Check the configuration register. The frame buffer might not be + * an lcg board. */ cfgreg = vax_map_physmem(LCG_CONFIG_ADDR, 1); depth = lcg_probe_screen(*(volatile u_int32_t *)cfgreg, NULL, NULL); vax_unmap_physmem(cfgreg, 1); - if (depth < 0) /* no frame buffer */ + if (depth < 0) /* no lcg frame buffer */ return (0); +#ifdef PARANOIA /* * Check for video memory. * We can not use badaddr() on these models. @@ -201,6 +208,7 @@ lcg_match(struct device *parent, void *vcf, void *aux) vax_unmap_physmem((vaddr_t)ch, 1); if (missing != 0) return (0); +#endif sc->sc_mask = 0x04; /* XXX - should be generated */ scb_fake(0x120, 0x15); @@ -706,10 +714,15 @@ lcgcnprobe() extern vaddr_t virtual_avail; u_int32_t cfg; vaddr_t tmp; +#ifdef PARANOIA volatile u_int8_t *ch; +#endif switch (vax_boardtype) { case VAX_BTYP_46: + if ((vax_confdata & 0x40) == 0) + break; /* no frame buffer */ + /* FALLTHROUGH */ case VAX_BTYP_48: if ((vax_confdata & 0x100) != 0) break; /* doesn't use graphics console */ @@ -720,8 +733,9 @@ lcgcnprobe() (tmp + (LCG_CONFIG_ADDR & VAX_PGOFSET)); if (lcg_probe_screen(cfg, NULL, NULL) <= 0) - break; /* unsupported configuration */ + break; /* no lcg or unsupported configuration */ +#ifdef PARANOIA /* * Check for video memory. * We can not use badaddr() on these models. @@ -734,6 +748,7 @@ lcgcnprobe() *ch = 0x00; if ((*ch & 0x01) != 0) break; +#endif return (1); |