bnx2x: Clean previous IGU status before ack
When enabling interrupts, acknowledge the interrupt only after configuring the IGU to the correct interrupt mode (otherwise it would dirty selftests) Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com> Signed-off-by: Ariel Elior <ariele@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
823e1d9079
commit
ebe61d80b4
@ -1681,7 +1681,6 @@ static int bnx2x_setup_irqs(struct bnx2x *bp)
|
|||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
} else {
|
} else {
|
||||||
bnx2x_ack_int(bp);
|
|
||||||
rc = bnx2x_req_irq(bp);
|
rc = bnx2x_req_irq(bp);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
BNX2X_ERR("IRQ request failed rc %d, aborting\n", rc);
|
BNX2X_ERR("IRQ request failed rc %d, aborting\n", rc);
|
||||||
|
@ -1539,26 +1539,31 @@ static void bnx2x_igu_int_enable(struct bnx2x *bp)
|
|||||||
if (msix) {
|
if (msix) {
|
||||||
val &= ~(IGU_PF_CONF_INT_LINE_EN |
|
val &= ~(IGU_PF_CONF_INT_LINE_EN |
|
||||||
IGU_PF_CONF_SINGLE_ISR_EN);
|
IGU_PF_CONF_SINGLE_ISR_EN);
|
||||||
val |= (IGU_PF_CONF_FUNC_EN |
|
val |= (IGU_PF_CONF_MSI_MSIX_EN |
|
||||||
IGU_PF_CONF_MSI_MSIX_EN |
|
|
||||||
IGU_PF_CONF_ATTN_BIT_EN);
|
IGU_PF_CONF_ATTN_BIT_EN);
|
||||||
|
|
||||||
if (single_msix)
|
if (single_msix)
|
||||||
val |= IGU_PF_CONF_SINGLE_ISR_EN;
|
val |= IGU_PF_CONF_SINGLE_ISR_EN;
|
||||||
} else if (msi) {
|
} else if (msi) {
|
||||||
val &= ~IGU_PF_CONF_INT_LINE_EN;
|
val &= ~IGU_PF_CONF_INT_LINE_EN;
|
||||||
val |= (IGU_PF_CONF_FUNC_EN |
|
val |= (IGU_PF_CONF_MSI_MSIX_EN |
|
||||||
IGU_PF_CONF_MSI_MSIX_EN |
|
|
||||||
IGU_PF_CONF_ATTN_BIT_EN |
|
IGU_PF_CONF_ATTN_BIT_EN |
|
||||||
IGU_PF_CONF_SINGLE_ISR_EN);
|
IGU_PF_CONF_SINGLE_ISR_EN);
|
||||||
} else {
|
} else {
|
||||||
val &= ~IGU_PF_CONF_MSI_MSIX_EN;
|
val &= ~IGU_PF_CONF_MSI_MSIX_EN;
|
||||||
val |= (IGU_PF_CONF_FUNC_EN |
|
val |= (IGU_PF_CONF_INT_LINE_EN |
|
||||||
IGU_PF_CONF_INT_LINE_EN |
|
|
||||||
IGU_PF_CONF_ATTN_BIT_EN |
|
IGU_PF_CONF_ATTN_BIT_EN |
|
||||||
IGU_PF_CONF_SINGLE_ISR_EN);
|
IGU_PF_CONF_SINGLE_ISR_EN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Clean previous status - need to configure igu prior to ack*/
|
||||||
|
if ((!msix) || single_msix) {
|
||||||
|
REG_WR(bp, IGU_REG_PF_CONFIGURATION, val);
|
||||||
|
bnx2x_ack_int(bp);
|
||||||
|
}
|
||||||
|
|
||||||
|
val |= IGU_PF_CONF_FUNC_EN;
|
||||||
|
|
||||||
DP(NETIF_MSG_IFUP, "write 0x%x to IGU mode %s\n",
|
DP(NETIF_MSG_IFUP, "write 0x%x to IGU mode %s\n",
|
||||||
val, (msix ? "MSI-X" : (msi ? "MSI" : "INTx")));
|
val, (msix ? "MSI-X" : (msi ? "MSI" : "INTx")));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user