aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/bfa/bfa_core.c
diff options
context:
space:
mode:
authorKrishna Gudipati <kgudipat@brocade.com>2011-06-24 23:23:38 -0400
committerJames Bottomley <JBottomley@Parallels.com>2011-06-29 17:59:59 -0400
commit10a07379247078448c076690657a076076bf89aa (patch)
tree9d1a18ccf937203a0e9f0bb24ed601391c80b1e8 /drivers/scsi/bfa/bfa_core.c
parenta714134a857d3984250ee52fda7850b61bf8a94e (diff)
[SCSI] bfa: Brocade-1860 Fabric Adapter PLL init fixes.
- If flash controller is halted unconditionally, this results in illegal write access to flash controller register domain. Since flash controller registers are only accessible once s_clk is started - added logic to check for WGN status and halt flash controller only if it is already running. - Added check to wait for flash controller halt to be completed before proceeding with s_clk/l_clk initializations. - Removed unnecessary reset logic for PMM 1T memory and moved memory initialization after flash access enable. - Disable Brocade-1860 asic MBOX interrupt before PLL initialization. - Remove reset enable for S_CLK/L_CLK after both PLL initializations are complete. Signed-off-by: Krishna Gudipati <kgudipat@brocade.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/bfa/bfa_core.c')
-rw-r--r--drivers/scsi/bfa/bfa_core.c43
1 files changed, 36 insertions, 7 deletions
diff --git a/drivers/scsi/bfa/bfa_core.c b/drivers/scsi/bfa/bfa_core.c
index 4befbf9fd88..f949844aa11 100644
--- a/drivers/scsi/bfa/bfa_core.c
+++ b/drivers/scsi/bfa/bfa_core.c
@@ -251,7 +251,39 @@ bfa_isr_reqq(struct bfa_s *bfa, int qid)
251void 251void
252bfa_msix_all(struct bfa_s *bfa, int vec) 252bfa_msix_all(struct bfa_s *bfa, int vec)
253{ 253{
254 bfa_intx(bfa); 254 u32 intr, qintr;
255 int queue;
256
257 intr = readl(bfa->iocfc.bfa_regs.intr_status);
258 if (!intr)
259 return;
260
261 /*
262 * RME completion queue interrupt
263 */
264 qintr = intr & __HFN_INT_RME_MASK;
265 if (qintr && bfa->queue_process) {
266 for (queue = 0; queue < BFI_IOC_MAX_CQS; queue++)
267 bfa_isr_rspq(bfa, queue);
268 }
269
270 intr &= ~qintr;
271 if (!intr)
272 return;
273
274 /*
275 * CPE completion queue interrupt
276 */
277 qintr = intr & __HFN_INT_CPE_MASK;
278 if (qintr && bfa->queue_process) {
279 for (queue = 0; queue < BFI_IOC_MAX_CQS; queue++)
280 bfa_isr_reqq(bfa, queue);
281 }
282 intr &= ~qintr;
283 if (!intr)
284 return;
285
286 bfa_msix_lpu_err(bfa, intr);
255} 287}
256 288
257bfa_boolean_t 289bfa_boolean_t
@@ -469,6 +501,9 @@ bfa_iocfc_send_cfg(void *bfa_arg)
469 /* 501 /*
470 * initialize IOC configuration info 502 * initialize IOC configuration info
471 */ 503 */
504 cfg_info->single_msix_vec = 0;
505 if (bfa->msix.nvecs == 1)
506 cfg_info->single_msix_vec = 1;
472 cfg_info->endian_sig = BFI_IOC_ENDIAN_SIG; 507 cfg_info->endian_sig = BFI_IOC_ENDIAN_SIG;
473 cfg_info->num_cqs = cfg->fwcfg.num_cqs; 508 cfg_info->num_cqs = cfg->fwcfg.num_cqs;
474 cfg_info->num_ioim_reqs = cpu_to_be16(cfg->fwcfg.num_ioim_reqs); 509 cfg_info->num_ioim_reqs = cpu_to_be16(cfg->fwcfg.num_ioim_reqs);
@@ -1080,12 +1115,6 @@ bfa_iocfc_attach(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg,
1080 ioc->trcmod = bfa->trcmod; 1115 ioc->trcmod = bfa->trcmod;
1081 bfa_ioc_attach(&bfa->ioc, bfa, &bfa_iocfc_cbfn, &bfa->timer_mod); 1116 bfa_ioc_attach(&bfa->ioc, bfa, &bfa_iocfc_cbfn, &bfa->timer_mod);
1082 1117
1083 /*
1084 * Set FC mode for BFA_PCI_DEVICE_ID_CT_FC.
1085 */
1086 if (pcidev->device_id == BFA_PCI_DEVICE_ID_CT_FC)
1087 bfa_ioc_set_fcmode(&bfa->ioc);
1088
1089 bfa_ioc_pci_init(&bfa->ioc, pcidev, BFI_PCIFN_CLASS_FC); 1118 bfa_ioc_pci_init(&bfa->ioc, pcidev, BFI_PCIFN_CLASS_FC);
1090 bfa_ioc_mbox_register(&bfa->ioc, bfa_mbox_isrs); 1119 bfa_ioc_mbox_register(&bfa->ioc, bfa_mbox_isrs);
1091 1120