summaryrefslogtreecommitdiff
path: root/sys/arch/sgi
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2012-04-09 16:54:41 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2012-04-09 16:54:41 +0000
commit92c83f480df669d773e23164b46812f34d2b715a (patch)
tree5fc7efb79124e3163dac398f7ba888fa4c69de0c /sys/arch/sgi
parent6b14259b6e5a76ba05e03964de657b5da1c73cba (diff)
More errata bandaid for the R4000SC is necessary in the tlb handlers.
Diffstat (limited to 'sys/arch/sgi')
-rw-r--r--sys/arch/sgi/sgi/machdep.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/sys/arch/sgi/sgi/machdep.c b/sys/arch/sgi/sgi/machdep.c
index 4e29f8f0a7a..d4fa84805cd 100644
--- a/sys/arch/sgi/sgi/machdep.c
+++ b/sys/arch/sgi/sgi/machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: machdep.c,v 1.117 2012/04/06 18:24:29 miod Exp $ */
+/* $OpenBSD: machdep.c,v 1.118 2012/04/09 16:54:40 miod Exp $ */
/*
* Copyright (c) 2003-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -536,7 +536,15 @@ mips_init(int argc, void *argv, caddr_t boot_esym)
case MIPS_R4000:
{
extern void xtlb_miss_err_r4k;
- xtlb_handler = (vaddr_t)&xtlb_miss_err_r4k;
+ extern void xtlb_miss_err_r4000SC;
+
+ if (curcpu()->ci_l2size == 0 ||
+ ((cp0_get_prid() >> 4) & 0x0f) >= 4) /* R4400 */
+ xtlb_handler = (vaddr_t)&xtlb_miss_err_r4k;
+ else {
+ xtlb_handler = (vaddr_t)&xtlb_miss_err_r4000SC;
+ xtlb_handler |= CKSEG1_BASE;
+ }
}
break;
#endif
@@ -828,6 +836,11 @@ arcbios_halt(int howto)
#endif
if (howto & RB_HALT) {
+#ifdef TGT_INDIGO
+ /* Indigo does not support powerdown */
+ if (sys_config.system_type == SGI_IP20)
+ howto &= ~RB_POWERDOWN;
+#endif
if (howto & RB_POWERDOWN) {
#ifdef TGT_INDY
/*