summaryrefslogtreecommitdiff
path: root/sys/dev/isp/isp.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/isp/isp.c')
-rw-r--r--sys/dev/isp/isp.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c
index 2d76c4c41404..66518e2bddc3 100644
--- a/sys/dev/isp/isp.c
+++ b/sys/dev/isp/isp.c
@@ -548,15 +548,22 @@ again:
ISP_RESET1(isp);
/*
- * Wait for everything to finish firing up...
+ * Wait for everything to finish firing up.
+ *
+ * Avoid doing this on the 2312 because you can generate a PCI
+ * parity error (chip breakage).
*/
- loops = MBOX_DELAY_COUNT;
- while (ISP_READ(isp, OUTMAILBOX0) == MBOX_BUSY) {
- USEC_DELAY(100);
- if (--loops < 0) {
- isp_prt(isp, ISP_LOGERR,
- "MBOX_BUSY never cleared on reset");
- return;
+ if (IS_2300(isp)) {
+ USEC_DELAY(5);
+ } else {
+ loops = MBOX_DELAY_COUNT;
+ while (ISP_READ(isp, OUTMAILBOX0) == MBOX_BUSY) {
+ USEC_DELAY(100);
+ if (--loops < 0) {
+ isp_prt(isp, ISP_LOGERR,
+ "MBOX_BUSY never cleared on reset");
+ return;
+ }
}
}
@@ -1223,11 +1230,11 @@ isp_fibre_init(struct ispsoftc *isp)
icbp->icb_fwoptions &= ~ICBOPT_FAST_POST;
}
if (isp->isp_confopts & ISP_CFG_ONEGB) {
- icbp->icb_xfwoptions |= ICBXOPT_RATE_ONEGB;
+ icbp->icb_zfwoptions |= ICBZOPT_RATE_ONEGB;
} else if (isp->isp_confopts & ISP_CFG_TWOGB) {
- icbp->icb_xfwoptions |= ICBXOPT_RATE_TWOGB;
+ icbp->icb_zfwoptions |= ICBZOPT_RATE_TWOGB;
} else {
- icbp->icb_xfwoptions |= ICBXOPT_RATE_AUTO;
+ icbp->icb_zfwoptions |= ICBZOPT_RATE_AUTO;
}
}
}