Commit 393ceeb9 authored by Paolo Abeni's avatar Paolo Abeni
Browse files

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: default avatarPaolo Abeni <pabeni@redhat.com>
parents 2ddc0dd7 35d92abf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;

+28 −24
Original line number Diff line number Diff line
@@ -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 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
	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);
+4 −1
Original line number Diff line number Diff line
@@ -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 */
+4 −3
Original line number Diff line number Diff line
@@ -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) &&
+9 −11
Original line number Diff line number Diff line
@@ -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 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
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;
Loading