Merge branch 'bnx2x-next'
Yuval Mintz says: ==================== bnx2x: `fixes' patch-series This series contains mostly bug fixes, but never the less is intended for `net-next' and not `net', as: - Some of the fixes are quite insignificant [`VF clean statistics', `ethtool -d might cause timeout in log']. - Some only recently were submitted to `net-next' [`Fix timesync endianity']. - Some are not usually compiled as part of the kernel [`Fix stop-on-error']. Dave - please consider applying this series to `net-next'; If you prefer, I can break this series into 2 parts [one for `net' and the other for `net-next'] - but personally I don't see much benefit in it. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
9785820e6d
5 changed files with 44 additions and 18 deletions
|
@ -3874,12 +3874,16 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
/* when transmitting in a vf, start bd must hold the ethertype
|
||||
* for fw to enforce it
|
||||
*/
|
||||
#ifndef BNX2X_STOP_ON_ERROR
|
||||
if (IS_VF(bp))
|
||||
#endif
|
||||
tx_start_bd->vlan_or_ethertype =
|
||||
cpu_to_le16(ntohs(eth->h_proto));
|
||||
#ifndef BNX2X_STOP_ON_ERROR
|
||||
else
|
||||
/* used by FW for packet accounting */
|
||||
tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod);
|
||||
#endif
|
||||
}
|
||||
|
||||
nbd = 2; /* start_bd + pbd + frags (updated when pages are mapped) */
|
||||
|
@ -3952,11 +3956,22 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
&pbd_e2->data.mac_addr.dst_mid,
|
||||
&pbd_e2->data.mac_addr.dst_lo,
|
||||
eth->h_dest);
|
||||
} else if (bp->flags & TX_SWITCHING) {
|
||||
bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.dst_hi,
|
||||
&pbd_e2->data.mac_addr.dst_mid,
|
||||
&pbd_e2->data.mac_addr.dst_lo,
|
||||
eth->h_dest);
|
||||
} else {
|
||||
if (bp->flags & TX_SWITCHING)
|
||||
bnx2x_set_fw_mac_addr(
|
||||
&pbd_e2->data.mac_addr.dst_hi,
|
||||
&pbd_e2->data.mac_addr.dst_mid,
|
||||
&pbd_e2->data.mac_addr.dst_lo,
|
||||
eth->h_dest);
|
||||
#ifdef BNX2X_STOP_ON_ERROR
|
||||
/* Enforce security is always set in Stop on Error -
|
||||
* source mac should be present in the parsing BD
|
||||
*/
|
||||
bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.src_hi,
|
||||
&pbd_e2->data.mac_addr.src_mid,
|
||||
&pbd_e2->data.mac_addr.src_lo,
|
||||
eth->h_source);
|
||||
#endif
|
||||
}
|
||||
|
||||
SET_FLAG(pbd_e2_parsing_data,
|
||||
|
@ -4796,11 +4811,15 @@ netdev_features_t bnx2x_fix_features(struct net_device *dev,
|
|||
struct bnx2x *bp = netdev_priv(dev);
|
||||
|
||||
/* TPA requires Rx CSUM offloading */
|
||||
if (!(features & NETIF_F_RXCSUM) || bp->disable_tpa) {
|
||||
if (!(features & NETIF_F_RXCSUM)) {
|
||||
features &= ~NETIF_F_LRO;
|
||||
features &= ~NETIF_F_GRO;
|
||||
}
|
||||
|
||||
/* Note: do not disable SW GRO in kernel when HW GRO is off */
|
||||
if (bp->disable_tpa)
|
||||
features &= ~NETIF_F_LRO;
|
||||
|
||||
return features;
|
||||
}
|
||||
|
||||
|
@ -4839,6 +4858,10 @@ int bnx2x_set_features(struct net_device *dev, netdev_features_t features)
|
|||
if ((changes & GRO_ENABLE_FLAG) && (flags & TPA_ENABLE_FLAG))
|
||||
changes &= ~GRO_ENABLE_FLAG;
|
||||
|
||||
/* if GRO is changed while HW TPA is off, don't force a reload */
|
||||
if ((changes & GRO_ENABLE_FLAG) && bp->disable_tpa)
|
||||
changes &= ~GRO_ENABLE_FLAG;
|
||||
|
||||
if (changes)
|
||||
bnx2x_reload = true;
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ struct dump_header {
|
|||
u32 dump_meta_data; /* OR of CHIP and PATH. */
|
||||
};
|
||||
|
||||
#define BNX2X_DUMP_VERSION 0x50acff01
|
||||
#define BNX2X_DUMP_VERSION 0x61111111
|
||||
struct reg_addr {
|
||||
u32 addr;
|
||||
u32 size;
|
||||
|
@ -1464,7 +1464,6 @@ static const struct reg_addr reg_addrs[] = {
|
|||
{ 0x180398, 1, 0x1c, 0x924},
|
||||
{ 0x1803a0, 5, 0x1c, 0x924},
|
||||
{ 0x1803b4, 2, 0x18, 0x924},
|
||||
{ 0x180400, 256, 0x3, 0xfff},
|
||||
{ 0x181000, 4, 0x1f, 0x93c},
|
||||
{ 0x181010, 1020, 0x1f, 0x38},
|
||||
{ 0x182000, 4, 0x18, 0x924},
|
||||
|
@ -1576,7 +1575,6 @@ static const struct reg_addr reg_addrs[] = {
|
|||
{ 0x200398, 1, 0x1c, 0x924},
|
||||
{ 0x2003a0, 1, 0x1c, 0x924},
|
||||
{ 0x2003a8, 2, 0x1c, 0x924},
|
||||
{ 0x200400, 256, 0x3, 0xfff},
|
||||
{ 0x202000, 4, 0x1f, 0x1927},
|
||||
{ 0x202010, 2044, 0x1f, 0x1007},
|
||||
{ 0x204000, 4, 0x18, 0x924},
|
||||
|
@ -1688,7 +1686,6 @@ static const struct reg_addr reg_addrs[] = {
|
|||
{ 0x280398, 1, 0x1c, 0x924},
|
||||
{ 0x2803a0, 1, 0x1c, 0x924},
|
||||
{ 0x2803a8, 2, 0x1c, 0x924},
|
||||
{ 0x280400, 256, 0x3, 0xfff},
|
||||
{ 0x282000, 4, 0x1f, 0x9e4},
|
||||
{ 0x282010, 2044, 0x1f, 0x1c0},
|
||||
{ 0x284000, 4, 0x18, 0x924},
|
||||
|
@ -1800,7 +1797,6 @@ static const struct reg_addr reg_addrs[] = {
|
|||
{ 0x300398, 1, 0x1c, 0x924},
|
||||
{ 0x3003a0, 1, 0x1c, 0x924},
|
||||
{ 0x3003a8, 2, 0x1c, 0x924},
|
||||
{ 0x300400, 256, 0x3, 0xfff},
|
||||
{ 0x302000, 4, 0x1f, 0xf24},
|
||||
{ 0x302010, 2044, 0x1f, 0xe00},
|
||||
{ 0x304000, 4, 0x18, 0x924},
|
||||
|
@ -2206,10 +2202,10 @@ static const struct wreg_addr wreg_addr_e3b0 = {
|
|||
0x1b0c00, 128, 2, read_reg_e3b0, 0x1f, 0x1fff};
|
||||
|
||||
static const unsigned int dump_num_registers[NUM_CHIPS][NUM_PRESETS] = {
|
||||
{20782, 18567, 27975, 19729, 18311, 27719, 20836, 32391, 41799, 20812,
|
||||
26247, 35655, 19074},
|
||||
{32774, 19297, 33277, 31721, 19041, 33021, 32828, 33121, 47101, 32804,
|
||||
26977, 40957, 35895},
|
||||
{19758, 17543, 26951, 18705, 17287, 26695, 19812, 31367, 40775, 19788,
|
||||
25223, 34631, 19074},
|
||||
{31750, 18273, 32253, 30697, 18017, 31997, 31804, 32097, 46077, 31780,
|
||||
25953, 39933, 35895},
|
||||
{36527, 17928, 33697, 35474, 18700, 34466, 36581, 31752, 47521, 36557,
|
||||
25608, 41377, 43903},
|
||||
{45239, 17936, 34387, 44186, 18708, 35156, 45293, 31760, 48211, 45269,
|
||||
|
|
|
@ -1143,7 +1143,7 @@ void bnx2x_panic_dump(struct bnx2x *bp, bool disable_int)
|
|||
if (!fp->txdata_ptr)
|
||||
break;
|
||||
|
||||
if (!txdata.tx_cons_sb)
|
||||
if (!txdata->tx_cons_sb)
|
||||
continue;
|
||||
|
||||
start = TX_BD(le16_to_cpu(*txdata->tx_cons_sb) - 10);
|
||||
|
|
|
@ -5877,8 +5877,10 @@ int bnx2x_func_send_set_timesync(struct bnx2x *bp,
|
|||
set_timesync_params->add_sub_drift_adjust_value;
|
||||
rdata->drift_adjust_value = set_timesync_params->drift_adjust_value;
|
||||
rdata->drift_adjust_period = set_timesync_params->drift_adjust_period;
|
||||
rdata->offset_delta.lo = U64_LO(set_timesync_params->offset_delta);
|
||||
rdata->offset_delta.hi = U64_HI(set_timesync_params->offset_delta);
|
||||
rdata->offset_delta.lo =
|
||||
cpu_to_le32(U64_LO(set_timesync_params->offset_delta));
|
||||
rdata->offset_delta.hi =
|
||||
cpu_to_le32(U64_HI(set_timesync_params->offset_delta));
|
||||
|
||||
DP(BNX2X_MSG_SP, "Set timesync command params: drift_cmd = %d, offset_cmd = %d, add_sub_drift = %d, drift_val = %d, drift_period = %d, offset_lo = %d, offset_hi = %d\n",
|
||||
rdata->drift_adjust_cmd, rdata->offset_cmd,
|
||||
|
|
|
@ -1629,6 +1629,11 @@ void bnx2x_stats_init(struct bnx2x *bp)
|
|||
int /*abs*/port = BP_PORT(bp);
|
||||
int mb_idx = BP_FW_MB_IDX(bp);
|
||||
|
||||
if (IS_VF(bp)) {
|
||||
bnx2x_memset_stats(bp);
|
||||
return;
|
||||
}
|
||||
|
||||
bp->stats_pending = 0;
|
||||
bp->executer_idx = 0;
|
||||
bp->stats_counter = 0;
|
||||
|
|
Loading…
Reference in a new issue