From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D22404237B; Mon, 9 Jan 2023 09:24:34 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BF40B40687; Mon, 9 Jan 2023 09:24:34 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 833414067C for ; Mon, 9 Jan 2023 09:24:32 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.54]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4Nr6MD2z3zzJq7y; Mon, 9 Jan 2023 16:20:24 +0800 (CST) Received: from localhost.localdomain (10.28.79.22) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Mon, 9 Jan 2023 16:23:52 +0800 From: Huisong Li To: CC: , , , , Subject: [PATCH] net/hns3: fix inaccurate RTC time to read Date: Mon, 9 Jan 2023 16:23:44 +0800 Message-ID: <20230109082344.17253-1-lihuisong@huawei.com> X-Mailer: git-send-email 2.22.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.28.79.22] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To kwepemm600004.china.huawei.com (7.193.23.242) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The sequence of reading current RTC time register doesn't meet the hardware requirements, which causes this time obtained is the one before modifying RTC time. Fixes: 38b539d96eb6 ("net/hns3: support IEEE 1588 PTP") Cc: stable@dpdk.org Signed-off-by: Huisong Li --- drivers/net/hns3/hns3_ptp.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/net/hns3/hns3_ptp.c b/drivers/net/hns3/hns3_ptp.c index 6bbd85ba23..db3c007b12 100644 --- a/drivers/net/hns3/hns3_ptp.c +++ b/drivers/net/hns3/hns3_ptp.c @@ -216,17 +216,21 @@ hns3_timesync_read_tx_timestamp(struct rte_eth_dev *dev, int hns3_timesync_read_time(struct rte_eth_dev *dev, struct timespec *ts) { +#define HNS3_PTP_SEC_H_OFFSET 32 +#define HNS3_PTP_SEC_H_MASK 0xFFFF + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + uint32_t sec_hi, sec_lo; uint64_t ns, sec; if (!hns3_dev_get_support(hw, PTP)) return -ENOTSUP; - sec = hns3_read_dev(hw, HNS3_CURR_TIME_OUT_L); - sec |= (uint64_t)(hns3_read_dev(hw, HNS3_CURR_TIME_OUT_H) & 0xFFFF) - << 32; - ns = hns3_read_dev(hw, HNS3_CURR_TIME_OUT_NS); + sec_hi = hns3_read_dev(hw, HNS3_CURR_TIME_OUT_H) & HNS3_PTP_SEC_H_MASK; + sec_lo = hns3_read_dev(hw, HNS3_CURR_TIME_OUT_L); + sec = ((uint64_t)sec_hi << HNS3_PTP_SEC_H_OFFSET) | sec_lo; + ns += sec * NSEC_PER_SEC; *ts = rte_ns_to_timespec(ns); -- 2.22.0