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: 71a963cfc5
("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>
This commit is contained in:
parent
ada641ff6e
commit
15f3ddf53d
|
@ -275,6 +275,9 @@ static int hw_atl_b0_hw_offload_set(struct aq_hw_s *self,
|
|||
|
||||
static int hw_atl_b0_hw_init_tx_path(struct aq_hw_s *self)
|
||||
{
|
||||
/* Tx TC/Queue number config */
|
||||
hw_atl_rpb_tps_tx_tc_mode_set(self, 1U);
|
||||
|
||||
hw_atl_thm_lso_tcp_flag_of_first_pkt_set(self, 0x0FF6U);
|
||||
hw_atl_thm_lso_tcp_flag_of_middle_pkt_set(self, 0x0FF6U);
|
||||
hw_atl_thm_lso_tcp_flag_of_last_pkt_set(self, 0x0F7FU);
|
||||
|
|
|
@ -1274,6 +1274,15 @@ void hw_atl_tpb_tx_buff_en_set(struct aq_hw_s *aq_hw, u32 tx_buff_en)
|
|||
HW_ATL_TPB_TX_BUF_EN_SHIFT, tx_buff_en);
|
||||
}
|
||||
|
||||
void hw_atl_rpb_tps_tx_tc_mode_set(struct aq_hw_s *aq_hw,
|
||||
u32 tx_traf_class_mode)
|
||||
{
|
||||
aq_hw_write_reg_bit(aq_hw, HW_ATL_TPB_TX_TC_MODE_ADDR,
|
||||
HW_ATL_TPB_TX_TC_MODE_MSK,
|
||||
HW_ATL_TPB_TX_TC_MODE_SHIFT,
|
||||
tx_traf_class_mode);
|
||||
}
|
||||
|
||||
void hw_atl_tpb_tx_buff_hi_threshold_per_tc_set(struct aq_hw_s *aq_hw,
|
||||
u32 tx_buff_hi_threshold_per_tc,
|
||||
u32 buffer)
|
||||
|
|
|
@ -605,6 +605,10 @@ void hw_atl_thm_lso_tcp_flag_of_middle_pkt_set(struct aq_hw_s *aq_hw,
|
|||
|
||||
/* tpb */
|
||||
|
||||
/* set TX Traffic Class Mode */
|
||||
void hw_atl_rpb_tps_tx_tc_mode_set(struct aq_hw_s *aq_hw,
|
||||
u32 tx_traf_class_mode);
|
||||
|
||||
/* set tx buffer enable */
|
||||
void hw_atl_tpb_tx_buff_en_set(struct aq_hw_s *aq_hw, u32 tx_buff_en);
|
||||
|
||||
|
|
|
@ -1948,6 +1948,19 @@
|
|||
/* default value of bitfield tx_buf_en */
|
||||
#define HW_ATL_TPB_TX_BUF_EN_DEFAULT 0x0
|
||||
|
||||
/* register address for bitfield tx_tc_mode */
|
||||
#define HW_ATL_TPB_TX_TC_MODE_ADDR 0x00007900
|
||||
/* bitmask for bitfield tx_tc_mode */
|
||||
#define HW_ATL_TPB_TX_TC_MODE_MSK 0x00000100
|
||||
/* inverted bitmask for bitfield tx_tc_mode */
|
||||
#define HW_ATL_TPB_TX_TC_MODE_MSKN 0xFFFFFEFF
|
||||
/* lower bit position of bitfield tx_tc_mode */
|
||||
#define HW_ATL_TPB_TX_TC_MODE_SHIFT 8
|
||||
/* width of bitfield tx_tc_mode */
|
||||
#define HW_ATL_TPB_TX_TC_MODE_WIDTH 1
|
||||
/* default value of bitfield tx_tc_mode */
|
||||
#define HW_ATL_TPB_TX_TC_MODE_DEFAULT 0x0
|
||||
|
||||
/* tx tx{b}_hi_thresh[c:0] bitfield definitions
|
||||
* preprocessor definitions for the bitfield "tx{b}_hi_thresh[c:0]".
|
||||
* parameter: buffer {b} | stride size 0x10 | range [0, 7]
|
||||
|
|
Loading…
Reference in New Issue