Lines Matching +full:hb +full:- +full:pll +full:- +full:clock
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
4 * Copyright (c) 2014- QLogic Corporation.
8 * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter.
59 bfa_ioc_sem_get(ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_firmware_lock()
60 usecnt = readl(ioc->ioc_regs.ioc_usage_reg); in bfa_ioc_ct_firmware_lock()
66 writel(1, ioc->ioc_regs.ioc_usage_reg); in bfa_ioc_ct_firmware_lock()
67 readl(ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_firmware_lock()
68 writel(1, ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_firmware_lock()
69 writel(0, ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_firmware_lock()
74 ioc_fwstate = readl(ioc->ioc_regs.ioc_fwstate); in bfa_ioc_ct_firmware_lock()
78 * Use count cannot be non-zero and chip in uninitialized state. in bfa_ioc_ct_firmware_lock()
87 readl(ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_firmware_lock()
88 writel(1, ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_firmware_lock()
97 writel(usecnt, ioc->ioc_regs.ioc_usage_reg); in bfa_ioc_ct_firmware_lock()
98 readl(ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_firmware_lock()
99 writel(1, ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_firmware_lock()
112 bfa_ioc_sem_get(ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_firmware_unlock()
113 usecnt = readl(ioc->ioc_regs.ioc_usage_reg); in bfa_ioc_ct_firmware_unlock()
116 usecnt--; in bfa_ioc_ct_firmware_unlock()
117 writel(usecnt, ioc->ioc_regs.ioc_usage_reg); in bfa_ioc_ct_firmware_unlock()
120 readl(ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_firmware_unlock()
121 writel(1, ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_firmware_unlock()
125 * Notify other functions on HB failure.
131 writel(__FW_INIT_HALT_P, ioc->ioc_regs.ll_halt); in bfa_ioc_ct_notify_fail()
132 writel(__FW_INIT_HALT_P, ioc->ioc_regs.alt_ll_halt); in bfa_ioc_ct_notify_fail()
134 readl(ioc->ioc_regs.ll_halt); in bfa_ioc_ct_notify_fail()
135 readl(ioc->ioc_regs.alt_ll_halt); in bfa_ioc_ct_notify_fail()
137 writel(~0U, ioc->ioc_regs.err_set); in bfa_ioc_ct_notify_fail()
138 readl(ioc->ioc_regs.err_set); in bfa_ioc_ct_notify_fail()
153 * Host <-> LPU mailbox command/status registers - port 0
163 * Host <-> LPU mailbox command/status registers - port 1
190 ioc->ioc_regs.hfn_mbox = rb + ct_fnreg[pcifn].hfn_mbox; in bfa_ioc_ct_reg_init()
191 ioc->ioc_regs.lpu_mbox = rb + ct_fnreg[pcifn].lpu_mbox; in bfa_ioc_ct_reg_init()
192 ioc->ioc_regs.host_page_num_fn = rb + ct_fnreg[pcifn].hfn_pgn; in bfa_ioc_ct_reg_init()
194 if (ioc->port_id == 0) { in bfa_ioc_ct_reg_init()
195 ioc->ioc_regs.heartbeat = rb + BFA_IOC0_HBEAT_REG; in bfa_ioc_ct_reg_init()
196 ioc->ioc_regs.ioc_fwstate = rb + BFA_IOC0_STATE_REG; in bfa_ioc_ct_reg_init()
197 ioc->ioc_regs.alt_ioc_fwstate = rb + BFA_IOC1_STATE_REG; in bfa_ioc_ct_reg_init()
198 ioc->ioc_regs.hfn_mbox_cmd = rb + ct_p0reg[pcifn].hfn; in bfa_ioc_ct_reg_init()
199 ioc->ioc_regs.lpu_mbox_cmd = rb + ct_p0reg[pcifn].lpu; in bfa_ioc_ct_reg_init()
200 ioc->ioc_regs.ll_halt = rb + FW_INIT_HALT_P0; in bfa_ioc_ct_reg_init()
201 ioc->ioc_regs.alt_ll_halt = rb + FW_INIT_HALT_P1; in bfa_ioc_ct_reg_init()
203 ioc->ioc_regs.heartbeat = (rb + BFA_IOC1_HBEAT_REG); in bfa_ioc_ct_reg_init()
204 ioc->ioc_regs.ioc_fwstate = (rb + BFA_IOC1_STATE_REG); in bfa_ioc_ct_reg_init()
205 ioc->ioc_regs.alt_ioc_fwstate = rb + BFA_IOC0_STATE_REG; in bfa_ioc_ct_reg_init()
206 ioc->ioc_regs.hfn_mbox_cmd = rb + ct_p1reg[pcifn].hfn; in bfa_ioc_ct_reg_init()
207 ioc->ioc_regs.lpu_mbox_cmd = rb + ct_p1reg[pcifn].lpu; in bfa_ioc_ct_reg_init()
208 ioc->ioc_regs.ll_halt = rb + FW_INIT_HALT_P1; in bfa_ioc_ct_reg_init()
209 ioc->ioc_regs.alt_ll_halt = rb + FW_INIT_HALT_P0; in bfa_ioc_ct_reg_init()
215 ioc->ioc_regs.pss_ctl_reg = (rb + PSS_CTL_REG); in bfa_ioc_ct_reg_init()
216 ioc->ioc_regs.pss_err_status_reg = (rb + PSS_ERR_STATUS_REG); in bfa_ioc_ct_reg_init()
217 ioc->ioc_regs.app_pll_fast_ctl_reg = (rb + APP_PLL_LCLK_CTL_REG); in bfa_ioc_ct_reg_init()
218 ioc->ioc_regs.app_pll_slow_ctl_reg = (rb + APP_PLL_SCLK_CTL_REG); in bfa_ioc_ct_reg_init()
223 ioc->ioc_regs.ioc_sem_reg = (rb + HOST_SEM0_REG); in bfa_ioc_ct_reg_init()
224 ioc->ioc_regs.ioc_usage_sem_reg = (rb + HOST_SEM1_REG); in bfa_ioc_ct_reg_init()
225 ioc->ioc_regs.ioc_init_sem_reg = (rb + HOST_SEM2_REG); in bfa_ioc_ct_reg_init()
226 ioc->ioc_regs.ioc_usage_reg = (rb + BFA_FW_USE_COUNT); in bfa_ioc_ct_reg_init()
227 ioc->ioc_regs.ioc_fail_sync = (rb + BFA_IOC_FAIL_SYNC); in bfa_ioc_ct_reg_init()
232 ioc->ioc_regs.smem_page_start = (rb + PSS_SMEM_PAGE_START); in bfa_ioc_ct_reg_init()
233 ioc->ioc_regs.smem_pg0 = BFI_IOC_SMEM_PG0_CT; in bfa_ioc_ct_reg_init()
236 * err set reg : for notification of hb failure in fcmode in bfa_ioc_ct_reg_init()
238 ioc->ioc_regs.err_set = (rb + ERR_SET_REG); in bfa_ioc_ct_reg_init()
249 ioc->ioc_regs.hfn_mbox = rb + ct2_reg[port].hfn_mbox; in bfa_ioc_ct2_reg_init()
250 ioc->ioc_regs.lpu_mbox = rb + ct2_reg[port].lpu_mbox; in bfa_ioc_ct2_reg_init()
251 ioc->ioc_regs.host_page_num_fn = rb + ct2_reg[port].hfn_pgn; in bfa_ioc_ct2_reg_init()
252 ioc->ioc_regs.hfn_mbox_cmd = rb + ct2_reg[port].hfn; in bfa_ioc_ct2_reg_init()
253 ioc->ioc_regs.lpu_mbox_cmd = rb + ct2_reg[port].lpu; in bfa_ioc_ct2_reg_init()
254 ioc->ioc_regs.lpu_read_stat = rb + ct2_reg[port].lpu_read; in bfa_ioc_ct2_reg_init()
257 ioc->ioc_regs.heartbeat = rb + CT2_BFA_IOC0_HBEAT_REG; in bfa_ioc_ct2_reg_init()
258 ioc->ioc_regs.ioc_fwstate = rb + CT2_BFA_IOC0_STATE_REG; in bfa_ioc_ct2_reg_init()
259 ioc->ioc_regs.alt_ioc_fwstate = rb + CT2_BFA_IOC1_STATE_REG; in bfa_ioc_ct2_reg_init()
260 ioc->ioc_regs.ll_halt = rb + FW_INIT_HALT_P0; in bfa_ioc_ct2_reg_init()
261 ioc->ioc_regs.alt_ll_halt = rb + FW_INIT_HALT_P1; in bfa_ioc_ct2_reg_init()
263 ioc->ioc_regs.heartbeat = (rb + CT2_BFA_IOC1_HBEAT_REG); in bfa_ioc_ct2_reg_init()
264 ioc->ioc_regs.ioc_fwstate = (rb + CT2_BFA_IOC1_STATE_REG); in bfa_ioc_ct2_reg_init()
265 ioc->ioc_regs.alt_ioc_fwstate = rb + CT2_BFA_IOC0_STATE_REG; in bfa_ioc_ct2_reg_init()
266 ioc->ioc_regs.ll_halt = rb + FW_INIT_HALT_P1; in bfa_ioc_ct2_reg_init()
267 ioc->ioc_regs.alt_ll_halt = rb + FW_INIT_HALT_P0; in bfa_ioc_ct2_reg_init()
273 ioc->ioc_regs.pss_ctl_reg = (rb + PSS_CTL_REG); in bfa_ioc_ct2_reg_init()
274 ioc->ioc_regs.pss_err_status_reg = (rb + PSS_ERR_STATUS_REG); in bfa_ioc_ct2_reg_init()
275 ioc->ioc_regs.app_pll_fast_ctl_reg = (rb + CT2_APP_PLL_LCLK_CTL_REG); in bfa_ioc_ct2_reg_init()
276 ioc->ioc_regs.app_pll_slow_ctl_reg = (rb + CT2_APP_PLL_SCLK_CTL_REG); in bfa_ioc_ct2_reg_init()
281 ioc->ioc_regs.ioc_sem_reg = (rb + CT2_HOST_SEM0_REG); in bfa_ioc_ct2_reg_init()
282 ioc->ioc_regs.ioc_usage_sem_reg = (rb + CT2_HOST_SEM1_REG); in bfa_ioc_ct2_reg_init()
283 ioc->ioc_regs.ioc_init_sem_reg = (rb + CT2_HOST_SEM2_REG); in bfa_ioc_ct2_reg_init()
284 ioc->ioc_regs.ioc_usage_reg = (rb + CT2_BFA_FW_USE_COUNT); in bfa_ioc_ct2_reg_init()
285 ioc->ioc_regs.ioc_fail_sync = (rb + CT2_BFA_IOC_FAIL_SYNC); in bfa_ioc_ct2_reg_init()
290 ioc->ioc_regs.smem_page_start = (rb + PSS_SMEM_PAGE_START); in bfa_ioc_ct2_reg_init()
291 ioc->ioc_regs.smem_pg0 = BFI_IOC_SMEM_PG0_CT; in bfa_ioc_ct2_reg_init()
294 * err set reg : for notification of hb failure in fcmode in bfa_ioc_ct2_reg_init()
296 ioc->ioc_regs.err_set = (rb + ERR_SET_REG); in bfa_ioc_ct2_reg_init()
307 void __iomem *rb = ioc->pcidev.pci_bar_kva; in bfa_ioc_ct_map_port()
315 ioc->port_id = (r32 & __F0_PORT_MAP_MK) >> __F0_PORT_MAP_SH; in bfa_ioc_ct_map_port()
318 bfa_trc(ioc, ioc->port_id); in bfa_ioc_ct_map_port()
324 void __iomem *rb = ioc->pcidev.pci_bar_kva; in bfa_ioc_ct2_map_port()
328 ioc->port_id = ((r32 & __FC_LL_PORT_MAP__MK) >> __FC_LL_PORT_MAP__SH); in bfa_ioc_ct2_map_port()
331 bfa_trc(ioc, ioc->port_id); in bfa_ioc_ct2_map_port()
340 void __iomem *rb = ioc->pcidev.pci_bar_kva; in bfa_ioc_ct_isr_mode_set()
372 r32 = readl(ioc->ioc_regs.lpu_read_stat); in bfa_ioc_ct2_lpu_read_stat()
374 writel(1, ioc->ioc_regs.lpu_read_stat); in bfa_ioc_ct2_lpu_read_stat()
388 bfa_ioc_sem_get(ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_ownership_reset()
389 writel(0, ioc->ioc_regs.ioc_usage_reg); in bfa_ioc_ct_ownership_reset()
390 readl(ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_ownership_reset()
391 writel(1, ioc->ioc_regs.ioc_usage_sem_reg); in bfa_ioc_ct_ownership_reset()
393 writel(0, ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_ownership_reset()
399 readl(ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_ct_ownership_reset()
400 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_ct_ownership_reset()
406 uint32_t r32 = readl(ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_start()
417 writel(0, ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_start()
418 writel(1, ioc->ioc_regs.ioc_usage_reg); in bfa_ioc_ct_sync_start()
419 writel(BFI_IOC_UNINIT, ioc->ioc_regs.ioc_fwstate); in bfa_ioc_ct_sync_start()
420 writel(BFI_IOC_UNINIT, ioc->ioc_regs.alt_ioc_fwstate); in bfa_ioc_ct_sync_start()
433 uint32_t r32 = readl(ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_join()
436 writel((r32 | sync_pos), ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_join()
442 uint32_t r32 = readl(ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_leave()
446 writel((r32 & ~sync_msk), ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_leave()
452 uint32_t r32 = readl(ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_ack()
455 ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_ack()
461 uint32_t r32 = readl(ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_complete()
482 ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_complete()
483 writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate); in bfa_ioc_ct_sync_complete()
484 writel(BFI_IOC_FAIL, ioc->ioc_regs.alt_ioc_fwstate); in bfa_ioc_ct_sync_complete()
494 writel((r32 | sync_ackd), ioc->ioc_regs.ioc_fail_sync); in bfa_ioc_ct_sync_complete()
505 hwif->ioc_firmware_lock = bfa_ioc_ct_firmware_lock; in bfa_ioc_set_ctx_hwif()
506 hwif->ioc_firmware_unlock = bfa_ioc_ct_firmware_unlock; in bfa_ioc_set_ctx_hwif()
507 hwif->ioc_notify_fail = bfa_ioc_ct_notify_fail; in bfa_ioc_set_ctx_hwif()
508 hwif->ioc_ownership_reset = bfa_ioc_ct_ownership_reset; in bfa_ioc_set_ctx_hwif()
509 hwif->ioc_sync_start = bfa_ioc_ct_sync_start; in bfa_ioc_set_ctx_hwif()
510 hwif->ioc_sync_join = bfa_ioc_ct_sync_join; in bfa_ioc_set_ctx_hwif()
511 hwif->ioc_sync_leave = bfa_ioc_ct_sync_leave; in bfa_ioc_set_ctx_hwif()
512 hwif->ioc_sync_ack = bfa_ioc_ct_sync_ack; in bfa_ioc_set_ctx_hwif()
513 hwif->ioc_sync_complete = bfa_ioc_ct_sync_complete; in bfa_ioc_set_ctx_hwif()
514 hwif->ioc_set_fwstate = bfa_ioc_ct_set_cur_ioc_fwstate; in bfa_ioc_set_ctx_hwif()
515 hwif->ioc_get_fwstate = bfa_ioc_ct_get_cur_ioc_fwstate; in bfa_ioc_set_ctx_hwif()
516 hwif->ioc_set_alt_fwstate = bfa_ioc_ct_set_alt_ioc_fwstate; in bfa_ioc_set_ctx_hwif()
517 hwif->ioc_get_alt_fwstate = bfa_ioc_ct_get_alt_ioc_fwstate; in bfa_ioc_set_ctx_hwif()
532 ioc->ioc_hwif = &hwif_ct; in bfa_ioc_set_ct_hwif()
548 ioc->ioc_hwif = &hwif_ct2; in bfa_ioc_set_ct2_hwif()
552 * Workaround for MSI-X resource allocation for catapult-2 with no asic block
564 void __iomem *rb = ioc->pcidev.pci_bar_kva; in bfa_ioc_ct2_poweron()
574 writel(__MSIX_VT_NUMVT_(HOSTFN_MSIX_DEFAULT - 1) | in bfa_ioc_ct2_poweron()
653 * put s_clk PLL and PLL FSM in reset in bfa_ioc_ct2_sclk_init()
662 * Ignore mode and program for the max clock (which is FC16) in bfa_ioc_ct2_sclk_init()
663 * Firmware/NFC will do the PLL init appropiately in bfa_ioc_ct2_sclk_init()
670 * while doing PLL init dont clock gate ethernet subsystem in bfa_ioc_ct2_sclk_init()
698 * put l_clk PLL and PLL FSM in reset in bfa_ioc_ct2_lclk_init()
970 writel(fwstate, ioc->ioc_regs.ioc_fwstate); in bfa_ioc_ct_set_cur_ioc_fwstate()
976 return (enum bfi_ioc_state)readl(ioc->ioc_regs.ioc_fwstate); in bfa_ioc_ct_get_cur_ioc_fwstate()
983 writel(fwstate, ioc->ioc_regs.alt_ioc_fwstate); in bfa_ioc_ct_set_alt_ioc_fwstate()
989 return (enum bfi_ioc_state) readl(ioc->ioc_regs.alt_ioc_fwstate); in bfa_ioc_ct_get_alt_ioc_fwstate()