Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pulling to get some TIPC fixes that a net-next series depends upon. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -483,11 +483,7 @@ static void bnx2x_tpa_start(struct bnx2x_fastpath *fp, u16 queue,
|
||||
|
||||
#ifdef BNX2X_STOP_ON_ERROR
|
||||
fp->tpa_queue_used |= (1 << queue);
|
||||
#ifdef _ASM_GENERIC_INT_L64_H
|
||||
DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%lx\n",
|
||||
#else
|
||||
DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%llx\n",
|
||||
#endif
|
||||
fp->tpa_queue_used);
|
||||
#endif
|
||||
}
|
||||
|
@@ -10123,6 +10123,8 @@ static void bnx2x_prev_unload_close_mac(struct bnx2x *bp,
|
||||
}
|
||||
|
||||
#define BNX2X_PREV_UNDI_PROD_ADDR(p) (BAR_TSTRORM_INTMEM + 0x1508 + ((p) << 4))
|
||||
#define BNX2X_PREV_UNDI_PROD_ADDR_H(f) (BAR_TSTRORM_INTMEM + \
|
||||
0x1848 + ((f) << 4))
|
||||
#define BNX2X_PREV_UNDI_RCQ(val) ((val) & 0xffff)
|
||||
#define BNX2X_PREV_UNDI_BD(val) ((val) >> 16 & 0xffff)
|
||||
#define BNX2X_PREV_UNDI_PROD(rcq, bd) ((bd) << 16 | (rcq))
|
||||
@@ -10130,8 +10132,6 @@ static void bnx2x_prev_unload_close_mac(struct bnx2x *bp,
|
||||
#define BCM_5710_UNDI_FW_MF_MAJOR (0x07)
|
||||
#define BCM_5710_UNDI_FW_MF_MINOR (0x08)
|
||||
#define BCM_5710_UNDI_FW_MF_VERS (0x05)
|
||||
#define BNX2X_PREV_UNDI_MF_PORT(p) (BAR_TSTRORM_INTMEM + 0x150c + ((p) << 4))
|
||||
#define BNX2X_PREV_UNDI_MF_FUNC(f) (BAR_TSTRORM_INTMEM + 0x184c + ((f) << 4))
|
||||
|
||||
static bool bnx2x_prev_is_after_undi(struct bnx2x *bp)
|
||||
{
|
||||
@@ -10150,72 +10150,25 @@ static bool bnx2x_prev_is_after_undi(struct bnx2x *bp)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool bnx2x_prev_unload_undi_fw_supports_mf(struct bnx2x *bp)
|
||||
{
|
||||
u8 major, minor, version;
|
||||
u32 fw;
|
||||
|
||||
/* Must check that FW is loaded */
|
||||
if (!(REG_RD(bp, MISC_REG_RESET_REG_1) &
|
||||
MISC_REGISTERS_RESET_REG_1_RST_XSEM)) {
|
||||
BNX2X_DEV_INFO("XSEM is reset - UNDI MF FW is not loaded\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Read Currently loaded FW version */
|
||||
fw = REG_RD(bp, XSEM_REG_PRAM);
|
||||
major = fw & 0xff;
|
||||
minor = (fw >> 0x8) & 0xff;
|
||||
version = (fw >> 0x10) & 0xff;
|
||||
BNX2X_DEV_INFO("Loaded FW: 0x%08x: Major 0x%02x Minor 0x%02x Version 0x%02x\n",
|
||||
fw, major, minor, version);
|
||||
|
||||
if (major > BCM_5710_UNDI_FW_MF_MAJOR)
|
||||
return true;
|
||||
|
||||
if ((major == BCM_5710_UNDI_FW_MF_MAJOR) &&
|
||||
(minor > BCM_5710_UNDI_FW_MF_MINOR))
|
||||
return true;
|
||||
|
||||
if ((major == BCM_5710_UNDI_FW_MF_MAJOR) &&
|
||||
(minor == BCM_5710_UNDI_FW_MF_MINOR) &&
|
||||
(version >= BCM_5710_UNDI_FW_MF_VERS))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void bnx2x_prev_unload_undi_mf(struct bnx2x *bp)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Due to legacy (FW) code, the first function on each engine has a
|
||||
* different offset macro from the rest of the functions.
|
||||
* Setting this for all 8 functions is harmless regardless of whether
|
||||
* this is actually a multi-function device.
|
||||
*/
|
||||
for (i = 0; i < 2; i++)
|
||||
REG_WR(bp, BNX2X_PREV_UNDI_MF_PORT(i), 1);
|
||||
|
||||
for (i = 2; i < 8; i++)
|
||||
REG_WR(bp, BNX2X_PREV_UNDI_MF_FUNC(i - 2), 1);
|
||||
|
||||
BNX2X_DEV_INFO("UNDI FW (MF) set to discard\n");
|
||||
}
|
||||
|
||||
static void bnx2x_prev_unload_undi_inc(struct bnx2x *bp, u8 port, u8 inc)
|
||||
static void bnx2x_prev_unload_undi_inc(struct bnx2x *bp, u8 inc)
|
||||
{
|
||||
u16 rcq, bd;
|
||||
u32 tmp_reg = REG_RD(bp, BNX2X_PREV_UNDI_PROD_ADDR(port));
|
||||
u32 addr, tmp_reg;
|
||||
|
||||
if (BP_FUNC(bp) < 2)
|
||||
addr = BNX2X_PREV_UNDI_PROD_ADDR(BP_PORT(bp));
|
||||
else
|
||||
addr = BNX2X_PREV_UNDI_PROD_ADDR_H(BP_FUNC(bp) - 2);
|
||||
|
||||
tmp_reg = REG_RD(bp, addr);
|
||||
rcq = BNX2X_PREV_UNDI_RCQ(tmp_reg) + inc;
|
||||
bd = BNX2X_PREV_UNDI_BD(tmp_reg) + inc;
|
||||
|
||||
tmp_reg = BNX2X_PREV_UNDI_PROD(rcq, bd);
|
||||
REG_WR(bp, BNX2X_PREV_UNDI_PROD_ADDR(port), tmp_reg);
|
||||
REG_WR(bp, addr, tmp_reg);
|
||||
|
||||
BNX2X_DEV_INFO("UNDI producer [%d] rings bd -> 0x%04x, rcq -> 0x%04x\n",
|
||||
port, bd, rcq);
|
||||
BNX2X_DEV_INFO("UNDI producer [%d/%d][%08x] rings bd -> 0x%04x, rcq -> 0x%04x\n",
|
||||
BP_PORT(bp), BP_FUNC(bp), addr, bd, rcq);
|
||||
}
|
||||
|
||||
static int bnx2x_prev_mcp_done(struct bnx2x *bp)
|
||||
@@ -10454,7 +10407,6 @@ static int bnx2x_prev_unload_common(struct bnx2x *bp)
|
||||
/* Reset should be performed after BRB is emptied */
|
||||
if (reset_reg & MISC_REGISTERS_RESET_REG_1_RST_BRB1) {
|
||||
u32 timer_count = 1000;
|
||||
bool need_write = true;
|
||||
|
||||
/* Close the MAC Rx to prevent BRB from filling up */
|
||||
bnx2x_prev_unload_close_mac(bp, &mac_vals);
|
||||
@@ -10491,20 +10443,10 @@ static int bnx2x_prev_unload_common(struct bnx2x *bp)
|
||||
else
|
||||
timer_count--;
|
||||
|
||||
/* New UNDI FW supports MF and contains better
|
||||
* cleaning methods - might be redundant but harmless.
|
||||
*/
|
||||
if (bnx2x_prev_unload_undi_fw_supports_mf(bp)) {
|
||||
if (need_write) {
|
||||
bnx2x_prev_unload_undi_mf(bp);
|
||||
need_write = false;
|
||||
}
|
||||
} else if (prev_undi) {
|
||||
/* If UNDI resides in memory,
|
||||
* manually increment it
|
||||
*/
|
||||
bnx2x_prev_unload_undi_inc(bp, BP_PORT(bp), 1);
|
||||
}
|
||||
/* If UNDI resides in memory, manually increment it */
|
||||
if (prev_undi)
|
||||
bnx2x_prev_unload_undi_inc(bp, 1);
|
||||
|
||||
udelay(10);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user