Merge branch 'there-are-some-bugfix-for-the-hns3-ethernet-driver'
Jijie Shao says: ==================== There are some bugfix for the HNS3 ethernet driver ==================== Link: https://lore.kernel.org/r/20240507134224.2646246-1-shaojijie@huawei.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
commit
393ceeb921
@ -897,7 +897,7 @@ struct hnae3_handle {
|
||||
struct hnae3_roce_private_info rinfo;
|
||||
};
|
||||
|
||||
u32 numa_node_mask; /* for multi-chip support */
|
||||
nodemask_t numa_node_mask; /* for multi-chip support */
|
||||
|
||||
enum hnae3_port_base_vlan_state port_base_vlan_state;
|
||||
|
||||
|
@ -1537,6 +1537,9 @@ static int hclge_configure(struct hclge_dev *hdev)
|
||||
cfg.default_speed, ret);
|
||||
return ret;
|
||||
}
|
||||
hdev->hw.mac.req_speed = hdev->hw.mac.speed;
|
||||
hdev->hw.mac.req_autoneg = AUTONEG_ENABLE;
|
||||
hdev->hw.mac.req_duplex = DUPLEX_FULL;
|
||||
|
||||
hclge_parse_link_mode(hdev, cfg.speed_ability);
|
||||
|
||||
@ -1766,7 +1769,8 @@ static int hclge_vport_setup(struct hclge_vport *vport, u16 num_tqps)
|
||||
|
||||
nic->pdev = hdev->pdev;
|
||||
nic->ae_algo = &ae_algo;
|
||||
nic->numa_node_mask = hdev->numa_node_mask;
|
||||
bitmap_copy(nic->numa_node_mask.bits, hdev->numa_node_mask.bits,
|
||||
MAX_NUMNODES);
|
||||
nic->kinfo.io_base = hdev->hw.hw.io_base;
|
||||
|
||||
ret = hclge_knic_setup(vport, num_tqps,
|
||||
@ -2458,7 +2462,8 @@ static int hclge_init_roce_base_info(struct hclge_vport *vport)
|
||||
|
||||
roce->pdev = nic->pdev;
|
||||
roce->ae_algo = nic->ae_algo;
|
||||
roce->numa_node_mask = nic->numa_node_mask;
|
||||
bitmap_copy(roce->numa_node_mask.bits, nic->numa_node_mask.bits,
|
||||
MAX_NUMNODES);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -3342,9 +3347,9 @@ hclge_set_phy_link_ksettings(struct hnae3_handle *handle,
|
||||
return ret;
|
||||
}
|
||||
|
||||
hdev->hw.mac.autoneg = cmd->base.autoneg;
|
||||
hdev->hw.mac.speed = cmd->base.speed;
|
||||
hdev->hw.mac.duplex = cmd->base.duplex;
|
||||
hdev->hw.mac.req_autoneg = cmd->base.autoneg;
|
||||
hdev->hw.mac.req_speed = cmd->base.speed;
|
||||
hdev->hw.mac.req_duplex = cmd->base.duplex;
|
||||
linkmode_copy(hdev->hw.mac.advertising, cmd->link_modes.advertising);
|
||||
|
||||
return 0;
|
||||
@ -3377,9 +3382,9 @@ static int hclge_tp_port_init(struct hclge_dev *hdev)
|
||||
if (!hnae3_dev_phy_imp_supported(hdev))
|
||||
return 0;
|
||||
|
||||
cmd.base.autoneg = hdev->hw.mac.autoneg;
|
||||
cmd.base.speed = hdev->hw.mac.speed;
|
||||
cmd.base.duplex = hdev->hw.mac.duplex;
|
||||
cmd.base.autoneg = hdev->hw.mac.req_autoneg;
|
||||
cmd.base.speed = hdev->hw.mac.req_speed;
|
||||
cmd.base.duplex = hdev->hw.mac.req_duplex;
|
||||
linkmode_copy(cmd.link_modes.advertising, hdev->hw.mac.advertising);
|
||||
|
||||
return hclge_set_phy_link_ksettings(&hdev->vport->nic, &cmd);
|
||||
@ -7952,8 +7957,7 @@ static void hclge_set_timer_task(struct hnae3_handle *handle, bool enable)
|
||||
/* Set the DOWN flag here to disable link updating */
|
||||
set_bit(HCLGE_STATE_DOWN, &hdev->state);
|
||||
|
||||
/* flush memory to make sure DOWN is seen by service task */
|
||||
smp_mb__before_atomic();
|
||||
smp_mb__after_atomic(); /* flush memory to make sure DOWN is seen by service task */
|
||||
hclge_flush_link_update(hdev);
|
||||
}
|
||||
}
|
||||
@ -9906,6 +9910,7 @@ static int hclge_set_vlan_protocol_type(struct hclge_dev *hdev)
|
||||
static int hclge_init_vlan_filter(struct hclge_dev *hdev)
|
||||
{
|
||||
struct hclge_vport *vport;
|
||||
bool enable = true;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
@ -9925,8 +9930,12 @@ static int hclge_init_vlan_filter(struct hclge_dev *hdev)
|
||||
vport->cur_vlan_fltr_en = true;
|
||||
}
|
||||
|
||||
if (test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, hdev->ae_dev->caps) &&
|
||||
!test_bit(HNAE3_DEV_SUPPORT_PORT_VLAN_BYPASS_B, hdev->ae_dev->caps))
|
||||
enable = false;
|
||||
|
||||
return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT,
|
||||
HCLGE_FILTER_FE_INGRESS, true, 0);
|
||||
HCLGE_FILTER_FE_INGRESS, enable, 0);
|
||||
}
|
||||
|
||||
static int hclge_init_vlan_type(struct hclge_dev *hdev)
|
||||
@ -11622,16 +11631,10 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = hclge_devlink_init(hdev);
|
||||
if (ret)
|
||||
goto err_pci_uninit;
|
||||
|
||||
devl_lock(hdev->devlink);
|
||||
|
||||
/* Firmware command queue initialize */
|
||||
ret = hclge_comm_cmd_queue_init(hdev->pdev, &hdev->hw.hw);
|
||||
if (ret)
|
||||
goto err_devlink_uninit;
|
||||
goto err_pci_uninit;
|
||||
|
||||
/* Firmware command initialize */
|
||||
ret = hclge_comm_cmd_init(hdev->ae_dev, &hdev->hw.hw, &hdev->fw_version,
|
||||
@ -11759,7 +11762,7 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
|
||||
|
||||
ret = hclge_update_port_info(hdev);
|
||||
if (ret)
|
||||
goto err_mdiobus_unreg;
|
||||
goto err_ptp_uninit;
|
||||
|
||||
INIT_KFIFO(hdev->mac_tnl_log);
|
||||
|
||||
@ -11799,6 +11802,10 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
|
||||
dev_warn(&pdev->dev,
|
||||
"failed to wake on lan init, ret = %d\n", ret);
|
||||
|
||||
ret = hclge_devlink_init(hdev);
|
||||
if (ret)
|
||||
goto err_ptp_uninit;
|
||||
|
||||
hclge_state_init(hdev);
|
||||
hdev->last_reset_time = jiffies;
|
||||
|
||||
@ -11806,10 +11813,10 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
|
||||
HCLGE_DRIVER_NAME);
|
||||
|
||||
hclge_task_schedule(hdev, round_jiffies_relative(HZ));
|
||||
|
||||
devl_unlock(hdev->devlink);
|
||||
return 0;
|
||||
|
||||
err_ptp_uninit:
|
||||
hclge_ptp_uninit(hdev);
|
||||
err_mdiobus_unreg:
|
||||
if (hdev->hw.mac.phydev)
|
||||
mdiobus_unregister(hdev->hw.mac.mdio_bus);
|
||||
@ -11819,9 +11826,6 @@ err_msi_uninit:
|
||||
pci_free_irq_vectors(pdev);
|
||||
err_cmd_uninit:
|
||||
hclge_comm_cmd_uninit(hdev->ae_dev, &hdev->hw.hw);
|
||||
err_devlink_uninit:
|
||||
devl_unlock(hdev->devlink);
|
||||
hclge_devlink_uninit(hdev);
|
||||
err_pci_uninit:
|
||||
pcim_iounmap(pdev, hdev->hw.hw.io_base);
|
||||
pci_release_regions(pdev);
|
||||
|
@ -279,11 +279,14 @@ struct hclge_mac {
|
||||
u8 media_type; /* port media type, e.g. fibre/copper/backplane */
|
||||
u8 mac_addr[ETH_ALEN];
|
||||
u8 autoneg;
|
||||
u8 req_autoneg;
|
||||
u8 duplex;
|
||||
u8 req_duplex;
|
||||
u8 support_autoneg;
|
||||
u8 speed_type; /* 0: sfp speed, 1: active speed */
|
||||
u8 lane_num;
|
||||
u32 speed;
|
||||
u32 req_speed;
|
||||
u32 max_speed;
|
||||
u32 speed_ability; /* speed ability supported by current media */
|
||||
u32 module_type; /* sub media type, e.g. kr/cr/sr/lr */
|
||||
@ -891,7 +894,7 @@ struct hclge_dev {
|
||||
|
||||
u16 fdir_pf_filter_count; /* Num of guaranteed filters for this PF */
|
||||
u16 num_alloc_vport; /* Num vports this driver supports */
|
||||
u32 numa_node_mask;
|
||||
nodemask_t numa_node_mask;
|
||||
u16 rx_buf_len;
|
||||
u16 num_tx_desc; /* desc num of per tx queue */
|
||||
u16 num_rx_desc; /* desc num of per rx queue */
|
||||
|
@ -1077,12 +1077,13 @@ static void hclge_mbx_request_handling(struct hclge_mbx_ops_param *param)
|
||||
|
||||
hdev = param->vport->back;
|
||||
cmd_func = hclge_mbx_ops_list[param->req->msg.code];
|
||||
if (cmd_func)
|
||||
ret = cmd_func(param);
|
||||
else
|
||||
if (!cmd_func) {
|
||||
dev_err(&hdev->pdev->dev,
|
||||
"un-supported mailbox message, code = %u\n",
|
||||
param->req->msg.code);
|
||||
return;
|
||||
}
|
||||
ret = cmd_func(param);
|
||||
|
||||
/* PF driver should not reply IMP */
|
||||
if (hnae3_get_bit(param->req->mbx_need_resp, HCLGE_MBX_NEED_RESP_B) &&
|
||||
|
@ -412,7 +412,8 @@ static int hclgevf_set_handle_info(struct hclgevf_dev *hdev)
|
||||
|
||||
nic->ae_algo = &ae_algovf;
|
||||
nic->pdev = hdev->pdev;
|
||||
nic->numa_node_mask = hdev->numa_node_mask;
|
||||
bitmap_copy(nic->numa_node_mask.bits, hdev->numa_node_mask.bits,
|
||||
MAX_NUMNODES);
|
||||
nic->flags |= HNAE3_SUPPORT_VF;
|
||||
nic->kinfo.io_base = hdev->hw.hw.io_base;
|
||||
|
||||
@ -2082,8 +2083,8 @@ static int hclgevf_init_roce_base_info(struct hclgevf_dev *hdev)
|
||||
|
||||
roce->pdev = nic->pdev;
|
||||
roce->ae_algo = nic->ae_algo;
|
||||
roce->numa_node_mask = nic->numa_node_mask;
|
||||
|
||||
bitmap_copy(roce->numa_node_mask.bits, nic->numa_node_mask.bits,
|
||||
MAX_NUMNODES);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2180,8 +2181,7 @@ static void hclgevf_set_timer_task(struct hnae3_handle *handle, bool enable)
|
||||
} else {
|
||||
set_bit(HCLGEVF_STATE_DOWN, &hdev->state);
|
||||
|
||||
/* flush memory to make sure DOWN is seen by service task */
|
||||
smp_mb__before_atomic();
|
||||
smp_mb__after_atomic(); /* flush memory to make sure DOWN is seen by service task */
|
||||
hclgevf_flush_link_update(hdev);
|
||||
}
|
||||
}
|
||||
@ -2845,10 +2845,6 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = hclgevf_devlink_init(hdev);
|
||||
if (ret)
|
||||
goto err_devlink_init;
|
||||
|
||||
ret = hclge_comm_cmd_queue_init(hdev->pdev, &hdev->hw.hw);
|
||||
if (ret)
|
||||
goto err_cmd_queue_init;
|
||||
@ -2941,6 +2937,10 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
|
||||
|
||||
hclgevf_init_rxd_adv_layout(hdev);
|
||||
|
||||
ret = hclgevf_devlink_init(hdev);
|
||||
if (ret)
|
||||
goto err_config;
|
||||
|
||||
set_bit(HCLGEVF_STATE_SERVICE_INITED, &hdev->state);
|
||||
|
||||
hdev->last_reset_time = jiffies;
|
||||
@ -2960,8 +2960,6 @@ err_misc_irq_init:
|
||||
err_cmd_init:
|
||||
hclge_comm_cmd_uninit(hdev->ae_dev, &hdev->hw.hw);
|
||||
err_cmd_queue_init:
|
||||
hclgevf_devlink_uninit(hdev);
|
||||
err_devlink_init:
|
||||
hclgevf_pci_uninit(hdev);
|
||||
clear_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state);
|
||||
return ret;
|
||||
|
@ -236,7 +236,7 @@ struct hclgevf_dev {
|
||||
u16 rss_size_max; /* HW defined max RSS task queue */
|
||||
|
||||
u16 num_alloc_vport; /* num vports this driver supports */
|
||||
u32 numa_node_mask;
|
||||
nodemask_t numa_node_mask;
|
||||
u16 rx_buf_len;
|
||||
u16 num_tx_desc; /* desc num of per tx queue */
|
||||
u16 num_rx_desc; /* desc num of per rx queue */
|
||||
|
Loading…
x
Reference in New Issue
Block a user