From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id B8512CD98E1 for ; Tue, 16 Jun 2026 12:23:15 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8FDC941157; Tue, 16 Jun 2026 14:21:56 +0200 (CEST) Received: from smtpbgbr1.qq.com (smtpbgbr1.qq.com [54.207.19.206]) by mails.dpdk.org (Postfix) with ESMTP id 9908240E42; Tue, 16 Jun 2026 14:21:53 +0200 (CEST) X-QQ-mid: esmtpsz20t1781612509t0059819a X-QQ-Originating-IP: mRRrcisiEsOZWYvEXAtI3VknxCrJa+lyOrGxO00gbRU= Received: from DSK-zaiyuwang.trustnetic.com ( [183.157.22.210]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 16 Jun 2026 20:21:48 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 10067699258871609126 EX-QQ-RecipientCnt: 4 From: Zaiyu Wang To: dev@dpdk.org Cc: Zaiyu Wang , stable@dpdk.org, Jiawen Wu Subject: [PATCH v6 21/21] net/txgbe: fix temperature track for AML NIC Date: Tue, 16 Jun 2026 20:20:29 +0800 Message-Id: <20260616122030.9688-22-zaiyuwang@trustnetic.com> X-Mailer: git-send-email 2.21.0.windows.1 In-Reply-To: <20260616122030.9688-1-zaiyuwang@trustnetic.com> References: <20260423034024.14404-1-zaiyuwang@trustnetic.com> <20260616122030.9688-1-zaiyuwang@trustnetic.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: esmtpsz:trustnetic.com:qybglogicsvrsz:qybglogicsvrsz3b-0 X-QQ-XMAILINFO: ORrnW06vGt6iS8ZPpAh5722XjtY3bJH9vw1oucbgW0hP6PPD5Z36iv7D LwRnI3qYpC8I3bAWLaoRUaeXaKw6sn+jNH2DHirHx5c31yl3nZv7G+kprUidMBv5/ljwjcA aZ2ALav3Ei4c+KBnl1RWdefxGNhwwzzxISEvRTzq3df5gaVtqPLl/LVmnqKBWGM4VMtNSyC /iIG0u5eneNwmXPw1ZBEl7vrmsmTOXvjk/wS/y07M1hSNSXu/m7RfEbiuf8es0FogqH++7t 7dBTzab5rVqgMdVpnjF8eDmu70ZtuZk7VX/RBZ066Sk3dClHnCSFikeACdOQqKY1qLWomxF iWTUbF8JtEY/OZ2LBqO02YWbchhQK7I1u5Vv/PiQzztfMvpGMkeEzzB41kdc4YxV5exl0ln ULD81F7qHA8VJtoVIbW1H8AP/jA/5OL4uUZbjrGfZbc8BmpOuO8EfJ3e32osF4i1Xg9QeaY aHD0XawTGUlvdbMXi9EyJdJhQYGi9J3OoRCc9tGb073UVlQUWEnKzRdjJla+5yRpT//Pky3 wV3muyYnJ7sauA6QvWYAvnLb77LVzLavqOPF8OGS1KeU6FhZwxfWHGsKJnwDWtRi15wi2GO u79mS1z/Q6X08mkvQgdfinl3EoqyzE55N4ekoJKKuuSa46oHda+Dmc0ei4j9SavWG3cSfqZ CFjRKAwu2uhx/6ahCq2bvCmG/69pXvH2a/7V06YvT0+JF4tsXxzQFIDyCgq1IOVBtJfRDAd /vtnl/m5JxY91LqrNyZ7VqAoRfJEMIk0bAfeUASUxORa2dxb1sVxjjIf6A5yAOw2pl2uUo/ K0QLrEyVfiYBlRiad1RmPgj5shg/A4vBptNw3ZK171wAn+O+0ioYhpOwUgkuo8JwW9rc3Xm wcFAhNcLi3tOVxmNId1AqvK6R58scE9uvyOl8n03NMHmiiGaH06QxZct2iFaSsMzvapBT45 6q2NvML/ngZDlvEJBal46dg1twc75eNbtpDpZRuAfiff6eQtjwKC3xWRc+6BFfYDfRIn0MF 5FazzOSiH5VYfsUXCenK3cgC/iv/0ZC2pWZazlY8FMEWEl5DE0BS5Lgeq5sVpT247i5ymKi 6cY5bh7FgYS X-QQ-XMRINFO: Nq+8W0+stu50tPAe92KXseR0ZZmBTk3gLg== X-QQ-RECHKSPAM: 0 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 Previously, temperature tracking for the amlite NIC was handled by firmware together with the hardware setup. However, the firmware-based PHY configuration has proven to be unstable. Re-add the temperature tracking function directly in the driver and invoke it periodically to ensure the PHY remains calibrated. According to the hardware recommendation, the tracking sequence should be run at least every 100 ms to keep temperature drift within 5 °C. Considering the software and hardware overhead, a 2-second interval is used as a practical trade-off that still meets stability requirements while minimizing performance impact. The periodic tracking is implemented using a timer in the driver, and the sequence itself is the same as the one originally performed during link setup. Fixes: fb6eb170dfa2 ("net/txgbe: add basic link configuration for Amber-Lite") Cc: stable@dpdk.org Signed-off-by: Zaiyu Wang --- drivers/net/txgbe/txgbe_ethdev.c | 44 +++++++++++++++++++++++++++++++- drivers/net/txgbe/txgbe_ethdev.h | 1 + 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c index 57803fe841..cb69fcd28f 100644 --- a/drivers/net/txgbe/txgbe_ethdev.c +++ b/drivers/net/txgbe/txgbe_ethdev.c @@ -2011,8 +2011,10 @@ txgbe_dev_start(struct rte_eth_dev *dev) txgbe_filter_restore(dev); hw->bp_event_interval = 100 * 1000; - if (hw->mac.type == txgbe_mac_aml || hw->mac.type == txgbe_mac_aml40) + if (hw->mac.type == txgbe_mac_aml || hw->mac.type == txgbe_mac_aml40) { rte_eal_alarm_set(hw->bp_event_interval, txgbe_dev_e56_check_bp_event, dev); + rte_eal_alarm_set(1000 * 1000 * 2, txgbe_dev_check_aml_temp_event, dev); + } if (tm_conf->root && !tm_conf->committed) PMD_DRV_LOG(WARNING, @@ -2060,6 +2062,7 @@ txgbe_dev_stop(struct rte_eth_dev *dev) if (hw->mac.type == txgbe_mac_aml || hw->mac.type == txgbe_mac_aml40) { rte_eal_alarm_cancel(txgbe_dev_e56_check_bp_event, dev); + rte_eal_alarm_cancel(txgbe_dev_check_aml_temp_event, dev); rte_eal_alarm_cancel(txgbe_dev_setup_link_alarm_handler_aml, hw); } @@ -2932,6 +2935,45 @@ txgbe_dev_supported_ptypes_get(struct rte_eth_dev *dev, size_t *no_of_elements) return NULL; } +void txgbe_dev_check_aml_temp_event(void *param) +{ + struct rte_eth_dev *dev = (struct rte_eth_dev *)param; + struct txgbe_hw *hw = TXGBE_DEV_HW(dev); + uint32_t link_speed = 0, val = 0; + s32 status = 0; + int temp; + + if (hw == NULL) + return; + + status = txgbe_e56_get_temp(hw, &temp); + if (status) + temp = DEFAULT_TEMP; + + if (!(temp - hw->temperature > 4 || + hw->temperature - temp > 4)) + goto out; + + hw->temperature = temp; + val = rd32(hw, TXGBE_PORT); + if (val & TXGBE_AMLITE_LED_LINK_40G) + link_speed = TXGBE_LINK_SPEED_40GB_FULL; + else if (val & TXGBE_AMLITE_LED_LINK_25G) + link_speed = TXGBE_LINK_SPEED_25GB_FULL; + else + link_speed = TXGBE_LINK_SPEED_10GB_FULL; + + rte_spinlock_lock(&hw->phy_lock); + if (hw->mac.type == txgbe_mac_aml) + txgbe_temp_track_seq(hw, link_speed); + else if (hw->mac.type == txgbe_mac_aml40) + txgbe_temp_track_seq_40g(hw, link_speed); + rte_spinlock_unlock(&hw->phy_lock); + +out: + rte_eal_alarm_set(1000 * 1000 * 2, txgbe_dev_check_aml_temp_event, dev); +} + void txgbe_dev_e56_check_bp_event(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; diff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h index 309db3bfe9..c32c61d8bf 100644 --- a/drivers/net/txgbe/txgbe_ethdev.h +++ b/drivers/net/txgbe/txgbe_ethdev.h @@ -747,5 +747,6 @@ void txgbe_vlan_hw_strip_bitmap_set(struct rte_eth_dev *dev, uint16_t queue, bool on); void txgbe_config_vlan_strip_on_all_queues(struct rte_eth_dev *dev, int mask); +void txgbe_dev_check_aml_temp_event(void *param); void txgbe_dev_e56_check_bp_event(void *param); #endif /* _TXGBE_ETHDEV_H_ */ -- 2.21.0.windows.1