bna: Set Get IOC fw State
Add APIs to set and get IOC currnet fw state and alt IOC fw state - bfa_ioc_ct_set_cur_ioc_fwstate() - bfa_ioc_ct_get_cur_ioc_fwstate() - bfa_ioc_ct_set_alt_ioc_fwstate() - bfa_ioc_ct_get_alt_ioc_fwstate() Signed-off-by: Rasesh Mody <rmody@brocade.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fee1253e28
commit
41ed903ad8
|
@ -42,6 +42,14 @@
|
||||||
((__ioc)->ioc_hwif->ioc_sync_ack(__ioc))
|
((__ioc)->ioc_hwif->ioc_sync_ack(__ioc))
|
||||||
#define bfa_ioc_sync_complete(__ioc) \
|
#define bfa_ioc_sync_complete(__ioc) \
|
||||||
((__ioc)->ioc_hwif->ioc_sync_complete(__ioc))
|
((__ioc)->ioc_hwif->ioc_sync_complete(__ioc))
|
||||||
|
#define bfa_ioc_set_cur_ioc_fwstate(__ioc, __fwstate) \
|
||||||
|
((__ioc)->ioc_hwif->ioc_set_fwstate(__ioc, __fwstate))
|
||||||
|
#define bfa_ioc_get_cur_ioc_fwstate(__ioc) \
|
||||||
|
((__ioc)->ioc_hwif->ioc_get_fwstate(__ioc))
|
||||||
|
#define bfa_ioc_set_alt_ioc_fwstate(__ioc, __fwstate) \
|
||||||
|
((__ioc)->ioc_hwif->ioc_set_alt_fwstate(__ioc, __fwstate))
|
||||||
|
#define bfa_ioc_get_alt_ioc_fwstate(__ioc) \
|
||||||
|
((__ioc)->ioc_hwif->ioc_get_alt_fwstate(__ioc))
|
||||||
|
|
||||||
#define bfa_ioc_mbox_cmd_pending(__ioc) \
|
#define bfa_ioc_mbox_cmd_pending(__ioc) \
|
||||||
(!list_empty(&((__ioc)->mbox_mod.cmd_q)) || \
|
(!list_empty(&((__ioc)->mbox_mod.cmd_q)) || \
|
||||||
|
@ -860,7 +868,7 @@ bfa_iocpf_sm_disabling(struct bfa_iocpf *iocpf, enum iocpf_event event)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
case IOCPF_E_TIMEOUT:
|
case IOCPF_E_TIMEOUT:
|
||||||
writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate);
|
bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL);
|
||||||
bfa_fsm_set_state(iocpf, bfa_iocpf_sm_disabling_sync);
|
bfa_fsm_set_state(iocpf, bfa_iocpf_sm_disabling_sync);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -949,7 +957,7 @@ bfa_iocpf_sm_initfail_sync(struct bfa_iocpf *iocpf, enum iocpf_event event)
|
||||||
case IOCPF_E_SEMLOCKED:
|
case IOCPF_E_SEMLOCKED:
|
||||||
bfa_ioc_notify_fail(ioc);
|
bfa_ioc_notify_fail(ioc);
|
||||||
bfa_ioc_sync_leave(ioc);
|
bfa_ioc_sync_leave(ioc);
|
||||||
writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate);
|
bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL);
|
||||||
bfa_nw_ioc_hw_sem_release(ioc);
|
bfa_nw_ioc_hw_sem_release(ioc);
|
||||||
bfa_fsm_set_state(iocpf, bfa_iocpf_sm_initfail);
|
bfa_fsm_set_state(iocpf, bfa_iocpf_sm_initfail);
|
||||||
break;
|
break;
|
||||||
|
@ -1031,7 +1039,7 @@ bfa_iocpf_sm_fail_sync(struct bfa_iocpf *iocpf, enum iocpf_event event)
|
||||||
bfa_ioc_notify_fail(ioc);
|
bfa_ioc_notify_fail(ioc);
|
||||||
if (!iocpf->auto_recover) {
|
if (!iocpf->auto_recover) {
|
||||||
bfa_ioc_sync_leave(ioc);
|
bfa_ioc_sync_leave(ioc);
|
||||||
writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate);
|
bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL);
|
||||||
bfa_nw_ioc_hw_sem_release(ioc);
|
bfa_nw_ioc_hw_sem_release(ioc);
|
||||||
bfa_fsm_set_state(iocpf, bfa_iocpf_sm_fail);
|
bfa_fsm_set_state(iocpf, bfa_iocpf_sm_fail);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1162,7 +1170,7 @@ bfa_ioc_hw_sem_init(struct bfa_ioc *ioc)
|
||||||
r32 = readl(ioc->ioc_regs.ioc_init_sem_reg);
|
r32 = readl(ioc->ioc_regs.ioc_init_sem_reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
fwstate = readl(ioc->ioc_regs.ioc_fwstate);
|
fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc);
|
||||||
if (fwstate == BFI_IOC_UNINIT) {
|
if (fwstate == BFI_IOC_UNINIT) {
|
||||||
writel(1, ioc->ioc_regs.ioc_init_sem_reg);
|
writel(1, ioc->ioc_regs.ioc_init_sem_reg);
|
||||||
return;
|
return;
|
||||||
|
@ -1176,8 +1184,8 @@ bfa_ioc_hw_sem_init(struct bfa_ioc *ioc)
|
||||||
}
|
}
|
||||||
|
|
||||||
bfa_ioc_fwver_clear(ioc);
|
bfa_ioc_fwver_clear(ioc);
|
||||||
writel(BFI_IOC_UNINIT, ioc->ioc_regs.ioc_fwstate);
|
bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_UNINIT);
|
||||||
writel(BFI_IOC_UNINIT, ioc->ioc_regs.alt_ioc_fwstate);
|
bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_UNINIT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Try to lock and then unlock the semaphore.
|
* Try to lock and then unlock the semaphore.
|
||||||
|
@ -1366,7 +1374,7 @@ bfa_ioc_hwinit(struct bfa_ioc *ioc, bool force)
|
||||||
bool fwvalid;
|
bool fwvalid;
|
||||||
u32 boot_env;
|
u32 boot_env;
|
||||||
|
|
||||||
ioc_fwstate = readl(ioc->ioc_regs.ioc_fwstate);
|
ioc_fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc);
|
||||||
|
|
||||||
if (force)
|
if (force)
|
||||||
ioc_fwstate = BFI_IOC_UNINIT;
|
ioc_fwstate = BFI_IOC_UNINIT;
|
||||||
|
@ -1859,11 +1867,11 @@ bfa_ioc_boot(struct bfa_ioc *ioc, enum bfi_fwboot_type boot_type,
|
||||||
* Initialize IOC state of all functions on a chip reset.
|
* Initialize IOC state of all functions on a chip reset.
|
||||||
*/
|
*/
|
||||||
if (boot_type == BFI_FWBOOT_TYPE_MEMTEST) {
|
if (boot_type == BFI_FWBOOT_TYPE_MEMTEST) {
|
||||||
writel(BFI_IOC_MEMTEST, ioc->ioc_regs.ioc_fwstate);
|
bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_MEMTEST);
|
||||||
writel(BFI_IOC_MEMTEST, ioc->ioc_regs.alt_ioc_fwstate);
|
bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_MEMTEST);
|
||||||
} else {
|
} else {
|
||||||
writel(BFI_IOC_INITING, ioc->ioc_regs.ioc_fwstate);
|
bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_INITING);
|
||||||
writel(BFI_IOC_INITING, ioc->ioc_regs.alt_ioc_fwstate);
|
bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_INITING);
|
||||||
}
|
}
|
||||||
|
|
||||||
bfa_ioc_msgflush(ioc);
|
bfa_ioc_msgflush(ioc);
|
||||||
|
@ -2473,7 +2481,7 @@ bfa_nw_iocpf_sem_timeout(void *ioc_arg)
|
||||||
static void
|
static void
|
||||||
bfa_ioc_poll_fwinit(struct bfa_ioc *ioc)
|
bfa_ioc_poll_fwinit(struct bfa_ioc *ioc)
|
||||||
{
|
{
|
||||||
u32 fwstate = readl(ioc->ioc_regs.ioc_fwstate);
|
u32 fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc);
|
||||||
|
|
||||||
if (fwstate == BFI_IOC_DISABLED) {
|
if (fwstate == BFI_IOC_DISABLED) {
|
||||||
bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY);
|
bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY);
|
||||||
|
|
|
@ -215,6 +215,13 @@ struct bfa_ioc_hwif {
|
||||||
void (*ioc_sync_ack) (struct bfa_ioc *ioc);
|
void (*ioc_sync_ack) (struct bfa_ioc *ioc);
|
||||||
bool (*ioc_sync_complete) (struct bfa_ioc *ioc);
|
bool (*ioc_sync_complete) (struct bfa_ioc *ioc);
|
||||||
bool (*ioc_lpu_read_stat) (struct bfa_ioc *ioc);
|
bool (*ioc_lpu_read_stat) (struct bfa_ioc *ioc);
|
||||||
|
void (*ioc_set_fwstate) (struct bfa_ioc *ioc,
|
||||||
|
enum bfi_ioc_state fwstate);
|
||||||
|
enum bfi_ioc_state (*ioc_get_fwstate) (struct bfa_ioc *ioc);
|
||||||
|
void (*ioc_set_alt_fwstate) (struct bfa_ioc *ioc,
|
||||||
|
enum bfi_ioc_state fwstate);
|
||||||
|
enum bfi_ioc_state (*ioc_get_alt_fwstate) (struct bfa_ioc *ioc);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define bfa_ioc_pcifn(__ioc) ((__ioc)->pcidev.pci_func)
|
#define bfa_ioc_pcifn(__ioc) ((__ioc)->pcidev.pci_func)
|
||||||
|
|
|
@ -48,6 +48,12 @@ static void bfa_ioc_ct_sync_join(struct bfa_ioc *ioc);
|
||||||
static void bfa_ioc_ct_sync_leave(struct bfa_ioc *ioc);
|
static void bfa_ioc_ct_sync_leave(struct bfa_ioc *ioc);
|
||||||
static void bfa_ioc_ct_sync_ack(struct bfa_ioc *ioc);
|
static void bfa_ioc_ct_sync_ack(struct bfa_ioc *ioc);
|
||||||
static bool bfa_ioc_ct_sync_complete(struct bfa_ioc *ioc);
|
static bool bfa_ioc_ct_sync_complete(struct bfa_ioc *ioc);
|
||||||
|
static void bfa_ioc_ct_set_cur_ioc_fwstate(
|
||||||
|
struct bfa_ioc *ioc, enum bfi_ioc_state fwstate);
|
||||||
|
static enum bfi_ioc_state bfa_ioc_ct_get_cur_ioc_fwstate(struct bfa_ioc *ioc);
|
||||||
|
static void bfa_ioc_ct_set_alt_ioc_fwstate(
|
||||||
|
struct bfa_ioc *ioc, enum bfi_ioc_state fwstate);
|
||||||
|
static enum bfi_ioc_state bfa_ioc_ct_get_alt_ioc_fwstate(struct bfa_ioc *ioc);
|
||||||
static enum bfa_status bfa_ioc_ct_pll_init(void __iomem *rb,
|
static enum bfa_status bfa_ioc_ct_pll_init(void __iomem *rb,
|
||||||
enum bfi_asic_mode asic_mode);
|
enum bfi_asic_mode asic_mode);
|
||||||
static enum bfa_status bfa_ioc_ct2_pll_init(void __iomem *rb,
|
static enum bfa_status bfa_ioc_ct2_pll_init(void __iomem *rb,
|
||||||
|
@ -68,6 +74,10 @@ static const struct bfa_ioc_hwif nw_hwif_ct = {
|
||||||
.ioc_sync_leave = bfa_ioc_ct_sync_leave,
|
.ioc_sync_leave = bfa_ioc_ct_sync_leave,
|
||||||
.ioc_sync_ack = bfa_ioc_ct_sync_ack,
|
.ioc_sync_ack = bfa_ioc_ct_sync_ack,
|
||||||
.ioc_sync_complete = bfa_ioc_ct_sync_complete,
|
.ioc_sync_complete = bfa_ioc_ct_sync_complete,
|
||||||
|
.ioc_set_fwstate = bfa_ioc_ct_set_cur_ioc_fwstate,
|
||||||
|
.ioc_get_fwstate = bfa_ioc_ct_get_cur_ioc_fwstate,
|
||||||
|
.ioc_set_alt_fwstate = bfa_ioc_ct_set_alt_ioc_fwstate,
|
||||||
|
.ioc_get_alt_fwstate = bfa_ioc_ct_get_alt_ioc_fwstate,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct bfa_ioc_hwif nw_hwif_ct2 = {
|
static const struct bfa_ioc_hwif nw_hwif_ct2 = {
|
||||||
|
@ -85,6 +95,10 @@ static const struct bfa_ioc_hwif nw_hwif_ct2 = {
|
||||||
.ioc_sync_leave = bfa_ioc_ct_sync_leave,
|
.ioc_sync_leave = bfa_ioc_ct_sync_leave,
|
||||||
.ioc_sync_ack = bfa_ioc_ct_sync_ack,
|
.ioc_sync_ack = bfa_ioc_ct_sync_ack,
|
||||||
.ioc_sync_complete = bfa_ioc_ct_sync_complete,
|
.ioc_sync_complete = bfa_ioc_ct_sync_complete,
|
||||||
|
.ioc_set_fwstate = bfa_ioc_ct_set_cur_ioc_fwstate,
|
||||||
|
.ioc_get_fwstate = bfa_ioc_ct_get_cur_ioc_fwstate,
|
||||||
|
.ioc_set_alt_fwstate = bfa_ioc_ct_set_alt_ioc_fwstate,
|
||||||
|
.ioc_get_alt_fwstate = bfa_ioc_ct_get_alt_ioc_fwstate,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Called from bfa_ioc_attach() to map asic specific calls. */
|
/* Called from bfa_ioc_attach() to map asic specific calls. */
|
||||||
|
@ -565,6 +579,32 @@ bfa_ioc_ct_sync_complete(struct bfa_ioc *ioc)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bfa_ioc_ct_set_cur_ioc_fwstate(struct bfa_ioc *ioc,
|
||||||
|
enum bfi_ioc_state fwstate)
|
||||||
|
{
|
||||||
|
writel(fwstate, ioc->ioc_regs.ioc_fwstate);
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum bfi_ioc_state
|
||||||
|
bfa_ioc_ct_get_cur_ioc_fwstate(struct bfa_ioc *ioc)
|
||||||
|
{
|
||||||
|
return (enum bfi_ioc_state)readl(ioc->ioc_regs.ioc_fwstate);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bfa_ioc_ct_set_alt_ioc_fwstate(struct bfa_ioc *ioc,
|
||||||
|
enum bfi_ioc_state fwstate)
|
||||||
|
{
|
||||||
|
writel(fwstate, ioc->ioc_regs.alt_ioc_fwstate);
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum bfi_ioc_state
|
||||||
|
bfa_ioc_ct_get_alt_ioc_fwstate(struct bfa_ioc *ioc)
|
||||||
|
{
|
||||||
|
return (enum bfi_ioc_state)readl(ioc->ioc_regs.alt_ioc_fwstate);
|
||||||
|
}
|
||||||
|
|
||||||
static enum bfa_status
|
static enum bfa_status
|
||||||
bfa_ioc_ct_pll_init(void __iomem *rb, enum bfi_asic_mode asic_mode)
|
bfa_ioc_ct_pll_init(void __iomem *rb, enum bfi_asic_mode asic_mode)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue