aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/bfa/bfa_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/bfa/bfa_core.c')
-rw-r--r--drivers/scsi/bfa/bfa_core.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/drivers/scsi/bfa/bfa_core.c b/drivers/scsi/bfa/bfa_core.c
index 4c9e83803cb6..0dbdd2da5b48 100644
--- a/drivers/scsi/bfa/bfa_core.c
+++ b/drivers/scsi/bfa/bfa_core.c
@@ -248,7 +248,7 @@ bfa_intx(struct bfa_s *bfa)
248 writel(qintr, bfa->iocfc.bfa_regs.intr_status); 248 writel(qintr, bfa->iocfc.bfa_regs.intr_status);
249 249
250 for (queue = 0; queue < BFI_IOC_MAX_CQS_ASIC; queue++) { 250 for (queue = 0; queue < BFI_IOC_MAX_CQS_ASIC; queue++) {
251 if (intr & (__HFN_INT_RME_Q0 << queue)) 251 if ((intr & (__HFN_INT_RME_Q0 << queue)) && bfa->queue_process)
252 bfa_isr_rspq(bfa, queue & (BFI_IOC_MAX_CQS - 1)); 252 bfa_isr_rspq(bfa, queue & (BFI_IOC_MAX_CQS - 1));
253 } 253 }
254 intr &= ~qintr; 254 intr &= ~qintr;
@@ -262,7 +262,7 @@ bfa_intx(struct bfa_s *bfa)
262 writel(qintr, bfa->iocfc.bfa_regs.intr_status); 262 writel(qintr, bfa->iocfc.bfa_regs.intr_status);
263 263
264 for (queue = 0; queue < BFI_IOC_MAX_CQS_ASIC; queue++) { 264 for (queue = 0; queue < BFI_IOC_MAX_CQS_ASIC; queue++) {
265 if (intr & (__HFN_INT_CPE_Q0 << queue)) 265 if ((intr & (__HFN_INT_CPE_Q0 << queue)) && bfa->queue_process)
266 bfa_isr_reqq(bfa, queue & (BFI_IOC_MAX_CQS - 1)); 266 bfa_isr_reqq(bfa, queue & (BFI_IOC_MAX_CQS - 1));
267 } 267 }
268 intr &= ~qintr; 268 intr &= ~qintr;
@@ -282,7 +282,7 @@ bfa_isr_enable(struct bfa_s *bfa)
282 282
283 bfa_trc(bfa, pci_func); 283 bfa_trc(bfa, pci_func);
284 284
285 bfa_msix_install(bfa); 285 bfa_msix_ctrl_install(bfa);
286 286
287 if (bfa_asic_id_ct2(bfa->ioc.pcidev.device_id)) { 287 if (bfa_asic_id_ct2(bfa->ioc.pcidev.device_id)) {
288 umsk = __HFN_INT_ERR_MASK_CT2; 288 umsk = __HFN_INT_ERR_MASK_CT2;
@@ -326,9 +326,6 @@ bfa_isr_unhandled(struct bfa_s *bfa, struct bfi_msg_s *m)
326void 326void
327bfa_msix_rspq(struct bfa_s *bfa, int vec) 327bfa_msix_rspq(struct bfa_s *bfa, int vec)
328{ 328{
329 if (!bfa->rme_process)
330 return;
331
332 bfa_isr_rspq(bfa, vec - bfa->iocfc.hwif.rme_vec_q0); 329 bfa_isr_rspq(bfa, vec - bfa->iocfc.hwif.rme_vec_q0);
333} 330}
334 331
@@ -512,7 +509,8 @@ bfa_iocfc_init_mem(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg,
512 iocfc->hwif.hw_reqq_ack = bfa_hwct_reqq_ack; 509 iocfc->hwif.hw_reqq_ack = bfa_hwct_reqq_ack;
513 iocfc->hwif.hw_rspq_ack = bfa_hwct_rspq_ack; 510 iocfc->hwif.hw_rspq_ack = bfa_hwct_rspq_ack;
514 iocfc->hwif.hw_msix_init = bfa_hwct_msix_init; 511 iocfc->hwif.hw_msix_init = bfa_hwct_msix_init;
515 iocfc->hwif.hw_msix_install = bfa_hwct_msix_install; 512 iocfc->hwif.hw_msix_ctrl_install = bfa_hwct_msix_ctrl_install;
513 iocfc->hwif.hw_msix_queue_install = bfa_hwct_msix_queue_install;
516 iocfc->hwif.hw_msix_uninstall = bfa_hwct_msix_uninstall; 514 iocfc->hwif.hw_msix_uninstall = bfa_hwct_msix_uninstall;
517 iocfc->hwif.hw_isr_mode_set = bfa_hwct_isr_mode_set; 515 iocfc->hwif.hw_isr_mode_set = bfa_hwct_isr_mode_set;
518 iocfc->hwif.hw_msix_getvecs = bfa_hwct_msix_getvecs; 516 iocfc->hwif.hw_msix_getvecs = bfa_hwct_msix_getvecs;
@@ -524,7 +522,8 @@ bfa_iocfc_init_mem(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg,
524 iocfc->hwif.hw_reqq_ack = bfa_hwcb_reqq_ack; 522 iocfc->hwif.hw_reqq_ack = bfa_hwcb_reqq_ack;
525 iocfc->hwif.hw_rspq_ack = bfa_hwcb_rspq_ack; 523 iocfc->hwif.hw_rspq_ack = bfa_hwcb_rspq_ack;
526 iocfc->hwif.hw_msix_init = bfa_hwcb_msix_init; 524 iocfc->hwif.hw_msix_init = bfa_hwcb_msix_init;
527 iocfc->hwif.hw_msix_install = bfa_hwcb_msix_install; 525 iocfc->hwif.hw_msix_ctrl_install = bfa_hwcb_msix_ctrl_install;
526 iocfc->hwif.hw_msix_queue_install = bfa_hwcb_msix_queue_install;
528 iocfc->hwif.hw_msix_uninstall = bfa_hwcb_msix_uninstall; 527 iocfc->hwif.hw_msix_uninstall = bfa_hwcb_msix_uninstall;
529 iocfc->hwif.hw_isr_mode_set = bfa_hwcb_isr_mode_set; 528 iocfc->hwif.hw_isr_mode_set = bfa_hwcb_isr_mode_set;
530 iocfc->hwif.hw_msix_getvecs = bfa_hwcb_msix_getvecs; 529 iocfc->hwif.hw_msix_getvecs = bfa_hwcb_msix_getvecs;
@@ -640,7 +639,7 @@ bfa_iocfc_start_submod(struct bfa_s *bfa)
640{ 639{
641 int i; 640 int i;
642 641
643 bfa->rme_process = BFA_TRUE; 642 bfa->queue_process = BFA_TRUE;
644 for (i = 0; i < BFI_IOC_MAX_CQS; i++) 643 for (i = 0; i < BFI_IOC_MAX_CQS; i++)
645 bfa->iocfc.hwif.hw_rspq_ack(bfa, i); 644 bfa->iocfc.hwif.hw_rspq_ack(bfa, i);
646 645
@@ -743,6 +742,11 @@ bfa_iocfc_cfgrsp(struct bfa_s *bfa)
743 bfa_iocfc_qreg(bfa, &cfgrsp->qreg); 742 bfa_iocfc_qreg(bfa, &cfgrsp->qreg);
744 743
745 /* 744 /*
745 * Install MSIX queue handlers
746 */
747 bfa_msix_queue_install(bfa);
748
749 /*
746 * Configuration is complete - initialize/start submodules 750 * Configuration is complete - initialize/start submodules
747 */ 751 */
748 bfa_fcport_init(bfa); 752 bfa_fcport_init(bfa);
@@ -813,7 +817,7 @@ bfa_iocfc_hbfail_cbfn(void *bfa_arg)
813{ 817{
814 struct bfa_s *bfa = bfa_arg; 818 struct bfa_s *bfa = bfa_arg;
815 819
816 bfa->rme_process = BFA_FALSE; 820 bfa->queue_process = BFA_FALSE;
817 821
818 bfa_isr_disable(bfa); 822 bfa_isr_disable(bfa);
819 bfa_iocfc_disable_submod(bfa); 823 bfa_iocfc_disable_submod(bfa);
@@ -917,7 +921,7 @@ bfa_iocfc_stop(struct bfa_s *bfa)
917{ 921{
918 bfa->iocfc.action = BFA_IOCFC_ACT_STOP; 922 bfa->iocfc.action = BFA_IOCFC_ACT_STOP;
919 923
920 bfa->rme_process = BFA_FALSE; 924 bfa->queue_process = BFA_FALSE;
921 bfa_ioc_disable(&bfa->ioc); 925 bfa_ioc_disable(&bfa->ioc);
922} 926}
923 927
@@ -1017,7 +1021,7 @@ bfa_iocfc_disable(struct bfa_s *bfa)
1017 "IOC Disable"); 1021 "IOC Disable");
1018 bfa->iocfc.action = BFA_IOCFC_ACT_DISABLE; 1022 bfa->iocfc.action = BFA_IOCFC_ACT_DISABLE;
1019 1023
1020 bfa->rme_process = BFA_FALSE; 1024 bfa->queue_process = BFA_FALSE;
1021 bfa_ioc_disable(&bfa->ioc); 1025 bfa_ioc_disable(&bfa->ioc);
1022} 1026}
1023 1027