Merge branch 'hns3-next'
Huazhong Tan says: ==================== net: hns3: misc updates for -next This patchset includes some updates for the HNS3 ethernet driver. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Коммит
394f9ebf92
|
@ -145,7 +145,6 @@ enum hnae3_reset_notify_type {
|
|||
HNAE3_DOWN_CLIENT,
|
||||
HNAE3_INIT_CLIENT,
|
||||
HNAE3_UNINIT_CLIENT,
|
||||
HNAE3_RESTORE_CLIENT,
|
||||
};
|
||||
|
||||
enum hnae3_hw_error_type {
|
||||
|
@ -622,16 +621,6 @@ struct hnae3_roce_private_info {
|
|||
unsigned long state;
|
||||
};
|
||||
|
||||
struct hnae3_unic_private_info {
|
||||
struct net_device *netdev;
|
||||
u16 rx_buf_len;
|
||||
u16 num_tx_desc;
|
||||
u16 num_rx_desc;
|
||||
|
||||
u16 num_tqps; /* total number of tqps in this handle */
|
||||
struct hnae3_queue **tqp; /* array base of all TQPs of this instance */
|
||||
};
|
||||
|
||||
#define HNAE3_SUPPORT_APP_LOOPBACK BIT(0)
|
||||
#define HNAE3_SUPPORT_PHY_LOOPBACK BIT(1)
|
||||
#define HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK BIT(2)
|
||||
|
@ -657,7 +646,6 @@ struct hnae3_handle {
|
|||
union {
|
||||
struct net_device *netdev; /* first member */
|
||||
struct hnae3_knic_private_info kinfo;
|
||||
struct hnae3_unic_private_info uinfo;
|
||||
struct hnae3_roce_private_info rinfo;
|
||||
};
|
||||
|
||||
|
|
|
@ -469,21 +469,8 @@ struct hns3_enet_tqp_vector {
|
|||
unsigned long last_jiffies;
|
||||
} ____cacheline_internodealigned_in_smp;
|
||||
|
||||
enum hns3_udp_tnl_type {
|
||||
HNS3_UDP_TNL_VXLAN,
|
||||
HNS3_UDP_TNL_GENEVE,
|
||||
HNS3_UDP_TNL_MAX,
|
||||
};
|
||||
|
||||
struct hns3_udp_tunnel {
|
||||
u16 dst_port;
|
||||
int used;
|
||||
};
|
||||
|
||||
struct hns3_nic_priv {
|
||||
struct hnae3_handle *ae_handle;
|
||||
u32 enet_ver;
|
||||
u32 port_id;
|
||||
struct net_device *netdev;
|
||||
struct device *dev;
|
||||
|
||||
|
@ -495,19 +482,10 @@ struct hns3_nic_priv {
|
|||
struct hns3_enet_tqp_vector *tqp_vector;
|
||||
u16 vector_num;
|
||||
|
||||
/* The most recently read link state */
|
||||
int link;
|
||||
u64 tx_timeout_count;
|
||||
|
||||
unsigned long state;
|
||||
|
||||
struct timer_list service_timer;
|
||||
|
||||
struct work_struct service_task;
|
||||
|
||||
struct notifier_block notifier_block;
|
||||
/* Vxlan/Geneve information */
|
||||
struct hns3_udp_tunnel udp_tnl[HNS3_UDP_TNL_MAX];
|
||||
struct hns3_enet_coalesce tx_coal;
|
||||
struct hns3_enet_coalesce rx_coal;
|
||||
};
|
||||
|
|
|
@ -884,8 +884,8 @@ struct hclge_cfg_tso_status_cmd {
|
|||
|
||||
#define HCLGE_GRO_EN_B 0
|
||||
struct hclge_cfg_gro_status_cmd {
|
||||
__le16 gro_en;
|
||||
u8 rsv[22];
|
||||
u8 gro_en;
|
||||
u8 rsv[23];
|
||||
};
|
||||
|
||||
#define HCLGE_TSO_MSS_MIN 256
|
||||
|
|
|
@ -1387,7 +1387,8 @@ static int hclge_configure(struct hclge_dev *hdev)
|
|||
|
||||
ret = hclge_parse_speed(cfg.default_speed, &hdev->hw.mac.speed);
|
||||
if (ret) {
|
||||
dev_err(&hdev->pdev->dev, "Get wrong speed ret=%d.\n", ret);
|
||||
dev_err(&hdev->pdev->dev, "failed to parse speed %u, ret = %d\n",
|
||||
cfg.default_speed, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1429,26 +1430,17 @@ static int hclge_configure(struct hclge_dev *hdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int hclge_config_tso(struct hclge_dev *hdev, unsigned int tso_mss_min,
|
||||
unsigned int tso_mss_max)
|
||||
static int hclge_config_tso(struct hclge_dev *hdev, u16 tso_mss_min,
|
||||
u16 tso_mss_max)
|
||||
{
|
||||
struct hclge_cfg_tso_status_cmd *req;
|
||||
struct hclge_desc desc;
|
||||
u16 tso_mss;
|
||||
|
||||
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_TSO_GENERIC_CONFIG, false);
|
||||
|
||||
req = (struct hclge_cfg_tso_status_cmd *)desc.data;
|
||||
|
||||
tso_mss = 0;
|
||||
hnae3_set_field(tso_mss, HCLGE_TSO_MSS_MIN_M,
|
||||
HCLGE_TSO_MSS_MIN_S, tso_mss_min);
|
||||
req->tso_mss_min = cpu_to_le16(tso_mss);
|
||||
|
||||
tso_mss = 0;
|
||||
hnae3_set_field(tso_mss, HCLGE_TSO_MSS_MIN_M,
|
||||
HCLGE_TSO_MSS_MIN_S, tso_mss_max);
|
||||
req->tso_mss_max = cpu_to_le16(tso_mss);
|
||||
req->tso_mss_min = cpu_to_le16(tso_mss_min);
|
||||
req->tso_mss_max = cpu_to_le16(tso_mss_max);
|
||||
|
||||
return hclge_cmd_send(&hdev->hw, &desc, 1);
|
||||
}
|
||||
|
@ -1465,7 +1457,7 @@ static int hclge_config_gro(struct hclge_dev *hdev, bool en)
|
|||
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GRO_GENERIC_CONFIG, false);
|
||||
req = (struct hclge_cfg_gro_status_cmd *)desc.data;
|
||||
|
||||
req->gro_en = cpu_to_le16(en ? 1 : 0);
|
||||
req->gro_en = en ? 1 : 0;
|
||||
|
||||
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
||||
if (ret)
|
||||
|
@ -9928,10 +9920,8 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
|
|||
int ret;
|
||||
|
||||
hdev = devm_kzalloc(&pdev->dev, sizeof(*hdev), GFP_KERNEL);
|
||||
if (!hdev) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
if (!hdev)
|
||||
return -ENOMEM;
|
||||
|
||||
hdev->pdev = pdev;
|
||||
hdev->ae_dev = ae_dev;
|
||||
|
@ -10110,6 +10100,7 @@ err_pci_uninit:
|
|||
pci_release_regions(pdev);
|
||||
pci_disable_device(pdev);
|
||||
out:
|
||||
mutex_destroy(&hdev->vport_lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -10733,16 +10724,19 @@ static int hclge_get_64_bit_regs(struct hclge_dev *hdev, u32 regs_num,
|
|||
|
||||
int hclge_query_bd_num_cmd_send(struct hclge_dev *hdev, struct hclge_desc *desc)
|
||||
{
|
||||
/*prepare 4 commands to query DFX BD number*/
|
||||
hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_DFX_BD_NUM, true);
|
||||
desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
|
||||
hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_DFX_BD_NUM, true);
|
||||
desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
|
||||
hclge_cmd_setup_basic_desc(&desc[2], HCLGE_OPC_DFX_BD_NUM, true);
|
||||
desc[2].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
|
||||
hclge_cmd_setup_basic_desc(&desc[3], HCLGE_OPC_DFX_BD_NUM, true);
|
||||
int i;
|
||||
|
||||
return hclge_cmd_send(&hdev->hw, desc, 4);
|
||||
/* initialize command BD except the last one */
|
||||
for (i = 0; i < HCLGE_GET_DFX_REG_TYPE_CNT - 1; i++) {
|
||||
hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_DFX_BD_NUM,
|
||||
true);
|
||||
desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
|
||||
}
|
||||
|
||||
/* initialize the last command BD */
|
||||
hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_DFX_BD_NUM, true);
|
||||
|
||||
return hclge_cmd_send(&hdev->hw, desc, HCLGE_GET_DFX_REG_TYPE_CNT);
|
||||
}
|
||||
|
||||
static int hclge_get_dfx_reg_bd_num(struct hclge_dev *hdev,
|
||||
|
|
|
@ -771,12 +771,6 @@ struct hclge_dev {
|
|||
u16 num_roce_msi; /* Num of roce vectors for this PF */
|
||||
int roce_base_vector;
|
||||
|
||||
u16 pending_udp_bitmap;
|
||||
|
||||
u16 rx_itr_default;
|
||||
u16 tx_itr_default;
|
||||
|
||||
u16 adminq_work_limit; /* Num of admin receive queue desc to process */
|
||||
unsigned long service_timer_period;
|
||||
unsigned long service_timer_previous;
|
||||
struct timer_list reset_timer;
|
||||
|
|
|
@ -161,8 +161,8 @@ struct hclgevf_query_res_cmd {
|
|||
|
||||
#define HCLGEVF_GRO_EN_B 0
|
||||
struct hclgevf_cfg_gro_status_cmd {
|
||||
__le16 gro_en;
|
||||
u8 rsv[22];
|
||||
u8 gro_en;
|
||||
u8 rsv[23];
|
||||
};
|
||||
|
||||
#define HCLGEVF_RSS_DEFAULT_OUTPORT_B 4
|
||||
|
|
|
@ -46,7 +46,7 @@ static const u32 cmdq_reg_addr_list[] = {HCLGEVF_CMDQ_TX_ADDR_L_REG,
|
|||
HCLGEVF_CMDQ_RX_TAIL_REG,
|
||||
HCLGEVF_CMDQ_RX_HEAD_REG,
|
||||
HCLGEVF_VECTOR0_CMDQ_SRC_REG,
|
||||
HCLGEVF_CMDQ_INTR_STS_REG,
|
||||
HCLGEVF_VECTOR0_CMDQ_STATE_REG,
|
||||
HCLGEVF_CMDQ_INTR_EN_REG,
|
||||
HCLGEVF_CMDQ_INTR_GEN_REG};
|
||||
|
||||
|
@ -1826,7 +1826,7 @@ static void hclgevf_dump_rst_info(struct hclgevf_dev *hdev)
|
|||
dev_info(&hdev->pdev->dev, "vector0 interrupt enable status: 0x%x\n",
|
||||
hclgevf_read_dev(&hdev->hw, HCLGEVF_MISC_VECTOR_REG_BASE));
|
||||
dev_info(&hdev->pdev->dev, "vector0 interrupt status: 0x%x\n",
|
||||
hclgevf_read_dev(&hdev->hw, HCLGEVF_VECTOR0_CMDQ_STAT_REG));
|
||||
hclgevf_read_dev(&hdev->hw, HCLGEVF_VECTOR0_CMDQ_STATE_REG));
|
||||
dev_info(&hdev->pdev->dev, "handshake status: 0x%x\n",
|
||||
hclgevf_read_dev(&hdev->hw, HCLGEVF_CMDQ_TX_DEPTH_REG));
|
||||
dev_info(&hdev->pdev->dev, "function reset status: 0x%x\n",
|
||||
|
@ -2250,7 +2250,7 @@ static enum hclgevf_evt_cause hclgevf_check_evt_cause(struct hclgevf_dev *hdev,
|
|||
|
||||
/* fetch the events from their corresponding regs */
|
||||
cmdq_stat_reg = hclgevf_read_dev(&hdev->hw,
|
||||
HCLGEVF_VECTOR0_CMDQ_STAT_REG);
|
||||
HCLGEVF_VECTOR0_CMDQ_STATE_REG);
|
||||
|
||||
if (BIT(HCLGEVF_VECTOR0_RST_INT_B) & cmdq_stat_reg) {
|
||||
rst_ing_reg = hclgevf_read_dev(&hdev->hw, HCLGEVF_RST_ING);
|
||||
|
@ -2403,7 +2403,7 @@ static int hclgevf_config_gro(struct hclgevf_dev *hdev, bool en)
|
|||
false);
|
||||
req = (struct hclgevf_cfg_gro_status_cmd *)desc.data;
|
||||
|
||||
req->gro_en = cpu_to_le16(en ? 1 : 0);
|
||||
req->gro_en = en ? 1 : 0;
|
||||
|
||||
ret = hclgevf_cmd_send(&hdev->hw, &desc, 1);
|
||||
if (ret)
|
||||
|
|
|
@ -42,8 +42,6 @@
|
|||
#define HCLGEVF_CMDQ_RX_DEPTH_REG 0x27020
|
||||
#define HCLGEVF_CMDQ_RX_TAIL_REG 0x27024
|
||||
#define HCLGEVF_CMDQ_RX_HEAD_REG 0x27028
|
||||
#define HCLGEVF_CMDQ_INTR_SRC_REG 0x27100
|
||||
#define HCLGEVF_CMDQ_INTR_STS_REG 0x27104
|
||||
#define HCLGEVF_CMDQ_INTR_EN_REG 0x27108
|
||||
#define HCLGEVF_CMDQ_INTR_GEN_REG 0x2710C
|
||||
|
||||
|
@ -88,7 +86,7 @@
|
|||
/* Vector0 interrupt CMDQ event source register(RW) */
|
||||
#define HCLGEVF_VECTOR0_CMDQ_SRC_REG 0x27100
|
||||
/* Vector0 interrupt CMDQ event status register(RO) */
|
||||
#define HCLGEVF_VECTOR0_CMDQ_STAT_REG 0x27104
|
||||
#define HCLGEVF_VECTOR0_CMDQ_STATE_REG 0x27104
|
||||
/* CMDQ register bits for RX event(=MBX event) */
|
||||
#define HCLGEVF_VECTOR0_RX_CMDQ_INT_B 1
|
||||
/* RST register bits for RESET event */
|
||||
|
|
Загрузка…
Ссылка в новой задаче