summaryrefslogtreecommitdiffstats
path: root/sys/dev/isp/isp.c
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2008-12-15 21:42:38 +0000
committermarius <marius@FreeBSD.org>2008-12-15 21:42:38 +0000
commitea29c11cdebf56f08c85084a4e99c193160a87b7 (patch)
treef81231bbda019eb4bae7684574b0323ef1d15e8a /sys/dev/isp/isp.c
parentad445e7d0590aaf984b9df1f4092b18739f02cb4 (diff)
downloadFreeBSD-src-ea29c11cdebf56f08c85084a4e99c193160a87b7.zip
FreeBSD-src-ea29c11cdebf56f08c85084a4e99c193160a87b7.tar.gz
Don't try reading the SXP_PINS_DIFF on the 10160 and 12160 SCSI
controllers. Reading this register, for which there are indications that it doesn't really exist, returns 0 on at least some 12160 and doing so on Sun Fire V880 causes a data access error exception. Reported and tested by: Beat Gaetzi Approved by: mjacob Obtained from: OpenBSD (modulo setting isp_lvdmode)
Diffstat (limited to 'sys/dev/isp/isp.c')
-rw-r--r--sys/dev/isp/isp.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c
index e22b7bf..1ad4e91 100644
--- a/sys/dev/isp/isp.c
+++ b/sys/dev/isp/isp.c
@@ -335,6 +335,23 @@ isp_reset(ispsoftc_t *isp)
/*
* XXX: Should probably do some bus sensing.
*/
+ } else if (IS_ULTRA3(isp)) {
+ sdparam *sdp = isp->isp_param;
+
+ isp->isp_clock = 100;
+
+ if (IS_10160(isp))
+ btype = "10160";
+ else if (IS_12160(isp))
+ btype = "12160";
+ else
+ btype = "<UNKLVD>";
+ sdp->isp_lvdmode = 1;
+
+ if (IS_DUALBUS(isp)) {
+ sdp++;
+ sdp->isp_lvdmode = 1;
+ }
} else if (IS_ULTRA2(isp)) {
static const char m[] = "bus %d is in %s Mode";
uint16_t l;
@@ -346,10 +363,6 @@ isp_reset(ispsoftc_t *isp)
btype = "1280";
else if (IS_1080(isp))
btype = "1080";
- else if (IS_10160(isp))
- btype = "10160";
- else if (IS_12160(isp))
- btype = "12160";
else
btype = "<UNKLVD>";
OpenPOWER on IntegriCloud