diff options
author | Krishna Gudipati <kgudipat@brocade.com> | 2011-06-24 23:23:38 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2011-06-29 17:59:59 -0400 |
commit | 10a07379247078448c076690657a076076bf89aa (patch) | |
tree | 9d1a18ccf937203a0e9f0bb24ed601391c80b1e8 /drivers/scsi/bfa/bfa_core.c | |
parent | a714134a857d3984250ee52fda7850b61bf8a94e (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.c | 43 |
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) | |||
251 | void | 251 | void |
252 | bfa_msix_all(struct bfa_s *bfa, int vec) | 252 | bfa_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 | ||
257 | bfa_boolean_t | 289 | bfa_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 | ||