Misunderstanding documentation caused me to try and set 1Gbps/2Gps/Auto

connection speed for the 2300 in the wrong offset in the ICB. Oops.

Respect some QLogic errat wrt PCI errors on certain shared host/RISC registers.
This commit is contained in:
mjacob 2001-10-06 20:41:18 +00:00
parent 7187812d5e
commit d45f75145f
2 changed files with 21 additions and 14 deletions

View File

@ -548,15 +548,22 @@ isp_reset(struct ispsoftc *isp)
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;
}
}
}

View File

@ -662,9 +662,9 @@ typedef struct isp_icb {
#define ICBXOPT_RIO_32BIT_DELAY 4
/* These 3 only apply to the 2300 */
#define ICBXOPT_RATE_ONEGB (MBGSD_ONEGB << 14)
#define ICBXOPT_RATE_TWOGB (MBGSD_TWOGB << 14)
#define ICBXOPT_RATE_AUTO (MBGSD_AUTO << 14)
#define ICBZOPT_RATE_ONEGB (MBGSD_ONEGB << 14)
#define ICBZOPT_RATE_TWOGB (MBGSD_TWOGB << 14)
#define ICBZOPT_RATE_AUTO (MBGSD_AUTO << 14)
#define ICB_MIN_FRMLEN 256