summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2015-12-30 11:47:33 +0000
committermav <mav@FreeBSD.org>2015-12-30 11:47:33 +0000
commite02caf9619483dc84e812c0941f185de2f110e3c (patch)
tree02b9bc74bbf0fe1628cec1fd6847eb68260d6f37 /sys/dev
parentf504ae473f11afa88a2ab816cce909b680ee38ef (diff)
downloadFreeBSD-src-e02caf9619483dc84e812c0941f185de2f110e3c.zip
FreeBSD-src-e02caf9619483dc84e812c0941f185de2f110e3c.tar.gz
MFC r292610: Fix speed setting by NVRAM for 24xx and above chips.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/isp/isp.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c
index d394011..a23cdab 100644
--- a/sys/dev/isp/isp.c
+++ b/sys/dev/isp/isp.c
@@ -2142,19 +2142,41 @@ isp_fibre_init_2400(ispsoftc_t *isp)
if ((icbp->icb_fwoptions3 & ICB2400_OPT3_RSPSZ_MASK) == 0) {
icbp->icb_fwoptions3 |= ICB2400_OPT3_RSPSZ_24;
}
- icbp->icb_fwoptions3 &= ~ICB2400_OPT3_RATE_AUTO;
if (isp->isp_confopts & ISP_CFG_1GB) {
+ icbp->icb_fwoptions3 &= ~ICB2400_OPT3_RATE_MASK;
icbp->icb_fwoptions3 |= ICB2400_OPT3_RATE_1GB;
} else if (isp->isp_confopts & ISP_CFG_2GB) {
+ icbp->icb_fwoptions3 &= ~ICB2400_OPT3_RATE_MASK;
icbp->icb_fwoptions3 |= ICB2400_OPT3_RATE_2GB;
} else if (isp->isp_confopts & ISP_CFG_4GB) {
+ icbp->icb_fwoptions3 &= ~ICB2400_OPT3_RATE_MASK;
icbp->icb_fwoptions3 |= ICB2400_OPT3_RATE_4GB;
} else if (isp->isp_confopts & ISP_CFG_8GB) {
+ icbp->icb_fwoptions3 &= ~ICB2400_OPT3_RATE_MASK;
icbp->icb_fwoptions3 |= ICB2400_OPT3_RATE_8GB;
} else if (isp->isp_confopts & ISP_CFG_16GB) {
+ icbp->icb_fwoptions3 &= ~ICB2400_OPT3_RATE_MASK;
icbp->icb_fwoptions3 |= ICB2400_OPT3_RATE_16GB;
} else {
- icbp->icb_fwoptions3 |= ICB2400_OPT3_RATE_AUTO;
+ switch (icbp->icb_fwoptions3 & ICB2400_OPT3_RATE_MASK) {
+ case ICB2400_OPT3_RATE_4GB:
+ case ICB2400_OPT3_RATE_8GB:
+ case ICB2400_OPT3_RATE_16GB:
+ case ICB2400_OPT3_RATE_AUTO:
+ break;
+ case ICB2400_OPT3_RATE_2GB:
+ if (isp->isp_type <= ISP_HA_FC_2500)
+ break;
+ /*FALLTHROUGH*/
+ case ICB2400_OPT3_RATE_1GB:
+ if (isp->isp_type <= ISP_HA_FC_2400)
+ break;
+ /*FALLTHROUGH*/
+ default:
+ icbp->icb_fwoptions3 &= ~ICB2400_OPT3_RATE_MASK;
+ icbp->icb_fwoptions3 |= ICB2400_OPT3_RATE_AUTO;
+ break;
+ }
}
icbp->icb_logintime = ICB_LOGIN_TOV;
@@ -7632,6 +7654,7 @@ isp_setdfltfcparm(ispsoftc_t *isp, int chan)
fcp->isp_fwoptions |= ICB2400_OPT1_FULL_DUPLEX;
}
fcp->isp_fwoptions |= ICB2400_OPT1_BOTH_WWNS;
+ fcp->isp_zfwoptions |= ICB2400_OPT3_RATE_AUTO;
} else {
fcp->isp_fwoptions |= ICBOPT_FAIRNESS;
fcp->isp_fwoptions |= ICBOPT_PDBCHANGE_AE;
@@ -7644,6 +7667,7 @@ isp_setdfltfcparm(ispsoftc_t *isp, int chan)
* extended options from NVRAM
*/
fcp->isp_fwoptions &= ~ICBOPT_EXTENDED;
+ fcp->isp_zfwoptions |= ICBZOPT_RATE_AUTO;
}
OpenPOWER on IntegriCloud