[03/11] net/hns3: add the uninitialization process of PTP

Message ID 20230529130940.1501-4-liudongdong3@huawei.com (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers
Series net/hns3: add some bugfixes for hns3 |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Dongdong Liu May 29, 2023, 1:09 p.m. UTC
  From: Huisong Li <lihuisong@huawei.com>

This patch adds the uninitialization process of PTP in case
of having an impact on PF driver in kernel.

Fixes: 38b539d96eb6 ("net/hns3: support IEEE 1588 PTP")
Cc: stable@dpdk.org

Signed-off-by: Huisong Li <lihuisong@huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
---
 drivers/net/hns3/hns3_ethdev.c |  2 +
 drivers/net/hns3/hns3_ethdev.h |  1 +
 drivers/net/hns3/hns3_ptp.c    | 68 +++++++++++++++++++++-------------
 3 files changed, 46 insertions(+), 25 deletions(-)
  

Patch

diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
index 39bbee1d7b..b62058a0a9 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -4633,6 +4633,7 @@  hns3_init_pf(struct rte_eth_dev *eth_dev)
 	hns3_fdir_filter_uninit(hns);
 err_fdir:
 	hns3_uninit_umv_space(hw);
+	hns3_ptp_uninit(hw);
 err_init_hw:
 	hns3_stats_uninit(hw);
 err_get_config:
@@ -4668,6 +4669,7 @@  hns3_uninit_pf(struct rte_eth_dev *eth_dev)
 	hns3_flow_uninit(eth_dev);
 	hns3_fdir_filter_uninit(hns);
 	hns3_uninit_umv_space(hw);
+	hns3_ptp_uninit(hw);
 	hns3_stats_uninit(hw);
 	hns3_config_mac_tnl_int(hw, false);
 	hns3_pf_disable_irq0(hw);
diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h
index 88146f5054..a03dc9fa89 100644
--- a/drivers/net/hns3/hns3_ethdev.h
+++ b/drivers/net/hns3/hns3_ethdev.h
@@ -1043,6 +1043,7 @@  int hns3_restore_ptp(struct hns3_adapter *hns);
 int hns3_mbuf_dyn_rx_timestamp_register(struct rte_eth_dev *dev,
 				    struct rte_eth_conf *conf);
 int hns3_ptp_init(struct hns3_hw *hw);
+void hns3_ptp_uninit(struct hns3_hw *hw);
 int hns3_timesync_enable(struct rte_eth_dev *dev);
 int hns3_timesync_disable(struct rte_eth_dev *dev);
 int hns3_timesync_read_rx_timestamp(struct rte_eth_dev *dev,
diff --git a/drivers/net/hns3/hns3_ptp.c b/drivers/net/hns3/hns3_ptp.c
index fb834bb180..44cba29854 100644
--- a/drivers/net/hns3/hns3_ptp.c
+++ b/drivers/net/hns3/hns3_ptp.c
@@ -56,31 +56,6 @@  hns3_ptp_int_en(struct hns3_hw *hw, bool en)
 	return ret;
 }
 
-int
-hns3_ptp_init(struct hns3_hw *hw)
-{
-	struct timespec sys_time;
-	struct rte_eth_dev *dev;
-	int ret;
-
-	if (!hns3_dev_get_support(hw, PTP))
-		return 0;
-
-	ret = hns3_ptp_int_en(hw, true);
-	if (ret)
-		return ret;
-
-	/* Start PTP timer */
-	hns3_write_dev(hw, HNS3_CFG_TIME_CYC_EN, 1);
-
-	/* Initializing the RTC. */
-	dev = &rte_eth_devices[hw->data->port_id];
-	clock_gettime(CLOCK_REALTIME, &sys_time);
-	(void)hns3_timesync_write_time(dev, &sys_time);
-
-	return 0;
-}
-
 static int
 hns3_timesync_configure(struct hns3_adapter *hns, bool en)
 {
@@ -301,3 +276,46 @@  hns3_restore_ptp(struct hns3_adapter *hns)
 
 	return ret;
 }
+
+int
+hns3_ptp_init(struct hns3_hw *hw)
+{
+	struct timespec sys_time;
+	struct rte_eth_dev *dev;
+	int ret;
+
+	if (!hns3_dev_get_support(hw, PTP))
+		return 0;
+
+	ret = hns3_ptp_int_en(hw, true);
+	if (ret != 0)
+		return ret;
+
+	/* Start PTP timer */
+	hns3_write_dev(hw, HNS3_CFG_TIME_CYC_EN, 1);
+
+	/* Initializing the RTC. */
+	dev = &rte_eth_devices[hw->data->port_id];
+	clock_gettime(CLOCK_REALTIME, &sys_time);
+	(void)hns3_timesync_write_time(dev, &sys_time);
+
+	return 0;
+}
+
+void
+hns3_ptp_uninit(struct hns3_hw *hw)
+{
+	struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
+	int ret;
+
+	if (!hns3_dev_get_support(hw, PTP))
+		return;
+
+	ret = hns3_ptp_int_en(hw, false);
+	if (ret != 0)
+		hns3_err(hw, "disable PTP interrupt failed, ret = %d.", ret);
+
+	ret = hns3_timesync_configure(hns, false);
+	if (ret != 0)
+		hns3_err(hw, "disable timesync failed, ret = %d.", ret);
+}