summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2009-05-02 21:28:09 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2009-05-02 21:28:09 +0000
commitc70ba38296fab8e5c88a25c88e45e0826ef7f0e7 (patch)
treeb4ec560bc8c7ca8dbf952acf4cd52eea5fb0068e
parentb192fbb6a6c5837c6a44913ea1d86f57742a1375 (diff)
Explain why the short window of widget #0 needs to be accessed through a
large window IOTTE.
-rw-r--r--sys/arch/sgi/sgi/ip27_machdep.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/arch/sgi/sgi/ip27_machdep.c b/sys/arch/sgi/sgi/ip27_machdep.c
index 20535bda1b5..bab1ca3af03 100644
--- a/sys/arch/sgi/sgi/ip27_machdep.c
+++ b/sys/arch/sgi/sgi/ip27_machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip27_machdep.c,v 1.2 2009/04/15 18:46:40 miod Exp $ */
+/* $OpenBSD: ip27_machdep.c,v 1.3 2009/05/02 21:28:08 miod Exp $ */
/*
* Copyright (c) 2008, 2009 Miodrag Vallat.
@@ -125,8 +125,15 @@ ip27_setup()
paddr_t
ip27_widget_short(int16_t nasid, u_int widget)
{
+ /*
+ * A hardware bug on the PI side of the Hub chip (at least in
+ * earlier versions) causes accesses to the short window #0
+ * to be unreliable.
+ * The PROM implements a workaround by remapping it to
+ * big window #6 (the last programmable big window).
+ */
if (widget == 0)
- return ip27_widget_long(nasid, 6); /* ??? */
+ return ip27_widget_long(nasid, 6);
return ((uint64_t)(widget) << 24) | ((uint64_t)(nasid) << 32) | io_base;
}