Skip to content

Commit 15f3ddf

Browse files
logostdavem330
authored andcommitted
net: aquantia: regression on cpus with high cores: set mode with 8 queues
Recently the maximum number of queues was increased up to 8, but NIC was not fully configured for 8 queues. In setups with more than 4 CPU cores parts of TX traffic gets lost if the kernel routes it to queues 4th-8th. This patch sets a tx hw traffic mode with 8 queues. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=202651 Fixes: 71a963c ("net: aquantia: increase max number of hw queues") Reported-by: Nicholas Johnson <nicholas.johnson@outlook.com.au> Signed-off-by: Dmitry Bogdanov <dmitry.bogdanov@aquantia.com> Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent ada641f commit 15f3ddf

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,9 @@ static int hw_atl_b0_hw_offload_set(struct aq_hw_s *self,
275275

276276
static int hw_atl_b0_hw_init_tx_path(struct aq_hw_s *self)
277277
{
278+
/* Tx TC/Queue number config */
279+
hw_atl_rpb_tps_tx_tc_mode_set(self, 1U);
280+
278281
hw_atl_thm_lso_tcp_flag_of_first_pkt_set(self, 0x0FF6U);
279282
hw_atl_thm_lso_tcp_flag_of_middle_pkt_set(self, 0x0FF6U);
280283
hw_atl_thm_lso_tcp_flag_of_last_pkt_set(self, 0x0F7FU);

drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,6 +1274,15 @@ void hw_atl_tpb_tx_buff_en_set(struct aq_hw_s *aq_hw, u32 tx_buff_en)
12741274
HW_ATL_TPB_TX_BUF_EN_SHIFT, tx_buff_en);
12751275
}
12761276

1277+
void hw_atl_rpb_tps_tx_tc_mode_set(struct aq_hw_s *aq_hw,
1278+
u32 tx_traf_class_mode)
1279+
{
1280+
aq_hw_write_reg_bit(aq_hw, HW_ATL_TPB_TX_TC_MODE_ADDR,
1281+
HW_ATL_TPB_TX_TC_MODE_MSK,
1282+
HW_ATL_TPB_TX_TC_MODE_SHIFT,
1283+
tx_traf_class_mode);
1284+
}
1285+
12771286
void hw_atl_tpb_tx_buff_hi_threshold_per_tc_set(struct aq_hw_s *aq_hw,
12781287
u32 tx_buff_hi_threshold_per_tc,
12791288
u32 buffer)

drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,10 @@ void hw_atl_thm_lso_tcp_flag_of_middle_pkt_set(struct aq_hw_s *aq_hw,
605605

606606
/* tpb */
607607

608+
/* set TX Traffic Class Mode */
609+
void hw_atl_rpb_tps_tx_tc_mode_set(struct aq_hw_s *aq_hw,
610+
u32 tx_traf_class_mode);
611+
608612
/* set tx buffer enable */
609613
void hw_atl_tpb_tx_buff_en_set(struct aq_hw_s *aq_hw, u32 tx_buff_en);
610614

drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1948,6 +1948,19 @@
19481948
/* default value of bitfield tx_buf_en */
19491949
#define HW_ATL_TPB_TX_BUF_EN_DEFAULT 0x0
19501950

1951+
/* register address for bitfield tx_tc_mode */
1952+
#define HW_ATL_TPB_TX_TC_MODE_ADDR 0x00007900
1953+
/* bitmask for bitfield tx_tc_mode */
1954+
#define HW_ATL_TPB_TX_TC_MODE_MSK 0x00000100
1955+
/* inverted bitmask for bitfield tx_tc_mode */
1956+
#define HW_ATL_TPB_TX_TC_MODE_MSKN 0xFFFFFEFF
1957+
/* lower bit position of bitfield tx_tc_mode */
1958+
#define HW_ATL_TPB_TX_TC_MODE_SHIFT 8
1959+
/* width of bitfield tx_tc_mode */
1960+
#define HW_ATL_TPB_TX_TC_MODE_WIDTH 1
1961+
/* default value of bitfield tx_tc_mode */
1962+
#define HW_ATL_TPB_TX_TC_MODE_DEFAULT 0x0
1963+
19511964
/* tx tx{b}_hi_thresh[c:0] bitfield definitions
19521965
* preprocessor definitions for the bitfield "tx{b}_hi_thresh[c:0]".
19531966
* parameter: buffer {b} | stride size 0x10 | range [0, 7]

0 commit comments

Comments
 (0)